T09 · Insecure Skill Coding Practices
- Location
scripts/aident.py:92- Finding
Registration Can Corrupt Local Identity Credentials
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears to be a real AIdent registration tool, but it handles persistent identity credentials and external metadata in ways that need review before install.
Install only if you are comfortable creating a permanent AIdent.store identity and storing a signing private key in your workspace. Before registering, check for existing aident_uid.txt and aident_privkey.b64 files, avoid running registration twice in the same workspace, do not pass untrusted metadata strings, and avoid metadata values beginning with @ because the current curl usage may interpret them as file references.
scripts/aident.py:92Registration Can Corrupt Local Identity Credentials
scripts/aident.py:96Private Key Is Created Before Restrictive Permissions Are Applied
SKILL.md:7Security-Critical Cryptographic Dependency Is Not Version-Pinned
The trigger list includes broad phrases like 'agent identity' and 'register my agent', which can match ordinary conversation and cause the skill to activate unexpectedly. Because this skill performs external registration and may create persistent local credential files, accidental invocation can lead to unintended data transmission and identity creation on a third-party service.
The quick-start and command descriptions encourage registration and heartbeat operations without prominently warning that they send metadata to an external service and create a long-lived private key file locally. Users may unknowingly disclose agent details, create an external identifier, and leave sensitive credentials on disk without understanding the privacy and security implications.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
cmd += ['-d', raw_body]
elif body is not None:
cmd += ['-d', json.dumps(body)]
r = subprocess.run(cmd, capture_output=True, text=True, timeout=15)
try:
return json.loads(r.stdout)
except Exception:
The get_meta function fetches private metadata and prints the full response to stdout, which can expose sensitive user or agent data. Although the code performs the signed request, there is no confirmation prompt or explicit user-facing warning that private metadata will be retrieved and displayed.
The script hardcodes English-only user-facing instructional text in its next-steps output. This could be interpreted as a locale preference without any opt-in or language selection mechanism.
No suspicious patterns detected.