perkoon-transfer
The perkoon-transfer skill enables third-party P2P file transfers through perkoon.com with declared but risky mechanisms: shell:WRITE (npx background processes), unverified network:READ (A2A to perkoon.com/a2a), and curl|node remote script execution for browser automation.
Browser automation method (Method 4) instructs agents to download and execute remote JavaScript files: curl https://perkoon.com/perkoon_send.mjs > send.mjs && node send.mjs and curl https://perkoon.com/perkoon_receive.mjs > receive.mjs && node receive.mjs. No checksums, hashes, or versioned content hashes are provided, allowing arbitrary code changes on perkoon.com at any time.
SKILL.md:315 Why this conclusion was reached
1/4 dimensions flaggedDeclared resources and inferred behavior are broadly aligned.
14 lower-risk artifacts were extracted and still need context.
The report includes 0 attack-chain steps and 1 severe findings.
4 dependency or supply-chain issues need attention.
What drove the risk score up
Browser automation downloads perkoon_send.mjs and perkoon_receive.mjs via curl and pipes directly to node, with no integrity verification (checksums, signatures, or pinned content hashes). Warned in docs but still included as a supported method.
Remote .mjs files at perkoon.com/perkoon_send.mjs and perkoon.com/perkoon_receive.mjs can be updated at any time — no content pinning, no hash verification.
SKILL.md states 'Files never touch our servers,' but WebRTC signaling requires session metadata to traverse perkoon.com infrastructure. This is a misleading claim about the actual data flow.
No allowed-tools mapping declares network:READ for A2A HTTP requests to perkoon.com/a2a or filesystem:WRITE for saving received files. These are declared in prose but not formally mapped.
Most important evidence
Remote script execution without integrity verification
Browser automation method (Method 4) instructs agents to download and execute remote JavaScript files: curl https://perkoon.com/perkoon_send.mjs > send.mjs && node send.mjs and curl https://perkoon.com/perkoon_receive.mjs > receive.mjs && node receive.mjs. No checksums, hashes, or versioned content hashes are provided, allowing arbitrary code changes on perkoon.com at any time.
SKILL.md:315 Misleading 'Files never touch our servers' claim
SKILL.md prominently claims 'Files never touch our servers' and 'No accounts. Files never touch our servers.' However, WebRTC P2P requires signaling servers — session metadata (offer/answer SDP, ICE candidates, session codes, sender keys) must traverse perkoon.com's infrastructure to establish the direct connection. While file content may be P2P-encrypted, the signaling data (including session codes and keys) does flow through perkoon.com servers.
SKILL.md:6 Incomplete allowed-tools mapping
The skill's metadata declares no allowed-tools, but the implementation requires network:READ (A2A HTTP POSTs to perkoon.com), shell:WRITE (npx background processes, log file I/O), and filesystem:WRITE (save received files). These are documented in prose but not formally mapped as allowed-tools.
SKILL.md:1 Filesystem write to workspace without explicit path confirmation
The CLI receive method defaults to /home/openclaw/.openclaw/workspace/received/ as the save directory. While SKILL.md includes a rule to 'confirm the file path with the user before sending,' the receive path is hardcoded and not user-confirmed.
SKILL.md:149 Declared capability vs actual capability
SKILL.md line 204: POST to https://perkoon.com/a2a (A2A method); SKILL.md line 315-316: GET for remote .mjs scripts (browser automation) SKILL.md lines 91-162: background npx processes, log file polling, PID management SKILL.md line 149: saves received files to /home/openclaw/.openclaw/workspace/received/ No cross-skill invocations found Suspicious artifacts and egress
https://perkoon.com SKILL.md:10
https://perkoon.com/K7MX4QPR9W2N SKILL.md:115
https://perkoon.com/a2a SKILL.md:204
https://perkoon.com/.well-known/agent.json SKILL.md:206
https://perkoon.com/perkoon_send.mjs SKILL.md:315
https://perkoon.com/perkoon_receive.mjs SKILL.md:316
https://perkoon.com/create SKILL.md:321
https://perkoon.com/ SKILL.md:332
https://perkoon.com/llms.txt SKILL.md:428
https://perkoon.com/automate SKILL.md:429
https://www.npmjs.com/package/@perkoon/mcp SKILL.md:430
https://www.npmjs.com/package/perkoon SKILL.md:431
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| perkoon | 0.4.6 | npm (npx) | No | Pinned. Used for CLI file transfer. |
| @perkoon/mcp | 0.2.2 | npm (npx) | No | Pinned. Used for MCP server tools. |
| perkoon_send.mjs | unversioned | remote URL (perkoon.com) | No | NOT pinned — fetched dynamically via curl. Remote content can change without notice. |
| perkoon_receive.mjs | unversioned | remote URL (perkoon.com) | No | NOT pinned — fetched dynamically via curl. Remote content can change without notice. |
File composition
SKILL.md skill-card.md