T09 · Insecure Skill Coding Practices
- Location
SKILL.md:145- Finding
Private Identity Keys Stored in Plaintext by Default
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This identity skill is mostly purpose-aligned, but it handles cryptographic identity keys in ways that could expose them and links identities with weak confirmation guidance.
Review this skill carefully before installing. Use it only if you are comfortable with local DID private keys being created and stored, set BILLIONS_NETWORK_MASTER_KMS_KEY before creating identities, avoid importing private keys through command-line arguments, and require explicit confirmation before signing challenges or linking an agent identity to a person.
SKILL.md:145Private Identity Keys Stored in Plaintext by Default
SKILL.md:33Private Keys Accepted Through Observable Command-Line Arguments
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
Lets AI agents create and manage their own identities on the Billions Network, and link those identities to a human owner.
cd scripts && npm inst
The skill explicitly documents storage of highly sensitive identity artifacts, including private keys in kms.json that may be plaintext if BILLIONS_NETWORK_MASTER_KMS_KEY is unset, along with credentials and authentication history under a predictable path. In combination with the skill's signing and linking workflows, this creates meaningful credential-access risk if another tool, skill, or prompt-induced action reads from that directory or if the host is compromised.
- `kms.json` - **CRITICAL**: Contains private keys (encrypted if BILLIONS_NETWORK_MASTER_KMS_KEY is set, otherwise in plaintext)
- `defaultDid.json` - DID identifiers and public keys
- `challenges.json` - Authentication challenges history
- `credentials.json` - Verifiable credentials
- `identities.json` - Identity metadata
- `profiles.json` - Profile data
The skill declares broad, common-language usage triggers such as linking identity, signing challenges, verifying signatures, and using shared JWT tokens. In an agentic environment, these generic phrases can cause the skill to activate in situations where the user did not intend decentralized identity operations, leading to unnecessary handling of sensitive identity material or authentication actions.
The example conversation uses ambiguous phrasing like 'Link your agent identity to me,' which could be interpreted as sufficient authorization to initiate a sensitive identity-linking workflow. Because the documented flow may auto-generate a challenge when one is not supplied, this lowers the bar for triggering a high-trust action and increases the risk of unintended or socially engineered identity association.