Back to skill

Security audit

Near Getpay - Accept crypto payments with payment page using PingPay or HOT PAY

Security checks for vulnerabilities and agentic risk

Overview

This payment skill has a coherent purpose, but it exposes payment-related actions too broadly and gives unsafe credential/security guidance.

Review carefully before installing. Do not paste API keys into chat; use a local secret file or secret manager and prefer scoped/test provider keys. Do not expose the tunnel publicly until privileged link/session creation is authenticated and rate-limited, webhook signatures are actually verified, callback URLs use a trusted configured origin, dependencies are updated, and SSH setup uses a dedicated protected key with host-key verification.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (8)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
server-simple.ts:1143
Finding

HOT PAY Webhook Events Are Accepted Without Authentication

Content
View full analysis
{ try { const payload = req.body; console.log('\n🔔 HOT PAY Webhook Received'); console.log('='.repeat(70)); console.log(JSON.stringify(payload, null, 2)); console.log('='.repeat(70)); if (payload.type === 'PAYMENT_STATUS_UPDATE' && payload.status === 'SUCCESS') { console.log(`✅ Payment Confirmed!`); console.log(` Item ID: ${payload.item_id}`); console.log(` Amount: $${payload.amount_float} (${payload.amount_usd} USD)`); console.log(` Memo: ${payload.memo || 'N/A'}`); console.log(` TX Hash: ${payload.near_trx}`); console.log(` Verify: https://nearblocks.io/txns/${payload.near_trx}`); } res.status(200).json({ received: true }); } catch (error: any) { console.error('❌ Webhook Error:', error.message); res.status(500).json({ error: 'Webhook processing failed' }); } }); ``` ### Technical Analysis The webhook endpoint trusts arbitrary JSON without verifying a provider signature, shared secret, timestamp, event identifier, transaction status, or replay state. Any party that can access the public tunnel can submit an object containing `type: "PAYMENT_STATUS_UPDATE"` and `status: "SUCCESS"`, causing it to be treated as a confirmed payment. This contradicts the webhook signature-verification claim in `SKILL.md:290`. Although the current handler primarily logs the event, it establishes an unsafe payment-confirmation boundary and would become directly exploitable for unauthorized fulfillment if business logic were subsequently attached. ### Attack Path 1. The operator starts the Skill and exposes it through the localhost.run tunnel. 2. An attacker obtains or guesses the public tunnel URL. 3. The ...[truncated 846 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
server-simple.ts:953
Finding

Public Endpoints Permit Unauthenticated Use of the Operator's PingPay API Credential

Content
View full analysis
{ try { const amount = parseFloat(req.query.amount as string || '0'); const token = (req.query.token as string || 'USDC').toUpperCase(); const chain = 'near'; if (!amount || amount <= 0) { return res.json({ success: false, error: 'Invalid amount. Usage: /quick-link?amount=5&token=USDC' }); } // ... if (config.provider === 'pingpay' && client) { // ... const session = await client.createCheckoutSession({ amount: amountSmallest, asset: { chain, symbol: token }, successUrl: `${baseUrl}/success`, cancelUrl: `${baseUrl}/cancel`, metadata: { amount: amount.toString(), token, chain, timestamp: Date.now() } }); checkoutUrl = session.sessionUrl; } // ... } catch (error: any) { console.error('❌ Error:', error.message); res.json({ success: false, error: error.message }); } }); // Create payment session app.post('/create-session', async (req, res) => { try { const { amount, token, chain } = req.body; if (!amount || amount <= 0) { return res.json({ success: false, error: 'Invalid amount' }); } // ... const session = await client.createCheckoutSession({ amount: amountSmallest, asset: { chain, symbol: token }, successUrl: `${req.protocol}://${req.get('host')}/success`, cancelUrl: `${req.protocol}://${req.get('host')}/cancel`, metadata: { amount: amount.toString(), token, chain, timestamp: D ...[truncated 1751 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
server-simple.ts:980
Finding

Untrusted Host Header Is Used to Construct Payment Callback URLs

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
start-tunnel.ts:27
Finding

SSH Tunnel Explicitly Disables Host-Key Verification

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:266
Finding

Documentation Recommends Creating an Unencrypted Account-Wide Default SSH Key

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:158
Finding

Skill Instructions Encourage Disclosure of the Payment API Key in Agent Chat

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/payment-orchestrator.ts:58
Finding

Invoice Payment Flow Reuses the USDC Invoice Amount as the Source-Token Quantity

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
index.ts:41
Finding

Caller-Controlled Module Path Can Execute Arbitrary Accessible Local Modules

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (64)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 50)May include surrounding context.

  1. Sign up at pingpay.io
  2. Set your NEAR wallet in Dashboard → Settings
  3. Get API key from Dashboard → Settings → API Keys
  4. Add to .env:
env

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 53)May include surrounding context.

  1. Sign up at pingpay.io
  2. Set your NEAR wallet in Dashboard → Settings
  3. Get API key from Dashboard → Settings → API Keys
  4. Add to .env:
env

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The example conversation has the agent solicit a live API key and then accept it directly in chat, normalizing insecure secret-handling behavior. In the context of an agent skill, this is particularly dangerous because users may trust the workflow and expose production credentials that can be retained in history, analytics, or debugging logs.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README explicitly encourages the user to paste a live API key into the chat, but provides no warning that chat transcripts may be stored, logged, or visible to other systems. This creates a direct path for credential disclosure to the agent platform and any downstream logging or monitoring infrastructure.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 268)May include surrounding context.

md
| Issue | Solution |
|-------|----------|
| "No provider configured" | Visit `/setup` page for instructions |
| "Permission denied" (SSH) | Run `ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""` |
| "Tunnel closed" | Restart server (localhost.run has timeouts) |
| "Token not configured" | Create payment link for that token in HOT PAY |
| Provider errors | Verify API key / item_ids are correct |

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose omits the fact that the skill starts server and tunneling processes, which is a material operational and security behavior. This mismatch is more dangerous in context because the skill targets payment handling, where hidden internet exposure can lead to abuse, phishing, unwanted traffic, or compromise of adjacent local services.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared purpose omits the fact that the skill starts server and tunneling processes, which is a material operational and security behavior. This mismatch is more dangerous in context because the skill targets payment handling, where hidden internet exposure can lead to abuse, phishing, unwanted traffic, or compromise of adjacent local services.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose omits the fact that the skill starts server and tunneling processes, which is a material operational and security behavior. This mismatch is more dangerous in context because the skill targets payment handling, where hidden internet exposure can lead to abuse, phishing, unwanted traffic, or compromise of adjacent local services.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose omits the fact that the skill starts server and tunneling processes, which is a material operational and security behavior. This mismatch is more dangerous in context because the skill targets payment handling, where hidden internet exposure can lead to abuse, phishing, unwanted traffic, or compromise of adjacent local services.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

The declared purpose omits the fact that the skill starts server and tunneling processes, which is a material operational and security behavior. This mismatch is more dangerous in context because the skill targets payment handling, where hidden internet exposure can lead to abuse, phishing, unwanted traffic, or compromise of adjacent local services.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 67)May include surrounding context.

Copy .env.example to .env:

bash
cp .env.example .env

Edit .env:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 113)May include surrounding context.

Copy .env.example to .env:

bash
cp .env.example .env

Edit .env:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 185)May include surrounding context.

Copy .env.example to .env:

bash
cp .env.example .env

Edit .env:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · index.ts (reported line 206)May include surrounding context.

ts
Copy `.env.example` to `.env`:

```bash
cp .env.example .env
```

Edit `.env`:

Credential Access

High
Category
Privilege Escalation
Confidence
96% confidence
Finding

This line explicitly asks the user to share an API key with the agent, which is credential solicitation. In a payment-processing context, exposing API keys can allow unauthorized invoice creation, account abuse, and potential redirection or monitoring of payment activity.

Content

Scanner excerpt · SKILL.md (reported line 161)May include surrounding context.

md
1. Sign up at https://pingpay.io
2. Add your NEAR wallet address in settings
3. Get an API key from Dashboard → API Keys
4. Share it with me (or add to .env yourself)

Let me know when you have the API key!

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 231)May include surrounding context.

md
Edit preset amounts in `server-simple.ts`:

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 247)May include surrounding context.

md
Edit preset amounts in `server-simple.ts`:

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

The troubleshooting step instructs generating an SSH key at the default private-key path ~/.ssh/id_rsa, which touches credential material and may overwrite or conflict with an existing identity if followed carelessly. While not overtly malicious, encouraging key creation for a payment skill's tunneling setup increases credential-handling risk and may cause users to expose or misuse SSH identities.

Content

Scanner excerpt · SKILL.md (reported line 270)May include surrounding context.

md
### "Permission denied (publickey)" (localhost.run)

Run: `ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""`

### "Tunnel closed"

Known Vulnerable Dependency: axios==1.13.5 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
95% confidence
Finding

The lockfile pins axios 1.13.5, and the referenced advisories include SSRF-related proxy bypasses and prototype-pollution-driven request/response manipulation risks. In a payment-processing skill that likely makes outbound API calls to PingPay, HOT PAY, or blockchain services, HTTP client flaws are especially relevant because they can expose credentials, redirect requests, or let attacker-controlled inputs influence backend network access.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
88% confidence
Finding

form-data 4.0.5 is flagged for CRLF injection via unescaped multipart field names or filenames. If this skill ever forwards user-supplied files or metadata to payment or support backends, an attacker may be able to manipulate multipart boundaries or injected headers, potentially altering server-side interpretation of requests or smuggling unintended content.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==0.21.4 — 16 advisory(ies): CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF); CVE-2026-25639 (Axios is Vulnerable to Denial of Service via __proto__ Key in mergeConfig) +13 more

High
Category
Supply Chain
Confidence
98% confidence
Finding

The bundled localtunnel dependency pulls in axios 0.21.4, a much older version with multiple high-severity advisories including SSRF, prototype pollution, and denial-of-service issues. This is particularly concerning because localtunnel exposes local services to the internet, increasing attack surface and making any HTTP client weakness in that component more dangerous in a payment-related environment.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: path-to-regexp==0.1.12 — 1 advisory(ies): CVE-2024-45296 (path-to-regexp vulnerable to Regular Expression Denial of Service via multiple r)

High
Category
Supply Chain
Confidence
91% confidence
Finding

path-to-regexp 0.1.12 is flagged for ReDoS, and Express routing depends on it. In an externally reachable payment page or webhook handler, crafted paths can potentially trigger excessive backtracking and tie up the Node.js event loop, causing degraded service or temporary outage.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.5 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
95% confidence
Finding

The manifest permits installation of an axios version identified by the scanner as having multiple high-severity advisories, including SSRF-related and request-handling issues. In a payment-processing skill that likely makes outbound HTTP requests to payment providers and may handle secrets or callbacks, a vulnerable HTTP client materially increases the risk of request forgery, credential leakage, response tampering, or other compromise paths.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · index.ts (reported line 6)May include surrounding context.

ts
import * as dotenv from 'dotenv';
import * as path from 'path';

dotenv.config({ path: path.join(__dirname, '.env') });

const app = express();
const PORT = process.env.PORT || 3000;

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · index.ts (reported line 36)May include surrounding context.

ts
import * as dotenv from 'dotenv';
import * as path from 'path';

dotenv.config({ path: path.join(__dirname, '.env') });

const app = express();
const PORT = process.env.PORT || 3000;

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
start-tunnel.ts:15

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
server-simple.ts:9

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
server.ts:9