T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:34- Finding
Unpinned Remote Installer Is Downloaded and Executed Directly by Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent AgentPay wallet/payment guide, but it relies on unsafe remote shell installation and documents payment flows that can accept server-selected charges.
Review this skill carefully before installing. Prefer local copy or verifiable release installation over `curl | bash`, require explicit confirmation of chain, token, recipient, amount, and broadcast intent before any payment, use `--amount` for MPP calls, keep wallet policies and manual approval limits conservative, and avoid external QR fallback URLs when privacy matters.
SKILL.md:34Unpinned Remote Installer Is Downloaded and Executed Directly by Bash
references/mpp-services.md:14MPP Workflow Can Automatically Pay an Untrusted Server-Controlled Amount and Recipient
scripts/prepare-funding-request.mjs:141External QR Fallback Discloses Wallet Address and Chain Metadata to a Third Party
The skill recommends a one-line remote script execution pattern, curl ... | bash, for bootstrap. This is dangerous because it executes unaudited network content directly in a shell, allowing upstream compromise, domain hijack, or malicious script changes to immediately result in arbitrary code execution on the user's machine.
## Ground Truth
- Use `agentpay --help` and the relevant subcommand help as the source of truth when examples disagree.
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
The skills-only install path still uses curl ... | bash -s -- --skills-only, which preserves the same remote code execution risk as the main installer. The reduced scope of the install does not reduce the core danger, since arbitrary script content still runs with the user's privileges.
- Use `agentpay --help` and the relevant subcommand help as the source of truth when examples disagree.
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
- Source install or update: from the repo checkout run `pnpm install && npm run build && npm run install:cli-launcher && npm run install:rust-binaries`
The update path also instructs users to rerun the remote pipe-to-shell installer, creating a recurring arbitrary code execution channel every time the software is updated. In a wallet/payment skill, this is especially sensitive because the installed tooling may access funds, signing flows, policies, and local secrets.
- Use `agentpay --help` and the relevant subcommand help as the source of truth when examples disagree.
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
- Source install or update: from the repo checkout run `pnpm install && npm run build && npm run install:cli-launcher && npm run install:rust-binaries`
- Managed wallet bootstrap commands such as `agentpay admin setup`, `agentpay admin tui`, `agentpay admin reset`, and `agentpay admin uninstall` are supported on macOS and Linux. The managed daemon uses `launchd` on macOS and system `systemd` on Linux. Agent auth storage uses macOS Keychain on macOS and Linux Secret Service on Linux.
curl -fsSL https://wlfi.sh | bash directly executes code fetched from the network with no integrity verification or review step. In a skill that installs wallet/payment software, this is especially dangerous because compromise of the installer could lead to host takeover, credential theft, wallet theft, or transaction tampering.
## Use These Commands
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
The skills-only variant still pipes a remote script into bash, so it carries the same arbitrary-code-execution risk as the full bootstrap flow. The reduced scope claim does not materially reduce the danger because the fetched script still controls what runs locally.
## Use These Commands
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
- Source install or update: `pnpm install && npm run build && npm run install:cli-launcher && npm run install:rust-binaries`
The update path instructs users to rerun the same remote pipe-to-bash command, creating a persistent supply-chain risk each time updates are performed. An attacker who compromises the endpoint later could exploit previously trusting users during routine maintenance.
- One-click bootstrap: `curl -fsSL https://wlfi.sh | bash`
- One-click skills only: `curl -fsSL https://wlfi.sh | bash -s -- --skills-only`
- One-click update: rerun `curl -fsSL https://wlfi.sh | bash`
- One-click packaged runtime bundles are available on macOS and Linux. Managed wallet setup is supported on both platforms after install.
- Source install or update: `pnpm install && npm run build && npm run install:cli-launcher && npm run install:rust-binaries`
- Show config: `agentpay config show --json`
curl -fsSL https://wlfi.sh | bash fetches code from the network and executes it immediately with no integrity verification or user review. In a payment/wallet installation flow, compromise of that URL, DNS, TLS trust chain, or hosting would yield instant arbitrary code execution and likely full compromise of wallet setup and agent configuration.
Fastest packaged bootstrap on macOS or Linux:
curl -fsSL https://wlfi.sh | bash
That installer can:
The pipeline chains untrusted network input directly into a shell interpreter, eliminating any inspection boundary and enabling one-step exploitation. In this skill context, that abuse can immediately lead to persistence in agent config locations and compromise of wallet-related assets.
Fastest packaged bootstrap on macOS or Linux:
curl -fsSL https://wlfi.sh | bash
That installer can:
The --skills-only installer uses the same remote pipe-to-shell pattern and additionally modifies trusted agent/workspace files. An attacker controlling the fetched script could implant persistent malicious instructions into multiple assistant environments, making the danger broader than a temporary command execution.
If the user only wants the skill pack and editor adapters, use:
curl -fsSL https://wlfi.sh | bash -s -- --skills-only
That path skips the AgentPay SDK runtime install and only writes the AI skill targets.
Using the same curl | bash bootstrap for updates creates a recurring arbitrary-code-execution path, expanding exposure over time even after initial installation. Because this software manages payment and wallet workflows, an update compromise could silently alter transaction behavior or harvest credentials.
One-click updates use the same bootstrap entrypoint:
curl -fsSL https://wlfi.sh | bash
If the runtime has already been refreshed and the user only needs to reconnect the existing local vault, use:
The update command repeats the same hazardous chaining pattern, so any compromise of the remote script source turns a routine update into code execution. Because users are trained to run it for maintenance, the trust and frequency make exploitation more plausible and damaging.
One-click updates use the same bootstrap entrypoint:
curl -fsSL https://wlfi.sh | bash
If the runtime has already been refreshed and the user only needs to reconnect the existing local vault, use:
The skill description is extremely broad and authorizes the skill for installation, wallet setup, funding, policy changes, approvals, and payment execution. In an agent environment, such broad routing increases the chance the skill is invoked for many loosely related financial requests, expanding the attack surface and enabling unintended high-risk actions with a wallet toolchain.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
- `agentpay admin setup --reuse-existing-wallet` is the managed-daemon recovery / local re-setup path when the current vault should be preserved.
- `agentpay admin setup --restore-wallet-from <PATH>` restores the same wallet from an encrypted offline backup on macOS or Linux.
- `agentpay admin wallet-backup export --output <PATH>` creates an encrypted offline backup.
- Do not use `sudo agentpay ...`.
- Do not tell users to run `agentpay daemon` directly.
## Wallet Model
The instruction to use the skill whenever a task 'touches wallet setup, funding, policy, transfers, approvals, or backups' defines activation in very broad terms without clear boundaries or exclusion cases. Terms like 'policy' and 'approvals' are especially generic and could overlap with unrelated user requests, increasing the risk of accidental invocation.
The instruction says to use the skill whenever a task "touches wallet setup, funding, policy, transfers, approvals, or backups," which is a wide set of common concepts without explicit boundaries or exclusion conditions. In a markdown skill file, this can create ambiguity about when the skill should activate versus when a task only mentions these topics incidentally.
The instruction to use the skill whenever a task 'touches wallet setup, funding, policy, transfers, approvals, or backups' is expansive and lacks explicit scope limits or exclusion examples. Terms like 'policy' and 'approvals' are broad enough to overlap with unrelated everyday tasks, which could cause unintended invocation.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- start from `agentpay config show --json`
- use `agentpay wallet --json` to determine whether a reusable wallet already exists
- if the user only asks what the skill can do, answer from `SKILL.md` and do not probe the machine first
- never ask the user to paste `VAULT_PASSWORD` or a wallet backup password into chat
- if wallet metadata is unavailable and the user is trying to use the wallet, tell them to run `agentpay admin setup` locally
- if the wallet exists and the user wants to preserve it while re-running setup, tell them to run `agentpay admin setup --reuse-existing-wallet` locally
- if the local wallet is gone but the user has an encrypted backup, tell them to run `agentpay admin setup --restore-wallet-from <PATH>` locally
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- start from `agentpay config show --json`
- use `agentpay wallet --json` to determine whether a reusable wallet already exists
- if the user only asks what the skill can do, answer from `SKILL.md` and do not probe the machine first
- never ask the user to paste `VAULT_PASSWORD` or a wallet backup password into chat
- if wallet metadata is unavailable and the user is trying to use the wallet, tell them to run `agentpay admin setup` locally
- if the wallet exists and the user wants to preserve it while re-running setup, tell them to run `agentpay admin setup --reuse-existing-wallet` locally
- if the local wallet is gone but the user has an encrypted backup, tell them to run `agentpay admin setup --restore-wallet-from <PATH>` locally
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- start from `agentpay config show --json`
- use `agentpay wallet --json` to determine whether a reusable wallet already exists
- if the user only asks what the skill can do, answer from `SKILL.md` and do not probe the machine first
- never ask the user to paste `VAULT_PASSWORD` or a wallet backup password into chat
- if wallet metadata is unavailable and the user is trying to use the wallet, tell them to run `agentpay admin setup` locally
- if the wallet exists and the user wants to preserve it while re-running setup, tell them to run `agentpay admin setup --reuse-existing-wallet` locally
- if the local wallet is gone but the user has an encrypted backup, tell them to run `agentpay admin setup --restore-wallet-from <PATH>` locally
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- start from `agentpay config show --json`
- use `agentpay wallet --json` to determine whether a reusable wallet already exists
- if the user only asks what the skill can do, answer from `SKILL.md` and do not probe the machine first
- never ask the user to paste `VAULT_PASSWORD` or a wallet backup password into chat
- if wallet metadata is unavailable and the user is trying to use the wallet, tell them to run `agentpay admin setup` locally
- if the wallet exists and the user wants to preserve it while re-running setup, tell them to run `agentpay admin setup --reuse-existing-wallet` locally
- if the local wallet is gone but the user has an encrypted backup, tell them to run `agentpay admin setup --restore-wallet-from <PATH>` locally
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- start from `agentpay config show --json`
- use `agentpay wallet --json` to determine whether a reusable wallet already exists
- if the user only asks what the skill can do, answer from `SKILL.md` and do not probe the machine first
- never ask the user to paste `VAULT_PASSWORD` or a wallet backup password into chat
- if wallet metadata is unavailable and the user is trying to use the wallet, tell them to run `agentpay admin setup` locally
- if the wallet exists and the user wants to preserve it while re-running setup, tell them to run `agentpay admin setup --reuse-existing-wallet` locally
- if the local wallet is gone but the user has an encrypted backup, tell them to run `agentpay admin setup --restore-wallet-from <PATH>` locally
The prompt directs the agent to make operational decisions such as defaulting unspecified payments to USD1 on BSC and to execute current CLI commands exactly as described, which delegates meaningful financial and procedural choices to the agent. In a payments context, autonomous defaults and action-oriented instructions are dangerous because they can cause transfers on the wrong asset/network or advance high-risk workflows without sufficiently explicit user authorization.
interface:
display_name: "AgentPay SDK"
short_description: "Install, fund, and operate the AgentPay SDK stack"
default_prompt: "Use $agentpay-sdk to explain AgentPay SDK capabilities directly when asked, install and operate `agentpay`, set up or reuse a wallet on macOS or Linux, describe the managed `agentpay admin setup` and `agentpay admin tui` flows as supported on both platforms, note that the managed daemon uses `launchd` on macOS and system `systemd` on Linux, default unspecified payments to USD1 on BSC, check both the settlement asset and native gas balance before outbound actions, route policy changes to `agentpay admin tui`, treat manual approval as a pending user-approval state, send users to the local admin CLI approval commands, tell users to keep the original command running for `transfer --broadcast`, `transfer-native --broadcast`, `approve --broadcast`, and `bitrefill buy --broadcast` instead of rerunning after approval, use `agentpay admin resume-manual-approval-request --approval-request-id <UUID>` if an approved broadcast request needs to be resumed after the original command has exited, treat Bitrefill as one supported plugin-specific merchant payment flow rather than the headline path, never ask the user to paste `VAULT_PASSWORD` or plugin session material into chat, and execute the current CLI commands exactly as `agentpay --help` describes them."
policy:
allow_implicit_invocation: true
The default prompt contains broad activation and operational language that encourages the skill to install and operate a payment SDK, set up or reuse wallets, and execute payment-related CLI actions. In a financial skill, broad triggering increases the chance the agent invokes sensitive payment functionality in contexts that are only partially related, leading to unintended fund movement or wallet manipulation.
Enabling implicit invocation without tight contextual constraints allows this skill to activate automatically in conversations that mention related concepts, even when the user has not clearly requested payment operations. Because the skill handles wallets, balances, approvals, and broadcasts, mistaken invocation can escalate into sensitive financial actions or disclosure of operational payment state.
The file recommends multiple curl ... | bash one-click install/update flows without warning about the risks of piping remote content directly into a shell. If the remote endpoint, DNS, TLS trust chain, or hosting account is compromised, users could execute arbitrary code immediately on their machine.