Back to skill

Security audit

wallet-address-check

Security checks for vulnerabilities and agentic risk

Overview

The skill is a local wallet-address screening tool, but its PASS result can falsely accept address-shaped strings without full checksum validation before cryptocurrency transfers.

Install only from a pinned, reviewed commit or release. Treat this tool as a rough format screen, not as proof an address is valid or safe for transfer; verify addresses in wallet software or a validator that performs full checksum and network/version checks before sending funds.

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

Error
Location
scripts/wallet_address_check.py:3
Finding
Invalid Cryptocurrency Addresses Can Be Incorrectly Reported as Passing Validation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/wallet_address_check.py`, lines 3-30 **Vulnerability Type**: Incomplete cryptocurrency address and checksum validation **Risk Level**: High ### Vulnerable Code ```python B58 = re.compile(r"^[1-9A-HJ-NP-Za-km-z]{26,35}$") B32 = re.compile(r"^bc1[02-9ac-hj-np-z]{11,71}$") HEX = re.compile(r"^0x[0-9a-fA-F]{40}$") ``` ```python elif B32.match(addr): chains.append("Bitcoin(bech32/bc1)") ok = True elif B58.match(addr): if addr.startswith("T") and len(addr) == 34: chains.append("TRON(Base58)") else: chains.append("Bitcoin(Base58)等Base58系") ok = True notes.append("Base58地址未做双哈希校验和验证,大额转账请先小额试转") else: chains.append("无法识别") notes.append("格式不符合常见EVM/BTC系/TRON地址") ``` ### Technical Analysis The validator treats regular-expression conformance as sufficient for a successful result. It does not decode or validate: - Bitcoin Bech32 or Bech32m checksums. - Witness versions and their required Bech32/Bech32m encodings. - Witness program lengths. - Bitcoin network and address-version constraints. - Base58Check checksums or version bytes. - TRON Base58Check checksums and decoded network prefixes. Consequently, an address can use the permitted alphabet and length while containing a typographical error or deliberately invalid checksum. Such an address is assigned `ok = True`, printed as `PASS`, and returned with exit code `0`. The Base58 warning does not mitigate the vulnerability because the machine-readable result and process exit status still represent the address as valid. Automation invoking this script may rely exclusively on the Boolean result or exit code and never evaluate the warning. ### Attack Path 1. An attacker constructs or supplies a Bitcoin or TRON address-shaped string that satisfies the applicable regular expression but has an invalid checksum, version, or encoding. 2. A user or transfer workflow invokes the validator before making a payment. 3. ...[truncated 918 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Implement complete Bech32 and Bech32m decoding and checksum verification according to the relevant Bitcoin Improvement Proposals. 2. Validate witness versions, witness program lengths, human-readable network prefixes, and the required encoding variant. 3. Decode Base58 addresses and verify the complete Base58Check checksum before returning success. 4. Validate decoded version and network bytes separately for Bitcoin and TRON instead of inferring the chain from string shape alone. 5. Do not return `PASS` or exit status `0` when cryptographic validation was not performed. Introduce an explicit `INDETERMINATE` result with a nonzero exit status if full validation is unavailable. 6. Add positive and negative tests covering altered checksums, invalid version bytes, incorrect witness encodings, boundary lengths, and network mismatches. 7. Clearly distinguish syntactic screening from cryptographic address validation in both human-readable and JSON output. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:76
Finding
Installation Instructions Use Unpinned and Mutable Upstream Sources<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 76-81 **Vulnerability Type**: Unpinned package execution and mutable source installation **Risk Level**: Medium ### Vulnerable Code ```bash # One-command retrieval through the skills CLI npx skills add zhaoxinghua09-cell/agent-skills -g # Manual alternative: clone and copy the skill into the agent directory git clone https://github.com/zhaoxinghua09-cell/agent-skills.git cp -r agent-skills/skills/wallet-address-check ~/.workbuddy/skills/ ``` ### Technical Analysis The installation instructions invoke `npx skills` without specifying an exact package version or verified package digest. This permits package resolution to change over time and may execute a release that was not part of the audited artifact. The alternative installation method clones a mutable default branch without selecting a verified commit, signed tag, or release archive. Therefore, users following the instructions may install content that differs from the code reviewed in this audit. This is a supply-chain integrity weakness rather than evidence that the currently reviewed source is malicious. The risk arises because future upstream changes, account compromise, package compromise, or repository compromise could replace the effective installation payload after review. ### Attack Path 1. The npm package resolved by `npx skills`, or the referenced repository, is compromised or updated with unauthorized behavior. 2. A user follows the documented installation command. 3. `npx` resolves and runs an unpinned package, or Git clones the current mutable default branch. 4. The fetched package or repository content differs from the audited artifact. 5. The changed code is installed globally or copied into the user's agent Skill directory. 6. The unauthorized behavior executes later with the permissions of the user or agent process when the Skill or installation tooling is invoked. ### Impact Assessment The reviewed project its ...[truncated 512 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the npm CLI package to an exact reviewed version rather than invoking an unversioned package through `npx`. 2. Where supported, require lockfile or integrity-hash verification for downloaded npm artifacts. 3. Pin Git-based installation instructions to a specific audited commit hash or cryptographically signed release tag. 4. Publish SHA-256 hashes or signatures for release archives and document how users must verify them before installation. 5. Avoid global installation unless it is necessary; prefer a constrained local environment with minimal permissions. 6. Document the exact package version and repository commit corresponding to each Skill release. 7. Use protected branches, signed tags, mandatory review, and release automation to reduce the likelihood of unauthorized upstream modification. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The skill name, title, description, headings, and all operating instructions are written in Chinese, while only a single English display name field is provided. This creates a language-policy concern because the user-facing documentation appears to require one locale without stating that users may choose another language or that the skill is region-specific.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The documentation instructs users to run `npx skills` without pinning a version or package digest, which can cause execution of whatever package version is current at install time. If the upstream package is compromised, typosquatted, or updated maliciously, users may execute unreviewed code during installation or use.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
This code includes user-facing natural-language strings in Chinese for the argument parser description and console output. That forces a specific language/locale without any user opt-in or alternative, which matches the stated policy-violation category for language or locale constraints.

Static analysis

No suspicious patterns detected.