Skills kleros-ipfs-upload
๐Ÿ“ฆ

kleros-ipfs-upload

Content revision r1 High Risk โš™๏ธ External commands๐ŸŒ Network access๐Ÿ”‘ Env variablesโšก Contains scripts๐Ÿ“ Filesystem access

Upload Kleros Files to IPFS

Kleros artifacts need durable IPFS references before contracts and subgraphs can use them. This skill pays the Kleros x402 gateway and returns CIDs and gateway URLs.

Supports: Claude Codex Code(CC)
โš ๏ธ 38 Poor

Install with my Agent

Copy this request to your Agent. It includes the canonical Skill page and manifest.

Agent request
Review the Skillstore skill "kleros-ipfs-upload" from https://skillstore.io/skills/internet-court-kleros-ipfs-upload.md and its manifest at https://skillstore.io/api/skills/internet-court-kleros-ipfs-upload/manifest. Verify the artifact. Stop and obtain explicit user consent before installing or changing files.

Your Agent should still show its plan and request any confirmation required by the security policy.

Test it

Using "kleros-ipfs-upload". Upload a screenshot as evidence for a Kleros dispute.

Expected outcome:

The file is pinned. The response includes the IPFS CID and the canonical Kleros gateway URL for the evidence.

Using "kleros-ipfs-upload". Check the gateway before making a paid upload.

Expected outcome:

The health check passed, discovery returned Base mainnet payment terms, and the unpaid upload challenge showed x402 enforcement.

Using "kleros-ipfs-upload". Pin a meta-evidence document for a contract reference.

Expected outcome:

The document is uploaded with the meta-evidence operation. Use the returned CID in the contract or deployment workflow.

Security Audit

High Risk
v2 โ€ข 7/19/2026 Open versioned report

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.

4
Files scanned
557
Lines analyzed
26
Review items
0
False positives ignored

Confirmed security concerns (10)

High
Environment file access
if (process.env.CDP_CREDS_PATH && required.some((k) => !creds[k])) {
This condition enables credential loading from the path in CDP_CREDS_PATH. The following line reads sensitive wallet credentials from that file.
High
Environment file access
const fromFile = await loadEnvFile(process.env.CDP_CREDS_PATH);
The script reads the environment-selected file and parses CDP API and wallet secrets. This is direct access to a sensitive credential file.
High
Crypto seed/private key mention
const privateKey = (
This code normalizes the payer private key for signer construction. The value grants authority to authorize USDC payments.
High
Crypto seed/private key mention
const signer = await createSigner("base", privateKey);
The private key is passed to createSigner for Base payments. This is legitimate functionality with direct financial authority.
High
Environment file access
If you'd rather not pass four env vars on the command line, point `CDP_CREDS_PATH` at a `.env`-style
The instructions recommend storing CDP API and wallet secrets in an environment-style file. No restrictive permission requirement is provided.
High
Crypto seed/private key mention
const signer = await createSigner("base", privateKey);
The example creates a Base signer from a private key. Any process following it receives direct access to a spending credential.
High
Crypto seed/private key mention
node -e "import('viem/accounts').then(m => console.log(m.generatePrivateKey()))"
The command generates a private key and prints it to standard output. Agent logs or terminal capture can retain the secret.
High
Payment Terms Are Not Bounded
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.
Show all 10 confirmed findings
High
No Sensitive Evidence Review
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.
Medium
Unpinned Payment Dependencies
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.

High
Generic API/secret keys
* CDP_API_KEY_ID=... CDP_API_KEY_SECRET=... CDP_WALLET_SECRET=... \
The documented invocation places CDP API and wallet secrets directly in a shell command. Real substitutions can persist in shell history or process inspection.
High
Generic API/secret keys
apiKeyId: creds.CDP_API_KEY_ID!,
The CDP API key identifier is loaded into a client that controls a server wallet. It is part of the credential set used for paid requests.
High
Generic API/secret keys
apiKeySecret: creds.CDP_API_KEY_SECRET!,
The script passes the CDP API secret into the wallet client. Compromise of this runtime or dependency can expose a payment credential.
High
Generic API/secret keys
* EVM_PRIVATE_KEY=0x... npx tsx pay-and-upload.ts ./somefile.txt
The documented invocation places an EVM private key directly in a shell command. A real key can persist in shell history or process inspection.
High
Generic API/secret keys
const rawKey = process.env.EVM_PRIVATE_KEY;
The script directly reads the payer private key and later creates a signer from it. This grants the process authority to authorize USDC payments.
High
Generic API/secret keys
EVM_PRIVATE_KEY=0xYourPayerKey npx tsx pay-and-upload.ts /path/to/file.json
The quickstart instructs users to place a payer private key directly in a shell command. Real keys can be retained in command history.
High
Generic API/secret keys
CDP_API_KEY_SECRET=... \
The command template places the CDP API secret directly on the command line. Replacing the placeholder can expose it through shell history.
High
Generic API/secret keys
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.
High
Generic API/secret keys
EVM_PRIVATE_KEY=0x... npx tsx pay-and-upload.ts hello-world.txt
The paid smoke-test template places the private key in the command line. A real value can be retained in shell history.
High
Generic API/secret keys
CDP_API_KEY_ID=... CDP_API_KEY_SECRET=... CDP_WALLET_SECRET=... \
The CDP smoke-test template places multiple wallet credentials in one shell command. Real values can leak through history or process inspection.
High
Generic API/secret keys
2. Run the bundled script: `EVM_PRIVATE_KEY=0x... npx tsx pay-and-upload.ts /tmp/exhibit-a.png`.
The evidence-upload example places an EVM private key in an inline command. A real key can be retained in shell history.
High
Generic API/secret keys
1. `OPERATION=meta-evidence EVM_PRIVATE_KEY=0x... npx tsx pay-and-upload.ts ./case-42.json`.
The meta-evidence example places an EVM private key in an inline command. A real key can be retained in shell history.
Low
Hardcoded URL
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
The executable defaults to this external host and later sends file data through a payment-enabled fetch. The network exposure is intentional but real.
Low
Environment variable access (bracket notation)
for (const key of required) creds[key] = process.env[key];
The loop reads named CDP credentials from the process environment. This is required functionality, but it gives the script access to payment secrets.
Low
Environment variable access (dot notation)
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.
Low
Environment variable access (dot notation)
const fromFile = await loadEnvFile(process.env.CDP_CREDS_PATH);
The environment value is passed directly to the credential-file loader. This is intentional, but it selects a local file containing payment secrets.
Low
Environment variable access (dot notation)
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
GATEWAY_URL can redirect both the uploaded file and the payment-enabled request. The script does not constrain the configured origin.
Low
Environment variable object
for (const key of required) creds[key] = process.env[key];
The loop reads named CDP credentials from the process environment. This is required functionality, but it gives the script access to payment secrets.
Low
Environment variable object
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.
Low
Environment variable object
const fromFile = await loadEnvFile(process.env.CDP_CREDS_PATH);
The environment value is passed directly to the credential-file loader. This is intentional, but it selects a local file containing payment secrets.
Low
Environment variable object
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
GATEWAY_URL can redirect both the uploaded file and the payment-enabled request. The script does not constrain the configured origin.
Low
Hardcoded URL
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
The executable defaults to this external host and later sends file data through a payment-enabled fetch. The network exposure is intentional but real.
Low
Environment variable access (dot notation)
const rawKey = process.env.EVM_PRIVATE_KEY;
The script reads EVM_PRIVATE_KEY from the environment and later uses it to create a payment signer. This is direct access to a spending credential.
Low
Environment variable access (dot notation)
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
GATEWAY_URL can redirect both the uploaded file and the payment-enabled request. The script does not constrain the configured origin.
Low
Environment variable object
const rawKey = process.env.EVM_PRIVATE_KEY;
The script reads EVM_PRIVATE_KEY from the environment and later uses it to create a payment signer. This is direct access to a spending credential.
Low
Environment variable object
process.env.GATEWAY_URL ?? "https://kleros-ipfs-gateway.fly.dev";
GATEWAY_URL can redirect both the uploaded file and the payment-enabled request. The script does not constrain the configured origin.

Risk Factors

โš™๏ธ External commands (50)
๐ŸŒ Network access (18)
๐Ÿ”‘ Env variables (40)
โšก Contains scripts (1)
๐Ÿ“ Filesystem access (11)
Audited by: codex View Audit History โ†’
Share & cite this report

Share the versioned assessment report, neutral badge, embed card, and citations. Skillstore reports evidence without deciding whether this Skill is safe.

Open versioned report
Security Assessment

Copy report link

https://skillstore.io/skills/internet-court-kleros-ipfs-upload/audits/2?utm_source=security_passport&utm_medium=share&utm_campaign=versioned_report

Markdown badge

[![Skillstore security assessment](https://skillstore.io/badges/skills/internet-court-kleros-ipfs-upload/security.svg)](https://skillstore.io/skills/internet-court-kleros-ipfs-upload?utm_source=security_passport_badge)

HTML badge

<a href="https://skillstore.io/skills/internet-court-kleros-ipfs-upload?utm_source=security_passport_badge"><img src="https://skillstore.io/badges/skills/internet-court-kleros-ipfs-upload/security.svg" alt="Skillstore security assessment" loading="lazy"></a>

Embed card

<iframe src="https://skillstore.io/embed/skills/internet-court-kleros-ipfs-upload.html" title="Skillstore Security Assessment" sandbox="allow-popups allow-popups-to-escape-sandbox" loading="lazy" referrerpolicy="no-referrer" width="420" height="180"></iframe>
Academic citations (APA ยท BibTeX ยท CFF)

APA citation

internet-court. (2026). kleros-ipfs-upload security audit report (audit version 2) [Author version unspecified]. Skillstore. https://skillstore.io/skills/internet-court-kleros-ipfs-upload/audits/2

BibTeX citation

@techreport{internet-court-internet-court-kleros-ipfs-upload-2026, author = {internet-court}, title = {kleros-ipfs-upload security audit report (audit version 2)}, institution = {Skillstore}, year = {2026}, number = {2}, url = {https://skillstore.io/skills/internet-court-kleros-ipfs-upload/audits/2}, note = {Author version unspecified} }

CITATION.cff

cff-version: 1.2.0 message: "If you use this Skill, cite its author and this versioned security audit report." title: "kleros-ipfs-upload security audit report (audit version 2)" version: "unspecified" type: report authors: - name: "internet-court" date-released: "2026-07-19" url: "https://skillstore.io/skills/internet-court-kleros-ipfs-upload/audits/2" identifiers: - type: other value: "skillstore:internet-court-kleros-ipfs-upload:audit:2" description: "Skillstore immutable audit report identifier"

Skillstore Score

Why this score Evidence Confidence: Medium
45
Architecture
85
Maintainability
87
Content
65
Community
91
Spec Compliance

What You Can Build

Attach Dispute Evidence

Upload screenshots, contracts, or supporting documents and receive a URL suitable for a Kleros dispute submission.

Publish Meta-Evidence

Pin policy or case metadata files before referencing their CIDs from contracts, events, or deployment scripts.

Validate Gateway Readiness

Check the gateway health, x402 discovery metadata, payment network, and expected price before relying on a paid upload.

Try These Prompts

Upload Evidence File
Use this skill to upload my selected file as Kleros dispute evidence. Confirm the cost, check the gateway, then return the CID and URL.
Pin Meta-Evidence
Pin my meta-evidence file for a Kleros case. Use the meta-evidence operation and explain which CID I should store on-chain.
Run Free Gateway Checks
Run only the free Kleros IPFS gateway checks. Report the x402 price, network, payee, and whether a paid upload should proceed.
Use CDP Server Credentials
Use a Coinbase CDP server account to upload these Kleros artifacts in one paid request. Confirm credentials, expected spend, and CID consistency.

Best Practices

  • Confirm the file path, operation tag, price, and network before any paid upload.
  • Use a minimally funded wallet or scoped CDP account for upload payments.
  • Run the free health and discovery checks before spending USDC.

Avoid

  • Do not use this gateway for generic IPFS storage without a Kleros need.
  • Do not place long-lived private keys in shared agent environments.
  • Do not retry paid uploads repeatedly when one successful CID is enough.

Frequently Asked Questions

What does this skill upload?
It uploads Kleros ecosystem files such as evidence, meta-evidence, policies, metadata, and juror justifications.
Does it cost money?
Yes. Each successful paid upload spends USDC on Base mainnet through the x402 payment flow.
Which wallet types are supported?
The bundled runners support a raw EVM private key or a Coinbase CDP server account.
Can it upload large files?
No. The documented gateway limit is 4 MiB for the total multipart request body.
Can I use it for non-Kleros IPFS storage?
The skill recommends other pinning providers for generic IPFS storage that has no Kleros purpose.
What output should I expect?
A successful upload returns IPFS CIDs and Kleros gateway URLs that can be shared or referenced by other systems.

Developer Details

License

MIT

Skillstore revision

r1

Version notice

The author did not declare a version.

Ref

3f6e026a3363e0954ede7bef0cfe88d4475de137

Maintenance freshness

7/18/2026

Usage

1 downloads ยท 0 views

File structure

๐Ÿ“ scripts/

๐Ÿ“„ package.json

๐Ÿ“„ pay-and-upload-cdp.ts

๐Ÿ“„ pay-and-upload.ts

๐Ÿ“„ SKILL.md