T08 · Insecure Dependencies
- Location
SKILL.md:6- Finding
Privileged External Wallet Components Are Installed Without Artifact Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent crypto wallet skill, but it needs review because it relies on root-installed external wallet components and remote swap data for fund-moving actions without enough verifiable safeguards.
Review this carefully before installing. The JavaScript skill is not obviously deceptive and the risky wallet behavior is mostly disclosed, but installing it means trusting externally downloaded macOS components with persistent wallet authority. Verify release signatures and hashes independently, understand what the daemon can do, and avoid using command-line approval codes or large-value swaps until the external binaries and swap validation path have been independently audited.
SKILL.md:6Privileged External Wallet Components Are Installed Without Artifact Integrity Verification
lib/intent-builder.js:236Untrusted Uniswap API Calldata Is Forwarded for Signing Without Semantic Validation
scripts/send.js:9One-Time Wallet Approval Codes Are Exposed Through Process Arguments and Shell History
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
Token swap routing, quote handling, symbol resolution, and fallback fee-tier probing all introduce undeclared network- and market-dependent behavior. In a wallet skill, hidden quote/routing logic can influence financial outcomes and trust decisions, especially if third-party API data is accepted without clear disclosure.
The lockfile pins ws to version 8.18.3, and the supplied advisories indicate that this version is affected by an uninitialized memory disclosure and a memory-exhaustion denial-of-service condition. In a crypto wallet skill, WebSocket connectivity is commonly used for blockchain RPC subscriptions and event streams, so a vulnerable ws dependency can expose sensitive process memory or allow a remote endpoint to degrade or crash the agent during wallet operations.
The skill advertises networked and environment-dependent behavior, including downloading/installing local packages and interacting with a local daemon, but does not declare an explicit tool scope such as permissions or allowed-tools. In an agent setting, missing scope declarations weakens operator visibility and policy enforcement, increasing the chance that a wallet-related skill is granted broader-than-expected access.
This code sends swap metadata including chain IDs, token addresses, input amount, and slippage tolerance to Uniswap's external Routing API before building the intent. Even though no private keys or signatures are transmitted here, this still leaks potentially sensitive transaction intent and trading behavior to a third party, which can be relevant for privacy, strategy leakage, or compliance-sensitive deployments.
The hardcoded Uniswap API endpoint confirms that transaction quote data is intentionally sent to a third-party service rather than remaining fully local. In the context of a 'secure crypto wallet for AI agents,' undisclosed off-device transmission weakens the privacy expectations created by the skill's security-oriented description, even if execution safety checks reduce direct fund-loss risk.
configs: [{ routingType: 'CLASSIC', protocols: ['V3'] }],
};
const res = await fetch('https://api.uniswap.org/v2/quote', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
The hardcoded Uniswap API endpoint confirms that transaction quote data is intentionally sent to a third-party service rather than remaining fully local. In the context of a 'secure crypto wallet for AI agents,' undisclosed off-device transmission weakens the privacy expectations created by the skill's security-oriented description, even if execution safety checks reduce direct fund-loss risk.
configs: [{ routingType: 'CLASSIC', protocols: ['V3'] }],
};
const res = await fetch('https://api.uniswap.org/v2/quote', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
process.env.MONOLITH_DAEMON_BIN || '/usr/local/bin/MonolithDaemon';
const LAUNCH_AGENT_PATHS = [
process.env.MONOLITH_DAEMON_PLIST || '',
`${process.env.HOME}/Library/LaunchAgents/com.monolith.daemon.plist`,
'/Library/LaunchAgents/com.monolith.daemon.plist',
].filter(Boolean);
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
const LAUNCH_AGENT_PATHS = [
process.env.MONOLITH_DAEMON_PLIST || '',
`${process.env.HOME}/Library/LaunchAgents/com.monolith.daemon.plist`,
'/Library/LaunchAgents/com.monolith.daemon.plist',
].filter(Boolean);
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
const LAUNCH_AGENT_PATHS = [
process.env.MONOLITH_DAEMON_PLIST || '',
`${process.env.HOME}/Library/LaunchAgents/com.monolith.daemon.plist`,
'/Library/LaunchAgents/com.monolith.daemon.plist',
].filter(Boolean);
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
const LAUNCH_AGENT_PATHS = [
process.env.MONOLITH_DAEMON_PLIST || '',
`${process.env.HOME}/Library/LaunchAgents/com.monolith.daemon.plist`,
'/Library/LaunchAgents/com.monolith.daemon.plist',
].filter(Boolean);
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
const domain = `gui/${process.getuid()}`;
const service = `${domain}/${DAEMON_LABEL}`;
commands.push(`/bin/launchctl bootstrap ${domain} ${shellQuote(launchAgentPath)}`);
commands.push(`/bin/launchctl enable ${service}`);
commands.push(`/bin/launchctl kickstart -k ${service}`);
}
The dependency uses a caret range (^2.21.0), which allows future minor and patch releases to be installed. In a security-sensitive wallet skill, this increases supply-chain risk because a newly published compromised or breaking dependency version could be pulled in without explicit review, potentially affecting transaction construction, signing flows, or policy enforcement logic.
"test": "node --test 'tests/**/*.test.js'"
},
"dependencies": {
"viem": "^2.21.0"
}
}
No suspicious patterns detected.