Low Risk — Risk Score 20/100
Last scan:23 hr ago Rescan
20 /100
koan-protocol
Open identity and encrypted communication protocol for AI agents. Register on the Koan mesh, get a cryptographic identity, and exchange E2E-encrypted messages.
A legitimate cryptographic identity and messaging protocol SDK. All pre-scan base64 IOCs are false positives (standard crypto key decoding). The only real concern is unencrypted private key storage on non-Windows/non-macOS systems, which is clearly documented with warnings.
Skill Namekoan-protocol
Duration70.9s
Enginepi
Safe to install
Safe to use with caution. On Linux, private keys are stored as base64 plaintext in ~/.koan/identity.json — use only for non-production/development agents. Consider migrating keys to a keychain or encrypted vault per SKILL.md recommendations.

Findings 3 items

Severity Finding Location
Medium
Shell execution undeclared in SKILL.md Doc Mismatch
SKILL.md does not mention that the SDK uses subprocess.run (Python) and spawnSync (Node.js) to execute shell commands for keychain integration (PowerShell DPAPI on Windows, security CLI on macOS). While the shell usage is legitimate for keychain ops, it represents an undeclared shell:WRITE capability.
proc = subprocess.run(command, capture_output=True, text=True, env=env)
→ Add a 'Shell access' section to SKILL.md declaring subprocess usage for keychain integration on Windows/macOS.
python/koan_sdk.py:47
Medium
Private keys stored as plaintext on Linux Sensitive Access
On non-Windows/non-macOS systems, private keys are written to ~/.koan/identity.json in base64-encoded plaintext (no encryption). SKILL.md warns about this ('Treat this as local plaintext key material'), but the default behavior stores unencrypted private key material on disk.
data['signingPrivateKey'] = signing_private_key
data['encryptionPrivateKey'] = encryption_private_key
→ SKILL.md already recommends OS keychain or encrypted vault. Consider adding a prominent warning or auto-detecting Linux keyring backends (e.g., secret-service/libsecret).
python/koan_sdk.py:173
Low
cryptography dependency not strictly pinned Supply Chain
python/requirements.txt specifies cryptography>=42.0.0 with no upper bound. This allows installing future incompatible or compromised versions.
cryptography>=42.0.0
→ Pin to a specific version range (e.g., cryptography>=42.0.0,<43.1.0) or use a lockfile.
python/requirements.txt:1
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned ~/.koan/identity.json, ~/.koan/config.json, ~/.koan/chats/*.jsonl
Network READ WRITE ✓ Aligned POST /relay/intent, POST /queue/{koanId}/deliver; all declared in SKILL.md
Shell NONE WRITE ✓ Aligned python/koan_sdk.py:subprocess.run for keychain; node/koan-sdk.mjs:spawnSync for …
Environment NONE NONE Uses os.environ.copy() only for subprocess env isolation, no env var harvesting
Skill Invoke NONE NONE No skill invocation found
Clipboard NONE NONE No clipboard access
Browser NONE NONE No browser automation
Database NONE NONE No database access
10 Critical 23 findings
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(privateKeyBase64, 'base64'
SKILL.md:117
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(recipientPubBase64, 'base64'
SKILL.md:252
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(recipientPubKeyB64, 'base64'
node/koan-sdk.mjs:107
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(ephemeralPubB64, 'base64'
node/koan-sdk.mjs:132
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(nonceB64, 'base64'
node/koan-sdk.mjs:140
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(ciphertextB64, 'base64'
node/koan-sdk.mjs:141
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(signingPrivateKeyB64, 'base64'
node/koan-sdk.mjs:202
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(data.signingPublicKey, 'base64'
node/koan-sdk.mjs:203
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(encryptionPrivateKeyB64, 'base64'
node/koan-sdk.mjs:204
🔒
Critical Encoded Execution Base64 编码执行(代码混淆)
Buffer.from(data.encryptionPublicKey, 'base64'
node/koan-sdk.mjs:205
🔗
Medium External URL 外部 URL
https://koanmesh.com/skill.json
README.md:94
🔗
Medium External URL 外部 URL
https://koanmesh.com/team
README.md:95
🔗
Medium External URL 外部 URL
https://koanmesh.com/team-skill.json
README.md:96
🔗
Medium External URL 外部 URL
https://koanmesh.com/api-reference
README.md:97
🔗
Medium External URL 外部 URL
https://koanmesh.com
SKILL.md:4
🔗
Medium External URL 外部 URL
https://koanmesh.com/safety
SKILL.md:24
🔗
Medium External URL 外部 URL
https://koanmesh.com/reports
SKILL.md:26
🔗
Medium External URL 外部 URL
https://clawhub.ai/spclaudehome/skill-vetter
SKILL.md:27
🔗
Medium External URL 外部 URL
https://koanmesh.com/agents/check-key?signingPublicKey=
SKILL.md:66
🔗
Medium External URL 外部 URL
https://koanmesh.com/agents/register
SKILL.md:138
🔗
Medium External URL 外部 URL
https://koanmesh.com/relay/intent
SKILL.md:161
🔗
Medium External URL 外部 URL
https://koanmesh.com/queue/
SKILL.md:201
🔗
Medium External URL 外部 URL
https://koanmesh.com/agents/
SKILL.md:241

File Tree

5 files · 56.8 KB · 1465 lines
Python 1f · 530L JavaScript 1f · 487L Markdown 2f · 447L Text 1f · 1L
├─ 📁 node
│ └─ 📜 koan-sdk.mjs JavaScript 487L · 18.5 KB
├─ 📁 python
│ ├─ 🐍 koan_sdk.py Python 530L · 21.6 KB
│ └─ 📄 requirements.txt Text 1L · 21 B
├─ 📝 README.md Markdown 115L · 3.7 KB
└─ 📝 SKILL.md Markdown 332L · 12.9 KB

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
cryptography >=42.0.0 pip No Lower bound only, no upper bound — supply chain risk

Security Positives

✓ SKILL.md is thorough and transparent about the protocol's behavior, storage paths, and security properties
✓ SKILL.md explicitly warns that private keys are stored as unencrypted plaintext on Linux
✓ Node.js SDK has zero external dependencies — only built-in modules used
✓ No credential harvesting or environment variable enumeration observed
✓ No sensitive paths (~/.ssh, ~/.aws, .env) are accessed
✓ No obfuscation, encoded payloads, or anti-analysis techniques present
✓ No curl|bash, wget|sh, or eval-based remote execution
✓ No hidden functionality — code does exactly what documentation describes
✓ E2E encryption (X25519 ECDH + AES-256-GCM) is correctly implemented
✓ All external network calls are declared and expected for the protocol's directory/relay purpose
✓ Keychain integration (DPAPI/keychain) uses OS-native encryption on Windows and macOS