Most static alerts are false positives caused by Markdown backticks, TypeScript templates, documented URLs, and URL path text. Confirmed risks involve payment credentials, configurable paid endpoints, unpinned dependencies, and public evidence uploads. No prompt injection attempt was found.
Both runners accept GATEWAY_URL and pass its challenge to a payment-enabled fetch. They enforce no origin, amount, token, network, or payee limit before signing.
The source shows an environment-controlled endpoint entering wrapFetchWithPayment without script-side validation. The documented wrapper automatically signs the server challenge.
The skill encourages dispute screenshots and documents without requiring a sensitivity review. Uploads go to externally retrievable IPFS and third-party pinning infrastructure.
The documented use cases include evidence files, and the response section provides public gateway URLs. No redaction or confidentiality check is required before upload.
The skill instructs npm install while dependency versions use caret ranges and no lockfile. Future installs can change code that receives wallet credentials and signs payments.
The package manifest contains caret ranges, and SKILL.md explicitly says the lockfile is omitted so versions stay fresh.
Capability review items (26)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The documented invocation places CDP API and wallet secrets directly in a shell command. Real substitutions can persist in shell history or process inspection.
If you'd rather not pass four env vars on the command line, point `CDP_CREDS_PATH` at a `.env`-style
The skill recommends a file containing CDP API and wallet secrets without requiring restrictive permissions. Weak file permissions could disclose wallet credentials.
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
CDP_CREDS_PATH controls whether the script loads credentials from a local file. A modified environment can redirect secret loading to another readable path.
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
CDP_CREDS_PATH controls whether the script loads credentials from a local file. A modified environment can redirect secret loading to another readable path.
This skill has a legitimate Kleros IPFS upload purpose, but it is high risk. It sends local files to an external gateway and signs real Base mainnet USDC payments. Most Markdown backtick findings are false positives, but credential handling, .env loading, configurable endpoints, paid execution, and fresh dependency installation remain confirmed concerns.
* CDP_CREDS_PATH Optional. Path to a .env-style file containing any of
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
for (const key of required) creds[key] = process.env[key];
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
`${key} is required (set in env, or in a CDP_CREDS_PATH .env file)`
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
* CDP server account instead of an exported EVM private key. Intended for
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
* hosted agents (OpenClaw, server-side workers) where exporting a private key
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
* EVM_PRIVATE_KEY payer's Base mainnet private key (required)
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
If you'd rather not pass four env vars on the command line, point `CDP_CREDS_PATH` at a `.env`-style
The line loads or documents credential-bearing environment variables or .env-style files. This is sensitive because the credentials authorize paid uploads or CDP account access.
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
The skill handles wallet private keys or CDP signing credentials for Base mainnet payments. These secrets can authorize spending if exposed or reused unsafely.
Both runners accept a local path, read the file bytes, and post them to the Kleros gateway. If an agent selects the wrong path, local data can be disclosed and pinned externally.
The scripts read process.argv file paths and send the file contents through fetchWithPay. This directly combines local file access with external network upload.
The skill intentionally spends real USDC on Base mainnet for successful uploads and paid smoke tests. Automatic execution could spend funds without clear user approval.
The documentation and script comments explicitly state that each successful upload costs USDC on Base mainnet. This is a clear financial side effect.
Fresh Dependency Installation Before Credential Use
The documentation instructs agents to run npm install and then execute the bundled runner, while noting there is no committed lockfile. Fresh dependency resolution increases supply-chain risk before handling payment credentials.
The skill explicitly says to install dependencies at use time and states that dependency versions stay fresh without a lockfile. This is legitimate but risky when wallet or CDP secrets are present.
Capability review items (58)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
for (const key of required) creds[key] = process.env[key];
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
for (const key of required) creds[key] = process.env[key];
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
* CDP_API_KEY_SECRET CDP API key secret (required)
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
// Tolerate either the bare key (CDP_API_KEY_ID) or the un-prefixed form
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
This environment access is part of loading CDP or wallet credentials, including optional .env-style credential files. Mishandling those values can expose payment authority.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
* EVM_PRIVATE_KEY payer's Base mainnet private key (required)
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
console.error("EVM_PRIVATE_KEY env var is required");
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
**Something broken or confusing in this skill?** Report it: fetch [feedback/SKILL.md](../feedback/SK
The Markdown link points outside the skill directory with ../feedback/SKILL.md. Even as documentation, it can direct an agent to load unreviewed sibling content beyond the skill boundary.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
If you'd rather not pass four env vars on the command line, point `CDP_CREDS_PATH` at a `.env`-style
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
2. Run the bundled script: `EVM_PRIVATE_KEY=0x... npx tsx pay-and-upload.ts /tmp/exhibit-a.png`.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
The skill documents or reads wallet private keys, CDP API keys, or CDP wallet secrets. These credentials can authorize payments or account access if mishandled.
* GATEWAY_URL defaults to https://kleros-ipfs-gateway.fly.dev
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
GATEWAY_URL is a non-secret configuration value, but it controls the remote upload endpoint. A bad environment value could redirect file uploads away from the intended Kleros gateway.
GATEWAY_URL is a non-secret configuration value, but it controls the remote upload endpoint. A bad environment value could redirect file uploads away from the intended Kleros gateway.
The documentation tells agents to run a node -e command that dynamically imports viem/accounts to generate a key. It is a legitimate setup step, but it executes local Node dependency code.
On success the script prints each CID on its own line (so you can capture them with `$(npx tsx pay-a
The documentation recommends shell command substitution around npx tsx, which executes the bundled upload script and can spend funds when credentials are present. This is a real external command instruction in the skill text.
test "$(stat -f%z /path/to/file)" -le 4194304 || echo "too big for the Kleros gateway"
The size check uses local shell command substitution with stat. The command is limited and defensive, but it still instructs agents to execute a shell command on a file path.
echo "kleros gateway smoke test $(date -u +%Y-%m-%dT%H:%M:%SZ)" > hello-world.txt
The smoke test creates a file using shell command substitution with date. The behavior is benign, but it is still an executable shell instruction in the skill workflow.
On success the script prints each CID on its own line (so you can capture them with `$(npx tsx pay-a
The line documents capture of a shell command result from the paid upload runner. It is Markdown, but following it executes local tooling and therefore remains a real operational risk.
Upload Kleros-ecosystem files to IPFS via `https://kleros-ipfs-gateway.fly.dev/upload-to-ipfs`, an x
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
curl -sS -X POST https://kleros-ipfs-gateway.fly.dev/upload-to-ipfs?operation=evidence \
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
- **Prefer `urls[i]`** — the gateway pre-builds a ready-to-use HTTP URL using the canonical Kleros I
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
| Kleros HTTP gateway URL | `"https://cdn.kleros.link" + cid` (or just use `urls[i]`) |
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
Do **not** write `https://cdn.kleros.link/ipfs/${cid}` — that produces a double-slash path because `
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
curl -sS https://cdn.kleros.link/ipfs/QmAbc... # paste the bare CID
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.
3. The script prints the CID on stdout (e.g. `/ipfs/QmXXX...`) and the pre-built URL on stderr as `u
The hardcoded Kleros gateway or CDN is an intentional external network dependency. Uploads and checks leave the local workspace, so users need consent and availability awareness.