T03 · Remote Payload Retrieval and Execution
- Location
scripts/bootstrap.sh:19- Finding
Unverified Remote Installer Piped Directly to Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its Uniswap purpose, but it should be reviewed because it can create real, long-lived token approvals and the artifact still contains unsafe legacy scripts.
Install only if you intend to let an agent interact with Uniswap and, when PRIVATE_KEY is provided, sign irreversible transactions. Use a dedicated low-balance wallet, review token, amount, recipient, slippage, chain, and spender before any write operation, avoid auto-approve unless you understand the allowance risk, and revoke allowances after use. Do not run the legacy shell scripts or the bootstrap curl-to-bash recommendation.
scripts/bootstrap.sh:19Unverified Remote Installer Piped Directly to Bash
scripts/approve.sh:64Wallet Private Key Exposed Through Process Command-Line Arguments
scripts/approve.sh:21Unlimited Base Token Allowances Granted to Inconsistent Contract Addresses
scripts/approve.sh:86Approval Script Falsely Reports Success After Transaction Failures
vitest 3.2.4 is a real vulnerable dev dependency with arbitrary file read and possible code execution exposure when the UI server or mocker features are used. Although this is not production runtime code, the skill's blockchain context raises the stakes because developer or CI compromise could expose private keys, permit data, or deployment credentials.
vitest 3.2.4 is reported with critical advisories involving arbitrary file read and possible execution in affected configurations. Even though this is a dev/test dependency, test tooling often runs in CI and developer environments with repository secrets, making compromise of local files, tokens, or build infrastructure materially dangerous.
The description overstates the functionality present in this code chunk. The script clearly implements swap execution plus token/Permit2 approvals, and it does include pool discovery by calling an external helper and selecting the highest-liquidity pool. However, several declared capabilities are absent or materially different: (1) chain support is limited to base and ethereum only, with no Base Sepolia entries; (2) quoting is not done through the on-chain V4Quoter, but instead through a local formula using sqrtPriceX96, which is a different capability and less accurate than a router/quoter-based quote; and (3) the script does not expose general pool-state reading functionality as described. The primary purpose is still related to Uniswap V4 swaps, but the declared description is broader and partially inaccurate for this supplied code chunk.
The description substantially overstates the skill’s behavior. The code only supports read operations for Uniswap V4 pool discovery/state inspection on Base and Ethereum. It does not perform swaps, approvals, transaction signing, or quoting, and it lacks any private-key handling. It also does not support Base Sepolia despite the description claiming it. While parts of the description about reading pool info and finding pools are partially aligned, the primary declared functionality includes several major undeclared-in-code capabilities, making this a material description/behavior mismatch.
The declared description says this skill performs on-chain Uniswap V4 operations and pool queries across multiple networks. However, the supplied code chunk contains only generic CLI helper functions and security checks around argument parsing. It does not interact with Ethereum/Base, wallets, RPC providers, smart contracts, pool state, Permit2, or swap routing. This is not merely a supporting implementation detail unless accompanied by substantial additional code; based on this chunk alone, the actual behavior is materially different from the declared purpose.
The declared description describes a blockchain trading and pool-inspection skill, but the provided code chunk only contains tests for command-line argument parsing behavior. The code’s actual purpose is validating CLI parsing and private-key flag rejection, which is unrelated to Uniswap V4 operations. This is a materially different primary purpose, so the description does not accurately represent the supplied code chunk.
The supplied code chunk does not implement Uniswap V4 swapping, pool inspection, quoting, pool selection, Permit2 setup, or swap execution logic. Instead, its primary purpose is security testing: ensuring the PRIVATE_KEY environment variable is not leaked in CLI output. That is materially different from the declared end-user functionality. While this test could be a supporting part of a larger Uniswap-related project, the chunk itself is unrelated to the declared operational capabilities and therefore is a description-behavior mismatch for this specific code segment.
The declared description describes a full-featured Uniswap V4 integration for on-chain reads and writes. The actual code chunk is only a test runner configuration file for Vitest. Its primary purpose is unrelated to blockchain operations and it does not implement any of the declared capabilities. Therefore, the description does not accurately represent the supplied code chunk.
Referenced artifact was not completely inspected
4. **Execute swap?** → `src/swap.ts` (write, ~300-350K gas, needs `PRIVATE_KEY`)
Referenced artifact was not completely inspected
4. **Execute swap?** → `src/swap.ts` (write, ~300-350K gas, needs `PRIVATE_KEY`)
Referenced artifact was not completely inspected
4. **Execute swap?** → `src/swap.ts` (write, ~300-350K gas, needs `PRIVATE_KEY`)
brace-expansion 1.1.12 is present only as a transitive development dependency under eslint-related tooling, and the cited issues are denial-of-service conditions triggered by attacker-controlled glob/brace patterns. In this skill's runtime context, package-lock.json itself does not expose that parsing surface to untrusted users, so this is a real vulnerable package but with limited practical impact on the deployed skill.
minimatch 3.1.2 is a real vulnerable transitive dependency with ReDoS risk when matching crafted glob patterns. Here it appears in development/tooling paths rather than swap execution logic, so exploitation would generally require an attacker to influence developer-side glob inputs or CI tasks.
brace-expansion 2.0.2 is a genuine vulnerable package with DoS-style expansion issues on crafted patterns. In this project it is part of development dependency resolution, not token swap logic, so the practical exploitability against end users is low unless untrusted input reaches build/test tooling.
flatted 3.3.3 has real DoS/prototype-pollution advisories, but in this lockfile it is only a transitive development dependency under caching/tooling. There is no indication the production Uniswap skill parses attacker-controlled flatted payloads, so the vulnerable package exists but is not high-risk in context.
js-yaml 4.1.1 is a real dependency with multiple resource-consumption issues when parsing crafted YAML. Here it is transitively used by eslint configuration tooling rather than by the token swap or quoting functionality, which substantially lowers the operational impact.
minimatch 9.0.5 is flagged for ReDoS on malicious glob patterns, and it is a real vulnerable package if the advisory is accurate. In this repository it appears in development/test tooling, so the main risk is denial of service in local automation or CI jobs that accept attacker-influenced glob input.
nanoid 3.3.11 is a real vulnerable package under the cited advisories, but it is present only through dev tooling such as postcss/vite. The issues are primarily reliability and potential DoS conditions, not direct compromise of swap execution or private-key handling in this skill.
picomatch 4.0.3 is a genuine vulnerable glob-matching dependency with possible ReDoS/matching flaws on crafted patterns. In this project it is only in the dev/build pipeline, so the danger is mostly limited to developer or CI environments rather than runtime agent operations.
postcss 8.5.6 is a real vulnerable dependency with advisories involving file read and output-encoding issues, but it is transitively brought in by vite and used for front-end/build tooling. That makes it far less dangerous for this server-side Uniswap skill unless developers run exposed dev tooling or process hostile CSS inputs.
rollup 4.57.1 is a real vulnerable dev dependency with an arbitrary file write/path traversal advisory. While not part of normal production swap execution, build systems are higher-value targets because compromise of developer or CI environments could tamper with artifacts or leak secrets.
vite 7.3.1 is a real vulnerable dev dependency with multiple file-read and path traversal issues centered on the dev server. In the context of a wallet-capable blockchain skill, compromise of a developer workstation or CI environment is more concerning because secrets, RPC credentials, or signing material may be nearby even if vite is not shipped to production.
ws 8.17.1 is a real runtime dependency through ethers, with advisories for memory disclosure and memory exhaustion. Because this skill interacts with blockchain providers and may use WebSocket connections for on-chain data, a vulnerable ws library is more relevant than purely dev-only findings and could affect availability or potentially leak process memory in specific scenarios.
The script recommends installing Foundry by piping a remote curl response directly into bash, which executes network-fetched code without verification, pinning, or integrity checks. If the remote host, TLS trust chain, DNS resolution, or delivery path is compromised, a user following the printed instruction could run attacker-controlled code on their system.
# Foundry (cast)
export PATH="$HOME/.foundry/bin:$PATH"
check "cast" "curl -L https://foundry.paradigm.xyz | bash && foundryup"
# Python 3
check "python3" "apt install python3 (or brew install python3)"
The script performs token approvals, Permit2 approvals, and a swap immediately with no confirmation or dry-run step. In an agent-skill context, this is especially dangerous because automated or malformed inputs can trigger irreversible on-chain transactions, including broad approvals that may outlive the swap and increase downstream fund-loss risk.
Detected: suspicious.dangerous_exec, suspicious.dynamic_code_execution, suspicious.env_credential_access (+1 more)