T09 · Insecure Skill Coding Practices
- Location
.agent/skills/identity-sovereign/scripts/verify_did.ts:17- Finding
Untrusted public-key substitution allows forged mandates
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This identity skill is purpose-aligned, but its signing and verification workflows handle high-value identity keys and mandates with under-enforced safeguards.
Review this carefully before installing. Use it only in an isolated environment with a strong CLAW_PASSWORD, do not treat generated mandates as authoritative without independent issuer/key validation, avoid using real personal claims with the selective-disclosure script, and pin dependencies before running npm or npx commands.
.agent/skills/identity-sovereign/scripts/verify_did.ts:17Untrusted public-key substitution allows forged mandates
.agent/skills/identity-sovereign/scripts/onboard.ts:81Encrypted master identity is created without restrictive file permissions
.agent/skills/identity-sovereign/scripts/guardrail.ts:6Advertised mandatory guardrail is not integrated and accepts incomplete input
.agent/skills/identity-sovereign/scripts/selective_disclosure.ts:34Complete selective-disclosure token exposes every hidden claim in logs
package.json:34Unpinned dependency resolution and npx execution make installations non-reproducible
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
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.
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 contributing guide instructs users to run npx tsx scripts/e2e_test.ts without pinning a specific package version. If tsx is not already installed locally, npx may fetch the latest package at execution time, creating a supply-chain risk where contributors execute unreviewed code that could change over time or be compromised upstream. In contributor documentation, this is moderately dangerous because users may copy-paste the command directly in a development environment.
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.
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.
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.
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.
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.
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.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
## Directory Structure
- `.agent/skills/identity-sovereign/SKILL.md`: The Brain & Decision Matrix.
- `schema/`: JSON schemas.
- `scripts/`: TypeScript implementation of DID/VC/SD-JWT logic.
The routing logic relies on broad keyword matching such as 'sign', 'buy', 'access', and 'view', which can misclassify user intent and cause the agent to select a higher-privilege identity persona or attach proofs unnecessarily. In an identity-management skill, incorrect persona selection can lead to over-disclosure, unintended use of a corporate identity, or accidental mandate signing in contexts that only required low-privilege browsing access.
The test script invokes npx tsx, which can fetch and execute a package version at runtime if the dependency is missing or resolution is manipulated. In a security-sensitive identity skill, this increases supply-chain risk because arbitrary code could run during testing or CI from an unpinned toolchain component.
The skill is explicitly about managing DIDs and privacy-preserving identity proofs, so describing DID generation as creating a "decrypted identifier" conflicts with the documented intent and meaning of the tool. This is not just incomplete wording; it states a different concept than the surrounding purpose and privacy guidance.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"test": "npx tsx .agent/skills/identity-sovereign/scripts/e2e_test.ts"
},
"devDependencies": {
"@types/bs58": "^4.0.4",
"@types/node": "^18.19.130",
"ts-node": "^10.9.1",
"tsx": "^4.7.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/bs58": "^4.0.4",
"@types/node": "^18.19.130",
"ts-node": "^10.9.1",
"tsx": "^4.7.0",
"typescript": "^5.0.0"
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"devDependencies": {
"@types/bs58": "^4.0.4",
"@types/node": "^18.19.130",
"ts-node": "^10.9.1",
"tsx": "^4.7.0",
"typescript": "^5.0.0"
},
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"@types/bs58": "^4.0.4",
"@types/node": "^18.19.130",
"ts-node": "^10.9.1",
"tsx": "^4.7.0",
"typescript": "^5.0.0"
},
"dependencies": {
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"@types/node": "^18.19.130",
"ts-node": "^10.9.1",
"tsx": "^4.7.0",
"typescript": "^5.0.0"
},
"dependencies": {
"bs58": "^6.0.0",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"typescript": "^5.0.0"
},
"dependencies": {
"bs58": "^6.0.0",
"dotenv": "^17.3.1",
"jose": "^6.1.3"
}
No suspicious patterns detected.