T06 · System Persistence
- Location
scripts/start.js:10- Finding
Detached Execution of an Unbundled External Script
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill mostly matches its secure agent messaging purpose, but it includes under-disclosed key storage and a startup script that can run unreviewed background code from a hard-coded local path.
Review before installing. Use this only in environments where a plaintext identity key file is acceptable, avoid highly sensitive workflows over Telegram without a metadata threat model, do not invoke scripts/start.js unless you have inspected the external run.js it will execute, and prefer pinned dependencies plus restrictive permissions for identity files.
scripts/start.js:10Detached Execution of an Unbundled External Script
src/index.ts:72Persistent Identity Secret Key Written Without Restrictive Permissions
src/index.ts:157Unbounded Unauthenticated Handshake and Consent Queues Enable Memory Exhaustion
The skill strongly promotes Telegram as a transport for agent-to-agent communication but does not clearly warn that Telegram, as a third-party service, will still observe metadata such as account identities, group membership, timing, message size, and communication patterns even if payloads are end-to-end encrypted at the application layer. Users may incorrectly infer complete privacy from the repeated 'secure' framing and route sensitive agent workflows through infrastructure that leaks operational metadata.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The script reads a local identity file, extracts the user's public key, and automatically prints a full connection string and endpoint details to stdout without any confirmation or access control. In an agent skill context, stdout may be captured by logs, orchestration systems, or other tools, so this can unintentionally disclose sensitive operational metadata and facilitate unauthorized connection attempts or tracking of the user's node.
The code persists the long-term secret key to disk in plaintext JSON alongside the public identity and trust metadata. If the file is read by another local user, malware, backups, logs, or accidental file exposure, an attacker can fully impersonate the agent, decrypt future sessions where that identity is trusted, and subvert the trust model.
The setup instructions tell users to exchange public keys and Clawdio Hub group IDs without warning that these identifiers reveal who should be contacted and where, enabling misdelivery, unwanted connection attempts, correlation of peers, or social-engineering abuse if shared too broadly. In a messaging-based peer discovery workflow, lack of caution around identifier sharing increases the chance of exposing connection topology and onboarding the wrong party.
The production dependency uses a caret range, which permits automatic installation of newer compatible releases rather than a single audited version. If the upstream package or release pipeline is compromised, consumers may pull an unexpected version into a security-sensitive cryptographic communications library.
],
"license": "MIT",
"dependencies": {
"libsodium-wrappers": "^0.7.15"
},
"devDependencies": {
"@types/libsodium-wrappers": "^0.7.14",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"libsodium-wrappers": "^0.7.15"
},
"devDependencies": {
"@types/libsodium-wrappers": "^0.7.14",
"@types/node": "^25.2.2",
"typescript": "^5.7.0"
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/libsodium-wrappers": "^0.7.14",
"@types/node": "^25.2.2",
"typescript": "^5.7.0"
}
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"devDependencies": {
"@types/libsodium-wrappers": "^0.7.14",
"@types/node": "^25.2.2",
"typescript": "^5.7.0"
}
}
The code logs full received message contents with JSON.stringify(msg), which may expose sensitive or private peer data to the local terminal or terminal logs. While the code does perform visible logging, there is no explicit warning to the user that peer-supplied content will be echoed verbatim to stdout.
Detected: suspicious.dangerous_exec