Back to skill

Security audit

Anti Rug

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does the advertised token-risk scanning, but it needs review because it can send requests to arbitrary custom API gateways and its low-risk verdict can overstate safety.

Review before installing in shared or privileged environments. Use only the default GoPlus endpoint or a trusted HTTPS gateway, do not allow untrusted prompts/users to choose --api_gateway, and treat 'low risk' results as one input rather than proof that a token is safe to buy.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/check_token.py:54
Finding

Unrestricted Custom API Gateway Permits SSRF-Like Outbound Requests

Content
View full analysis
requests.Response: """Make HTTP request with timeout.""" return requests.get( url, timeout=REQUEST_TIMEOUT, headers={"User-Agent": "AntiRugCN/3.1", "Accept": "application/json"}, ) ``` ```python def fetch(self, chain_id: str, contract_address: str) -> Optional[Dict]: """Fetch token data with retry logic.""" addr_lower = contract_address.lower() for i, base in enumerate(self.endpoints): url = f"{base}/api/v1/token_security/{chain_id}?contract_addresses={contract_address}" try: logger.info(f"[GoPlus] Trying endpoint [{i+1}/{len(self.endpoints)}]: {base}") resp = self._make_request(url) ``` ```python parser.add_argument("--api_gateway", default="", help="Custom API gateway (optional)") ``` ### Technical Analysis The `--api_gateway` value is used as the base of an outbound HTTP request without validating its scheme, hostname, resolved IP address, port, or trust level. A caller can consequently direct the Skill to an arbitrary network destination reachable from the execution environment. Although the request path is fixed to `/api/v1/token_security/...`, the behavior can still be used to probe internal HTTP services or reach endpoints unavailable from the attacker's own network. Plain HTTP gateways are also accepted, allowing queried chain identifiers and public contract addresses to be transmitted without transport encryption. The `requests.get()` call follows redirects by defa ...[truncated 2017 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:4
Finding

Runtime Dependencies Are Not Reproducibly Pinned or Integrity-Verified

Content
View full analysis
=2.28.0 # Type hints support (Python 3.8+) typing-extensions>=4.0.0; python_version<"3.10" ``` The documented installation procedure executes: ```bash pip install -r requirements.txt ``` ### Technical Analysis The dependency specifications use open-ended minimum versions. A future installation may therefore select any later release satisfying these constraints. The project supplies no lockfile, hashes, or other integrity metadata that would bind installation to a reviewed dependency set. Python package installation and subsequent imports execute code with the privileges of the installing or running user. If an upstream package release, package repository account, distribution artifact, or package index were compromised, users following the documented installation command could receive code that was not part of this audit. The package names are established packages, and the audit found no evidence of typo-squatting, dependency confusion, a malicious package index, or a currently malicious release. This finding concerns supply-chain hardening and reproducibility rather than confirmed malicious dependency content. ### Attack Path 1. A user follows the documented `pip install -r requirements.txt` procedure. 2. `pip` resolves the newest available versions satisfying the open-ended minimum constraints. 3. A compromised, malicious, or unexpectedly changed future release is selected. 4. Because no hashes are provided, installation does not verify that the artifact matches a project-approved package file. 5. Package installation hooks or imported package code execute with the user's privileges. ### Impact Assessment Successful dependency compromise could execute arbitrary Python code with the privil ...[truncated 454 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises installation and usage for a token scanner that necessarily reaches external blockchain or RPC/network services, but the manifest does not declare any explicit tool scope such as permissions or allowed-tools. This creates a transparency and governance gap: an agent or user may invoke a network-capable skill without clear prior disclosure or enforcement of what outbound access is required.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This Python file contains multiple user-facing description and implication strings written only in Chinese, such as the fatal-rule labels and explanations. That imposes a specific language choice in the skill's output without any visible opt-in, alternative locale support, or documented region-specific justification in this file.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The tool states a low-scoring contract 'is safe' even though the assessment is only heuristic and API-driven. In a Web3 security-scanner skill, that wording can create false assurance and cause users to trust malicious or unvetted tokens, increasing the chance of financial loss.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code contains user-facing natural-language conclusions exclusively in Chinese string literals. Under the policy, forcing a specific language without user opt-in or a documented locale-specific justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The validator returns natural-language conclusion strings entirely in Chinese, which imposes a specific language on downstream users or interfaces. The file does not indicate that the skill is intentionally limited to a Chinese-speaking or region-specific context, nor does it offer any opt-in or language selection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The validator returns natural-language output strings entirely in Chinese for both branches, with no indication that the language is configurable or chosen by the user. This is a language/locale policy issue because it imposes a specific language on all users without opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The validator returns user-facing conclusion text entirely in Chinese, including warning labels and remediation guidance, with no indication that the user can choose a language or that the skill is intentionally limited to a Chinese-speaking context. This is a natural-language locale policy issue because the file hardcodes a specific language in output strings.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

This markdown file contains natural-language text indicating an English-only documentation choice for compatibility. Under the policy, forcing a specific language without offering user choice or documenting a justified regional constraint can be a locale-policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The usage section tells users how to analyze a contract address but does not warn that the skill will contact external blockchain/RPC services. This can lead to unintended disclosure of user-supplied contract addresses, environment-derived metadata, or operational behavior to third-party providers, even if the addresses themselves are public.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency is specified with a lower bound only, so builds may resolve to different versions over time and could silently pick up vulnerable or breaking releases. In a security-scanning skill that relies on outbound HTTP requests, lack of pinning reduces reproducibility and makes supply-chain risk harder to control and audit.

Content

Scanner excerpt · requirements.txt (reported line 5)May include surrounding context.

text
# Dependencies for Web3 token security analysis

# HTTP client for API requests
requests>=2.28.0

# Type hints support (Python 3.8+)
typing-extensions>=4.0.0; python_version<"3.10"

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

The manifest includes requests without pinning to a specific version, and requests has multiple historical advisories. Because the resolved version is unspecified, deployments could install a release affected by known issues, including credential leakage or TLS-related flaws depending on environment and usage.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The code hard-codes the User-Agent string as "AntiRugCN/3.1", which imposes a China-specific locale/branding signal in outbound requests. This is a natural-language locale choice presented without any user opt-in or justification in the file.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest description suggests broad coverage across Ethereum, BSC, Polygon, and other EVM chains. In code, requests are rejected unless the chain_id exists in CHAIN_NAMES, and address validation is hardcoded for 0x-style addresses except for a special solana branch, so support is limited to whatever static set is configured rather than generic EVM-chain compatibility.

Content

No source excerpt is available for this finding.