T09 · Insecure Skill Coding Practices
- Location
src/tools/provision.ts:36- Finding
Blind Signing of Unvalidated Server-Controlled Messages
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears purpose-aligned, but it needs review because it can sign wallet messages and trigger USDC withdrawals without strong in-skill safeguards.
Install only if you trust the GateX402 backend and can run the skill with strict host controls: keep wallet keys in a vault, use a limited wallet/session policy, require explicit human approval before withdrawals, pin the installer path, and update the flagged dependencies before using it in CI or production.
src/tools/provision.ts:36Blind Signing of Unvalidated Server-Controlled Messages
src/tools/withdraw.ts:50Backend-Controlled Strings Are Returned to the Agent Without Content Neutralization
README.md:25Optional Installation Instructions Execute an Unpinned Package Through npx
vitest 4.0.18 is present and carries critical-severity advisories involving arbitrary file read and possible execution when the Vitest UI server is listening. While this is a dev dependency rather than demonstrated production code, the finding is still genuine and could compromise developer or CI environments if test UI features are enabled or exposed.
The manifest includes vitest 4.0.18, which is flagged as affected by critical advisories involving arbitrary file read and possible execution when the Vitest UI server or mocker functionality is exposed. Although Vitest is a devDependency, development and CI environments often process untrusted repository content, so vulnerable test tooling can still become a serious attack path, especially in a monetization/payment-related skill where secrets, wallets, and CI tokens may be present.
nanoid 3.3.11 is present transitively via development tooling, and the cited flaws can cause hangs or overflow-related instability under crafted inputs. Even though this is not clearly used in the skill's runtime payment path, vulnerable build/test dependencies can still enable denial of service in development, CI, or tooling-driven workflows.
picomatch 4.0.3 is a real vulnerable dependency with reported method-injection and ReDoS issues under attacker-controlled glob patterns. In this skill it appears only in developer tooling, so exploitation would typically require untrusted input reaching build/test file-matching logic, making the practical risk lower than a production parser but still valid.
postcss 8.5.6 is a known vulnerable version with advisories including arbitrary file read and XSS-related issues. Here it is part of Vite's dev toolchain rather than an obvious production execution path, but if this skill is developed or previewed with exposed tooling, the vulnerability could still affect maintainers or CI systems.
rollup 4.58.0 is identified as vulnerable to arbitrary file write via path traversal, which is a serious issue when attacker-controlled paths can reach bundling or plugin workflows. Although this lockfile suggests dev-time exposure rather than production runtime exposure, arbitrary write in build infrastructure can still lead to code tampering or CI compromise.
vite 7.3.1 is a real vulnerable dependency with multiple path traversal and arbitrary file read issues affecting the dev server. Because this skill concerns monetized API/tool creation and may plausibly be run by developers during local setup or demos, vulnerable dev-server components are more concerning than in a pure library package, even if not proven production-exposed here.
ws 8.18.3 is a real vulnerable dependency with advisories for memory disclosure and memory exhaustion DoS. In this lockfile it is brought in by viem and tooling, so if the skill uses websocket-based blockchain/provider connections, malformed remote traffic could affect availability or leak process memory depending on how connections are exposed.
The README recommends executing npx skills add gatex402/monetize-agent-skills --skill x402-creation without pinning a specific version or commit. This can lead users to install whatever version is current at execution time, increasing supply-chain risk if the registry package, resolver, or referenced skill source is compromised or changed unexpectedly.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The skill describes capabilities that inherently require network access and host-managed secrets, but the manifest does not declare an explicit tool scope such as permissions or allowed-tools. This weakens least-privilege controls and makes it harder for a host to constrain or review what the skill is permitted to do, especially given it can provision monetized endpoints and initiate withdrawals.
The skill exposes a withdrawal action that transfers earned USDC to a wallet, but the documentation does not require an explicit user confirmation, preview of destination/amount, or other approval gate before funds movement. In an agentic setting, this creates a real risk of unintended or manipulated financial actions, especially if an upstream prompt or compromised workflow invokes the tool automatically.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
## Resources
- **Backend**: https://api.gatex402.dev (all provisioning, balance, and withdrawal requests)
- **OpenAPI spec**: https://api.gatex402.dev/openapi.json
- **Homepage**: https://gatex402.dev
- **Bazaar Discovery**: https://gatex402.dev/discover
- **AI Plugin**: https://api.gatex402.dev/.well-known/ai-plugin.json
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
## Resources
- **Backend**: https://api.gatex402.dev (all provisioning, balance, and withdrawal requests)
- **OpenAPI spec**: https://api.gatex402.dev/openapi.json
- **Homepage**: https://gatex402.dev
- **Bazaar Discovery**: https://gatex402.dev/discover
- **AI Plugin**: https://api.gatex402.dev/.well-known/ai-plugin.json
The skill exposes a fund-transfer operation (withdraw_funds) but its description does not explicitly warn that invoking it will move earned USDC to a wallet. In an agent setting, insufficiently explicit descriptions increase the chance of unintended or socially engineered execution of irreversible financial actions, especially when users may not realize the tool has real asset-transfer side effects.
@vitest/mocker 4.0.18 is present as a dev dependency through Vitest, and the cited issue is a real supply-chain risk if the mocking/redirect functionality is exposed during test execution or developer workflows. In this lockfile context it is not directly runtime-exposed by the skill itself, but it still represents a genuine vulnerable component that could permit unintended file reads in local/CI environments.
esbuild 0.27.3 is included as a dev dependency and has a known arbitrary file read issue tied to the development server on Windows. This is a real vulnerability in the dependency, though the danger is limited here because package-lock.json alone does not show the skill actively exposing an esbuild dev server in production.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"test": "vitest run"
},
"dependencies": {
"dotenv": "^16.0.0",
"viem": "^2.0.0",
"zod": "^3.0.0"
},
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"dependencies": {
"dotenv": "^16.0.0",
"viem": "^2.0.0",
"zod": "^3.0.0"
},
"devDependencies": {
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"dependencies": {
"dotenv": "^16.0.0",
"viem": "^2.0.0",
"zod": "^3.0.0"
},
"devDependencies": {
"@types/node": "^25.3.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"zod": "^3.0.0"
},
"devDependencies": {
"@types/node": "^25.3.0",
"typescript": "^5.0.0",
"vitest": "^4.0.18"
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/node": "^25.3.0",
"typescript": "^5.0.0",
"vitest": "^4.0.18"
}
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"devDependencies": {
"@types/node": "^25.3.0",
"typescript": "^5.0.0",
"vitest": "^4.0.18"
}
}
No suspicious patterns detected.