T09 · Insecure Skill Coding Practices
- Location
scripts/chaoschain_skill.py:568- Finding
Mainnet Registration Is Incorrectly Presented as a Testnet Transaction
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does the advertised ChaosChain lookup work, but it also signs and broadcasts blockchain registration transactions with a configured private key while under-warning users about mainnet risk.
Install only if you are comfortable with a skill that can submit an on-chain registration transaction. Use read-only commands without configuring a private key when possible, prefer a dedicated low-balance wallet, avoid mainnet registration until the warning/confirmation bug is fixed, and review or pin dependencies before running setup in an environment that contains wallet secrets.
scripts/chaoschain_skill.py:568Mainnet Registration Is Incorrectly Presented as a Testnet Transaction
requirements.txt:4Unpinned Dependencies Permit Unreviewed Supply-Chain Updates
The README prominently markets the skill as 'READ-ONLY by Default' and 'No transactions, no custody, no risk' while also documenting a /register command that performs on-chain transactions and requires a private key. This can mislead users into installing or configuring the skill under a false sense of safety, increasing the chance they expose credentials or authorize blockchain actions they did not expect.
The skill metadata and description imply a verification-only capability, but the documented behavior also includes agent registration on-chain. That mismatch can cause operators, reviewers, or automated policy systems to classify the skill as lower risk than it actually is, which is dangerous in a context where the skill may request sensitive key material and submit transactions.
Although the documentation mentions registration later, the declared purpose remains verification-focused while the skill materially acts as a launcher for an on-chain registration workflow. In an agent ecosystem, this context makes the issue more dangerous because verification tools are likely to be treated as low-risk, yet this one can trigger irreversible blockchain actions and consume funds for gas.
Although the documentation mentions registration later, the declared purpose remains verification-focused while the skill materially acts as a launcher for an on-chain registration workflow. In an agent ecosystem, this context makes the issue more dangerous because verification tools are likely to be treated as low-risk, yet this one can trigger irreversible blockchain actions and consume funds for gas.
The module docstring explicitly claims 'READ-ONLY access' and 'No protocol execution, no payments,' yet the command list includes register and the code later builds, signs, and broadcasts a nonpayable transaction. In an agent-skill ecosystem, deceptive safety claims materially increase risk because orchestration layers and users may trust the skill with wallet secrets or permit autonomous execution based on inaccurate documentation.
The skill metadata and top-level description frame the tool as verification-focused, but the implementation includes a write-capable register command that signs and submits blockchain transactions using CHAOSCHAIN_PRIVATE_KEY. This mismatch is dangerous because users or higher-level agents may grant permissions or invoke the skill under the false assumption that it is read-only, leading to unintended on-chain actions and gas expenditure.
The README's 'What This Is NOT' section states the skill does not interact with ChaosChain Gateway, but elsewhere the same document advertises /chaoschain register, requires CHAOSCHAIN_PRIVATE_KEY, and warns that registration enables on-chain transactions. This is an intent-level contradiction in the documentation because the skill is presented both as non-interacting beyond read-only verification and as capable of state-changing registration behavior.
The skill advertises shell and environment-dependent behavior (setup.sh, wallet env vars, Python execution) but declares no explicit tool scope or permissions. That creates hidden capability risk: an agent or user may invoke a skill with broader execution and secret access than the metadata signals, undermining informed consent and policy enforcement.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
python_exe = sys.executable
args = [python_exe, main_script, "whoami"] + sys.argv[1:]
sys.exit(subprocess.call(args))
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
python_exe = sys.executable
args = [python_exe, main_script, "whoami"] + sys.argv[1:]
sys.exit(subprocess.call(args))
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
python_exe = sys.executable
args = [python_exe, main_script, "whoami"] + sys.argv[1:]
sys.exit(subprocess.call(args))
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
python_exe = sys.executable
args = [python_exe, main_script, "whoami"] + sys.argv[1:]
sys.exit(subprocess.call(args))
The dependency specifier web3>=6.0.0 is unpinned, so installs may resolve to different versions over time, undermining reproducibility and allowing accidental adoption of vulnerable or breaking releases. In a security-sensitive skill that performs blockchain identity and trust verification, silently drifting to an affected web3 version could expose the agent to known library flaws or change verification behavior unexpectedly.
# ChaosChain OpenClaw Skill Dependencies
# Minimal dependencies for trust verification
web3>=6.0.0
eth-account>=0.8.0
The manifest does not pin web3, and static analysis notes known advisories including SSRF in CCIP Read/OffchainLookup URL handling. In a skill that verifies AI agent identity and reputation via on-chain registries, using a vulnerable web3 release could let crafted on-chain data trigger server-side network requests, potentially reaching internal services or exfiltrating metadata depending on deployment.
The dependency specifier eth-account>=0.8.0 is unpinned, which permits non-deterministic dependency resolution and makes it hard to verify whether deployed environments are using a safe version. Because this skill handles on-chain identity/reputation verification, dependency drift in account-handling code can introduce denial-of-service or parsing weaknesses into a trust-sensitive workflow.
# Minimal dependencies for trust verification
web3>=6.0.0
eth-account>=0.8.0
The manifest does not pin eth-account, and the package has known advisory history for regular expression denial of service. Even if exploitability depends on how the library is used, leaving the version unconstrained means deployments may resolve to an affected release, allowing attacker-controlled inputs to consume excessive CPU and degrade availability in identity verification flows.
No suspicious patterns detected.