T09 · Insecure Skill Coding Practices
- Location
examples/life-coaching-pipeline.md:81- Finding
Sensitive life-coaching data is forwarded to dynamically selected marketplace agents
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent workflow documentation, but its examples normalize risky wallet-key handling and unreviewed third-party agent selection for sensitive workflows.
Review this before installing or following the examples. Use a dedicated low-value wallet, never commit .env, prefer a secret manager, pin package and skill versions, and replace marketplace first-result selection with reviewed or allowlisted agent IDs before processing sensitive or client data.
examples/life-coaching-pipeline.md:81Sensitive life-coaching data is forwarded to dynamically selected marketplace agents
SKILL.md:160Executable packages and Skill updates are installed from mutable, unpinned sources
Referenced artifact was not completely inspected
- `reference.md` - Workflow patterns, declarative sync, triggers, monitoring
The example explicitly instructs storing a wallet private key in plaintext environment configuration. If the file is exposed through source control, endpoint compromise, backups, or accidental sharing, an attacker may gain direct control over the associated wallet or account, making this more serious than a generic credential reference.
└── tsconfig.json
### .env
```env
WALLET_PRIVATE_KEY=0x...
This line explicitly instructs users to store a wallet private key in a plaintext .env file. While common in examples, private keys are highly sensitive and compromise can allow full control of the associated wallet/account, making the documentation risky if it omits strong safeguards.
└── tsconfig.json
### .env
```env
WALLET_PRIVATE_KEY=0x...
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
paid-image-pipeline/ ├── src/ │ └── agent.ts ├── .env ├── package.json └── tsconfig.json
The example shows a .env containing WALLET_PRIVATE_KEY and later states that provision() auto-populates it, but it does not prominently warn that a private key will be written to local disk. This can lead developers to accidentally commit the key, expose it via backups or logs, or reuse an insecure workstation secret for an on-chain identity and payment wallet.
Reloading .env specifically to consume WALLET_PRIVATE_KEY confirms that the workflow persists a usable private key in plaintext and then reads it back into process memory for authentication and on-chain operations. In this context, compromise of the project directory, source control, CI artifacts, or developer workstation can directly lead to wallet theft, unauthorized registrations, and loss of funds or identity control.
// ... after provision(), before run():
// Reload .env to pick up WALLET_PRIVATE_KEY written by provision()
dotenv.config({ override: true })
try {
The documentation explicitly tells users to store a WALLET_PRIVATE_KEY in plaintext in a .env example without adjacent safety guidance. Because a wallet private key is a highly sensitive authentication secret, weak handling can lead to account compromise, unauthorized workflow actions, or loss of assets/control associated with that wallet.
└── tsconfig.json
### .env
```env
WALLET_PRIVATE_KEY=0x...
This line shows a raw WALLET_PRIVATE_KEY value in a .env example, directly normalizing local storage of a highly sensitive signing credential. If users follow this guidance without safeguards, exposure of the file, shell history, backups, screenshots, or accidental commits could lead to wallet compromise and unauthorized transactions.
└── tsconfig.json
### .env
```env
WALLET_PRIVATE_KEY=0x...
The example explicitly places a wallet private key in .env without accompanying safe-handling guidance. In a blockchain context, compromise of this secret can allow unauthorized wallet use, making the documentation risky even if the intent is instructional.
└── tsconfig.json
### .env
```env
WALLET_PRIVATE_KEY=0x...
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const client = new PlatformClient()
if (!process.env.WALLET_PRIVATE_KEY) {
console.error('Missing WALLET_PRIVATE_KEY in .env')
process.exit(1)
}
Detected: suspicious.prompt_injection_instructions