Back to skill

Security audit

Rozo Checkout Skill

Security checks across malware telemetry and agentic risk

Overview

The skill is a disclosed crypto payment tool, but its optional hot-wallet mode can load local or environment wallet keys and broadcast irreversible transfers, so it belongs in Review before installation.

Install only if you intend to use a crypto payment bridge and understand the difference between the default keyless flow and Mode B. Avoid Mode B unless you are comfortable letting the agent process access a low-balance hot wallet; prefer paying from your own wallet, hardware wallet, or exchange withdrawal. Do not keep valuable wallet private keys or passphrases in project .env files, and treat --send with --yes as capable of moving real funds.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill explicitly instructs the agent to use shell commands, networked scripts, and environment-sourced secrets, yet no declared permissions are present. That mismatch is dangerous because it obscures the real capability surface of a payment-moving skill, making it easier for a host or reviewer to under-scope the risks around command execution, outbound payments, and key handling.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The CLI can load signing secrets from environment variables, dotenv files, keypair files, and EVM keystores, which materially increases the blast radius if the skill is invoked in an automated agent context. Even with some safety checks, embedding secret-loading and signing logic into a checkout skill creates a realistic path to unauthorized fund movement if an agent is tricked into running `--send` or if local secret material is present.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script intentionally loads signing material from environment variables, .env files, local Solana keypair files, and EVM keystores, then decrypts and uses them to authorize on-chain transfers. Even with permission and git-tracking checks, this creates a hot-wallet execution path inside the skill, so compromise of the runtime, env, host, or operator workflow can directly lead to fund theft.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
This file does not just inspect or prepare transactions; it creates wallet clients, signs raw EVM transactions, and broadcasts ERC-20 transfers. That is a general-purpose value-transfer capability, and in an agent skill context it materially increases blast radius because any prompt, integration, or logic failure can trigger real token movement.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The code explicitly supports loading signing keys from environment variables such as ROZO_CHECKOUT_EVM_KEY and ROZO_CHECKOUT_SOL_KEY. Environment variables are routinely exposed through process listings, crash dumps, CI logs, shell history wrappers, and inherited child-process environments, so using them for hot-wallet secrets materially increases the chance of secret exfiltration and unauthorized fund transfers. In this payment-bridging skill, compromise of those keys directly enables theft from the funder wallet, making the context more dangerous than a non-financial application.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The send path will sign and broadcast a live Solana transfer whenever --send is provided, but there is no final interactive confirmation immediately before broadcast that shows the resolved recipient, amount, memo, and chain and requires an explicit user acknowledgement. In a skill that bridges payments and controls wallet funds, accidental invocation, prompt injection, or upstream automation mistakes can therefore cause irreversible on-chain transfers without a human last-look checkpoint.

Credential Access

High
Category
Privilege Escalation
Content
environment (or a gitignored `.env`) still works for unattended automation.

<details>
<summary><b>Set up a local wallet for <code>--send</code></b> — .env template and per-wallet export steps</summary>

**None of this is needed for the default path.** Paying from your own wallet
needs no key and no configuration, and works with wallets that can never be
Confidence
83% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
(`chmod 600`) ni estar bajo seguimiento de git. Ambos casos se rechazan, no se advierten.

<details>
<summary><b>Configurar una billetera local para <code>--send</code></b> — plantilla .env y pasos de exportación por billetera</summary>

**Nada de esto hace falta para la ruta por defecto.** Pagar desde la propia
billetera no necesita clave ni configuración, y funciona con billeteras que aquí
Confidence
88% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
いてもいけません。どちらの場合も警告ではなく拒否されます。

<details>
<summary><b><code>--send</code> 用のローカルウォレット設定</b> — .env テンプレートとウォレット別の書き出し手順</summary>

**既定の経路ではここに書かれたものは一切不要です。** 自分のウォレットから支払う場合、
鍵も設定も要りません。しかもここでは決して使えないウォレット — ハードウェアウォレットや
Confidence
86% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
not be tracked by git. Both are refused rather than warned about.

<details>
<summary><b>Set up a local wallet for <code>--send</code></b> — .env template and per-wallet export steps</summary>

**None of this is needed for the default path.** Paying from your own wallet
needs no key and no configuration, and works with wallets that can never be
Confidence
88% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
直接拒绝,而不是只给个警告。

<details>
<summary><b>为 <code>--send</code> 配置本地钱包</b> —— .env 模板与各钱包导出步骤</summary>

**默认路径不需要这里的任何东西。** 用你自己的钱包付款既不需要私钥也不需要任何配置,
而且支持那些在这里根本用不了的钱包 —— 包括硬件钱包和交易所账户。
Confidence
90% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
</details>

<details>
<summary><b>Configurar una billetera local para <code>--send</code></b> — plantilla .env y pasos de exportación por billetera</summary>

**Nada de esto hace falta para la ruta por defecto.** Pagar desde la propia
billetera no necesita clave ni configuración, y funciona con billeteras que aquí
Confidence
86% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
</details>

<details>
<summary><b><code>--send</code> 用のローカルウォレット設定</b> — .env テンプレートとウォレット別の書き出し手順</summary>

**既定の経路ではここに書かれたものは一切不要です。** 自分のウォレットから支払う場合、
鍵も設定も要りません。しかもここでは決して使えないウォレット — ハードウェアウォレットや
Confidence
80% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
</details>

<details>
<summary><b>为 <code>--send</code> 配置本地钱包</b> —— .env 模板与各钱包导出步骤</summary>

**默认路径不需要这里的任何东西。** 用你自己的钱包付款既不需要私钥也不需要任何配置,
而且支持那些在这里根本用不了的钱包 —— 包括硬件钱包和交易所账户。
Confidence
85% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
solana-keygen already wrote) for Solana or ROZO_CHECKOUT_EVM_KEYSTORE (an
encrypted V3 keystore, passphrase prompted, never argv) for EVM; then a raw key
in ROZO_CHECKOUT_SOL_KEY / ROZO_CHECKOUT_EVM_KEY, which is the unattended-
automation option. Those settings may also come from a .env in the working
directory (or --env-file <path>): only ROZO_CHECKOUT_* keys are read from it, it
is parsed as text and never shell-evaluated, and the real environment wins.
Key files and .env must be chmod 600 and untracked by git.
Confidence
72% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
automation option. Those settings may also come from a .env in the working
directory (or --env-file <path>): only ROZO_CHECKOUT_* keys are read from it, it
is parsed as text and never shell-evaluated, and the real environment wins.
Key files and .env must be chmod 600 and untracked by git.

## Local wallet setup for --send (not needed for the default keyless path)
Confidence
71% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
## Local wallet setup for --send (not needed for the default keyless path)

.env keys (only ROZO_CHECKOUT_* are read; real env wins; chmod 600; gitignore):
  ROZO_CHECKOUT_SOL_KEY               base58 string OR JSON byte array
  ROZO_CHECKOUT_EVM_KEY               64 hex chars, 0x prefix optional
  ROZO_CHECKOUT_EVM_KEYSTORE          path to an encrypted V3 keystore
Confidence
84% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
return false;
  }
}
function planKeySource({ family, keyfile, env = process.env }) {
  if (keyfile) {
    const resolved = expandHome(keyfile);
    let text;
Confidence
88% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
}
    return p;
  }
  const fallback = path3.join(cwd, ".env");
  return fs3.existsSync(fallback) ? fallback : null;
}
function applyDotenv({ file, cwd = process.cwd(), env = process.env } = {}) {
Confidence
87% confidence
Finding
.env"

Credential Access

High
Category
Privilege Escalation
Content
const fallback = path3.join(cwd, ".env");
  return fs3.existsSync(fallback) ? fallback : null;
}
function applyDotenv({ file, cwd = process.cwd(), env = process.env } = {}) {
  const target = resolveEnvFile({ file, cwd });
  if (!target) return null;
  let stat;
Confidence
87% confidence
Finding
.env

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/dist/cli.js:9380

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/dist/send-evm.js:9346

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
test/bundles.test.mjs:35

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
test/concurrency.test.mjs:42

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
test/entrypoints.test.mjs:35

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/dist/cli.js:19126

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/dist/send-evm.js:21469

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/dist/send-sol.js:9844

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
test/dotenv.test.mjs:138