Back to skill

Security audit

Proxy Gateway

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed proxy/payment skill, but it needs Review because the implementation exposes high-impact network forwarding and financial/account endpoints with insufficient scoping and authorization.

Install or use this only if you are comfortable with a proxy operator seeing all URLs, headers, bodies, and responses, and do not send secrets or sensitive data through it. For self-hosting, deploy it in a tightly isolated environment with egress filtering that blocks loopback, private networks, metadata services, unsafe redirects, and unnecessary methods/headers. Treat the payment and account endpoints as needing review before production use, especially mainnet USDC deposits, balance/history access, free-trial abuse controls, Redis security, and dependency updates.

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 (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
app/core/security.py:43
Finding

Unrestricted Server-Side Request Forgery in the URL Fetch Endpoint

Content
View full analysis
bool: """ Validate URL format. - Must start with http:// or https:// """ if not url: return False return url.startswith(("http://", "https://")) ``` ```python # app/routers/proxy.py:75-84 from app.core.security import validate_url if not validate_url(fetch_request.url): return JSONResponse( status_code=400, content={ "success": False, "error": "Invalid URL", "message": "URL must start with http:// or https://" } ) ``` ```python # app/managers/proxy_manager.py:221-240 proxy_url = f"http://127.0.0.1:{self.clash_mixed_port}" transport = httpx.AsyncHTTPTransport(proxy=proxy_url) async with httpx.AsyncClient( timeout=30.0, follow_redirects=True, transport=transport ) as client: request_headers = headers or {} request_headers.setdefault("User-Agent", "ProxyGateway/0.3.0") response = await client.request( method=method.upper(), url=url, headers=request_headers, content=body ) ``` ### Technical Analysis The URL validation only verifies that the supplied string begins with `http://` or `https://`. It does not parse and validate the destination hostname, resolve DNS addresses, restrict destination ports, or reject loopback, private, link-local, reserved, multicast, and cloud metadata addresses. The forwarding implementation accepts a caller-controlled method, URL, headers, and body. It also enables automatic redirects without validating each redirect destination. Consequently, an external caller can instruct the server to make requests to resources reachable from the serve ...[truncated 1860 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
app/managers/hosted_payment.py:112
Finding

Mainnet Deposit Verification Accepts Counterfeit Tokens and Unbound Transaction Claims

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
app/routers/payment.py:68
Finding

Unauthenticated Balance and Transaction History Disclosure

Content
View full analysis
`. 3. The endpoint validates only the identifier's format. 4. The service returns the target account's balance and recent transaction records without requiring proof of ownership. 5. The attacker can repeat the request for additional identifiers and enumerate accessible account metadata. ### Impact Assessment An ...[truncated 526 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
app/routers/proxy.py:57
Finding

Free-Trial Quota Bypass Through Attacker-Controlled Client Identifiers

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (82)

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 23)May include surrounding context.

md
- Response content

**DO NOT use this proxy for:**
- API keys or access tokens
- Private keys or passwords
- Personal or sensitive data
- Internal/private network endpoints

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 54)May include surrounding context.

md
- Response content

**DO NOT use this proxy for:**
- API keys or access tokens
- Private keys or passwords
- Personal or sensitive data
- Internal/private network endpoints

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 · README.md (reported line 134)May include surrounding context.

md
pip install -r requirements.txt

# 4. Configure environment
cp .env.example .env
# Edit .env with your settings:
# - HOSTED_WALLET: Your Polygon wallet address
# - ADMIN_TOKEN: Secure random string (16+ chars)

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 · README.md (reported line 135)May include surrounding context.

md
# 4. Configure environment
cp .env.example .env
# Edit .env with your settings:
# - HOSTED_WALLET: Your Polygon wallet address
# - ADMIN_TOKEN: Secure random string (16+ chars)

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 · README.md (reported line 269)May include surrounding context.

md
# 4. Configure environment
cp .env.example .env
# Edit .env with your settings:
# - HOSTED_WALLET: Your Polygon wallet address
# - ADMIN_TOKEN: Secure random string (16+ chars)

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 270)May include surrounding context.

md
# 4. Configure environment
cp .env.example .env
# Edit .env with your settings:
# - HOSTED_WALLET: Your Polygon wallet address
# - ADMIN_TOKEN: Secure random string (16+ chars)

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 271)May include surrounding context.

md
# 4. Configure environment
cp .env.example .env
# Edit .env with your settings:
# - HOSTED_WALLET: Your Polygon wallet address
# - ADMIN_TOKEN: Secure random string (16+ chars)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a network-facing proxy service that enables unrestricted internet access and related web/API operations. The actual code shown does not perform proxying, outbound HTTP requests, scraping, routing, billing, or any other internet-access functionality. Instead, it is a generic security helper module focused on validation, sanitization, token generation, masking, and password checks. While such utilities could support a larger proxy system, this code chunk itself materially differs from the declared primary purpose, so this should be flagged as a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description emphasizes a secure HTTP proxy that gives AI agents internet access and supports scraping/API access. However, the supplied code does not implement proxying, HTTP requests, web access, scraping, or API integration behavior. Instead, it implements an abstract payment manager focused on deposits, balances, deductions, and charging users per request. While billing could be a supporting component of a pay-per-use proxy service, this code chunk’s primary purpose is payment processing, which is materially different from the declared primary functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description emphasizes a secure HTTP proxy that grants AI agents unrestricted internet access for web scraping and API use. The provided code chunk does not implement proxying, HTTP request routing, web access, scraping, or research automation. Instead, it only creates and caches a payment manager, switching between testnet and hosted payment implementations depending on configuration. That is a materially different primary purpose from the declared skill behavior, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents the skill as an HTTP proxy for internet access and web/API retrieval. The supplied code does not implement proxying, web scraping, outbound HTTP access for agents, or research automation. Instead, it is a payment subsystem centered on USDC deposits to a hosted wallet, blockchain receipt inspection, balance accounting, and request-cost deduction. While the pricing amount ($0.001 per API call) loosely aligns with billing language in the description, the primary behavior is materially different and includes significant undeclared capabilities related to cryptocurrency payments and ledger management.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description centers on a secure HTTP proxy that gives AI agents internet access for scraping, APIs, and research automation. The supplied code does not implement proxying, outbound HTTP requests, request routing, scraping, billing, or internet access. Instead, it defines an abstract storage interface plus concrete MemoryStorage and RedisStorage implementations for application state/cache handling. This is a materially different primary purpose from the declared one. While storage could be a supporting component of a proxy system, this chunk itself is purely backend storage logic and exposes additional undeclared capabilities such as Redis access and Lua script evaluation. Therefore, the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a secure HTTP proxy service for agent internet access, web scraping, and API integrations. The supplied code does not implement proxying, HTTP request forwarding, scraping, or general internet access. Instead, it is a billing/payment component specifically for testnet payments: it provides a deposit address, validates user IDs and transaction hashes, optionally checks a blockchain transaction receipt through Web3, auto-credits a fixed amount of test USDC, deducts usage balance, stores transaction history, and can reset test balances. While the pay-per-request price of 0.001 appears consistent with the pricing mentioned in the description, the primary purpose and capabilities are materially different. Therefore this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents the skill as an HTTP proxy for unrestricted internet access and research/web/API usage. However, the supplied code chunk does not implement proxying, outbound web access, scraping, or API integration features. Instead, it handles billing/payment operations centered on USDC deposits, confirming blockchain transactions, querying balances, and resetting test balances in testnet mode. While payment may support the broader product, this chunk’s actual purpose is materially different from the declared primary purpose, so this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a functional secure HTTP proxy for AI agents with internet access and related automation use cases. However, the provided code chunk is only an empty tests/integration/__init__.py file containing a comment. It does not implement any of the described capabilities, access any resources, define triggers, or provide supporting runtime behavior for the stated purpose. This is a material mismatch between declared purpose and actual behavior of the supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Yes, this is a clear mismatch. The description claims a functional secure HTTP proxy service for AI agents with internet access and related capabilities. However, the provided code chunk is only tests/unit/__init__.py containing a comment marking a unit test package. It has no executable logic and does not implement any of the declared behavior. This is not merely partial coverage or a supporting detail; the actual code shown is unrelated to the stated primary purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a network-facing HTTP proxy product that enables unrestricted internet access and related scraping/integration capabilities. The actual code does not implement or exercise proxying, outbound HTTP access, scraping, billing, or agent internet access. Instead, it contains unit tests for config parsing and input validation utilities, including transaction hash validation suggestive of a different application domain. This is a materially different primary purpose, so the description does not accurately represent the supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description centers on a secure HTTP proxy that gives AI agents internet access for scraping and API use. The supplied code does not implement or test proxy/network request behavior. Instead, it is a unit test module covering storage abstractions and a testnet payment manager with deposit addresses, balances, deductions, and per-request charges. While pay-per-use billing may support the broader product, this specific chunk’s primary behavior is materially different from the declared proxy/internet-access purpose, so this is a description-behavior mismatch.

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 · app/core/config.py (reported line 59)May include surrounding context.

python
DATABASE_URL: Optional[str] = Field(default=None, description="PostgreSQL database URL")
    
    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"
        case_sensitive = True

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
92% confidence
Finding

This endpoint can arbitrarily reset a user's balance when the service is in testnet mode, gated only by a static bearer admin token and an environment flag. If testnet is exposed publicly, misconfigured, or the admin token is leaked, an attacker could mint credits, alter account balances, or abuse the proxy service without payment, which directly affects integrity of billing and access control.

Content

No source excerpt is available for this finding.

Possible Typosquatting: 'uvicorn' resembles popular package 'gunicorn'

High
Category
Supply Chain
Confidence
70% confidence
Finding

Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: web3==7.14.1 — 2 advisory(ies): CVE-2026-40072 (web3.py: SSRF via CCIP Read (EIP-3668) OffchainLookup URL handling); CVE-2026-40072 (web3.py: SSRF via CCIP Read (EIP-3668) OffchainLookup URL handling)

High
Category
Supply Chain
Confidence
96% confidence
Finding

Using web3==7.14.1 with a known SSRF issue in CCIP Read/OffchainLookup handling is a genuine vulnerability if the service processes untrusted blockchain responses or user-supplied contract interactions. In this skill's context as an internet-enabled proxy gateway, SSRF is especially dangerous because it can be abused to reach internal services, cloud metadata endpoints, or other restricted network locations.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: pytest==8.3.5 — 2 advisory(ies): CVE-2025-71176 (pytest has vulnerable tmpdir handling); CVE-2025-71176 (pytest has vulnerable tmpdir handling)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file is entirely presented in Chinese, and there is no indication that the skill or report is region-specific or that users can opt into another language. Under the language/locale policy, forcing a specific language without user choice or clear justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The report simultaneously marks security as passed while documenting that unauthenticated access to the fetch capability is allowed during a free-trial path. In a proxy-gateway skill that provides internet access, any unauthenticated network egress path can be abused for unauthorized scraping, SSRF-style pivoting, quota evasion, or use of the service as an open proxy, so calling security 'passed' is misleading and dangerous.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.exposed_secret_literal

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
app/managers/hosted_payment.py:256

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
app/managers/storage.py:178

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
app/managers/storage.py:136

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
app/routers/proxy.py:57