T09 · Insecure Skill Coding Practices
Warning
- Location
- SKILL.md:451
- Finding
- Persistent Storage of Sensitive Financial Information Without Defined Protections## Vulnerability Details **File Location**: `SKILL.md:451-488` **Vulnerability Type**: Persistent plaintext sensitive-data storage **Risk Level**: Medium ### Vulnerable Code ```yaml ## Agent State Persist across sessions: money_crisis: phase: null safety_check_done: false phase_1: tier_1_covered: false snap_applied: false creditors_called: [] assistance_applied: [] phase_2: monthly_income: null monthly_minimum_expenses: null runway_months: null bills_negotiated: [] expense_cuts_made: [] phase_3: monthly_essentials: null targets: one_month: null three_months: null six_months: null current_balance: null automatic_transfer: amount: null day: null set_up: false milestones: first_100: false one_month: false three_months: false emergency_definition: [] subscriptions_cancelled: [] flags: income_gap: false debt_counselor_referred: false unbanked: false ``` ### Technical Analysis The Skill explicitly directs the Agent to persist detailed financial information across sessions. The proposed state includes monthly income, minimum expenses, financial runway, savings balances, transfer amounts and dates, creditor interactions, assistance applications, and indicators of financial hardship. The Skill does not define explicit user consent, data minimization, encryption, access controls, retention periods, purpose limitations, or deletion procedures. Consequently, an implementation that follows these instructions literally may retain sensitive financial information in an inadequately protected state backend. This is classified as `T09: Insecure Skill Coding Practices` because the unsafe configuration may expose sensitive information through insufficient storage and lifecycle controls. The state is user-supplied data rather than atta ...[truncated 1527 chars]
- Remediation
- ## Remediation Suggestions 1. Require explicit, informed user consent before enabling cross-session financial state. 2. Default to session-only processing and make persistence optional. 3. Minimize retained data: - Store progress indicators instead of exact balances or income. - Avoid retaining automatic-transfer dates and amounts. - Avoid retaining creditor and assistance-application details unless strictly necessary. 4. Encrypt retained information at rest and in transit using platform-managed keys. 5. Apply per-user and per-agent access controls with strict tenant isolation. 6. Define short retention periods and automatically delete stale financial records. 7. Provide user-visible controls to inspect, export, correct, and delete stored state. 8. Prevent sensitive state from appearing in logs, telemetry, crash reports, or reminder text. 9. Document the purpose and lifetime of every retained field. 10. Add a declaration such as: ```yaml persistence: enabled: false requires_explicit_consent: true sensitive_fields: - monthly_income - monthly_minimum_expenses - current_balance - automatic_transfer retention_days: 30 user_deletable: true encryption_required: true ```
