T09 · Insecure Skill Coding Practices
Warning
- Location
- SKILL.md:10
- Finding
- Persistent Plaintext Storage of Sensitive Business and Payment Information## Vulnerability Details **File Location**: `SKILL.md:10-16` and `SKILL.md:78-80` **Vulnerability Type**: Plaintext sensitive-data storage without defined access controls **Risk Level**: Medium **Relevant Skill Instructions (`SKILL.md:10-16`):** ```markdown 1. **Your business info:** Name, address, email, phone (save for reuse) 2. **Client info:** Company name, contact name, address 3. **Invoice number:** Or auto-generate (INV-YYYY-NNN format) 4. **Line items:** Description, quantity, unit price 5. **Payment terms:** Net 30, Net 15, Due on receipt, etc. 6. **Payment methods:** Bank transfer, PayPal, Stripe link, etc. 7. **Currency:** Default USD ``` **Persistence Requirements (`SKILL.md:78-80`):** ```markdown - Save invoices to an `invoices/` directory for record-keeping - If the user has sent invoices before, reuse their business details - Currency formatting: use proper symbols and decimal places ($1,234.56) ``` ### Technical Analysis The Skill instructs the Agent to collect business and client contact information, payment-method information, and invoice transaction details. It then requires invoices to be saved in an `invoices/` directory and directs the Agent to reuse previously supplied business details. These instructions establish persistent storage of potentially sensitive data but do not define: - Restrictive directory and file permissions - Encryption at rest - User consent before persistence or reuse - Data minimization or redaction of banking and payment details - Retention periods and secure deletion procedures - Protection against accidental repository commits, backups, or file sharing - Warnings that generated HTML or Markdown invoices may contain portable plaintext data Consequently, generated invoice files may expose names, addresses, email addresses, telephone numbers, client relationships, financial amounts, and bank-transfer or payment-account details to any user or process ca ...[truncated 1714 chars]
- Remediation
- ## Remediation Suggestions 1. Require explicit user consent before saving invoices or retaining reusable business details. 2. Store the minimum information necessary and avoid retaining complete bank-account credentials, sensitive payment tokens, or unnecessary client data. 3. Redact payment details by default, retaining only safe references such as the last four digits or a user-approved payment identifier. 4. Create invoice directories and files with owner-only permissions where supported, such as directory mode `0700` and file mode `0600`. 5. Store generated invoices outside source repositories and add the invoice directory to ignore rules when repository use is possible. 6. Offer encryption at rest for retained invoices and protect encryption keys separately from the generated files. 7. Define configurable retention periods and provide commands for secure deletion of invoices and cached business profiles. 8. Warn users before generating portable HTML or Markdown documents containing sensitive payment information. 9. Separate reusable business-profile data from completed invoices and allow users to inspect, update, export, or delete the retained profile. 10. Clearly document that access to invoice history must be restricted to authorized users and processes.
