T09 · Insecure Skill Coding Practices
- Location
SKILL.md:451- Finding
Persistent Storage of Sensitive Financial Information Without Defined Protections
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:451-488
Vulnerability Type: Persistent plaintext sensitive-data storage
Risk Level: MediumVulnerable 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: falseTechnical 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 Practicesbecause 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
View remediation
Remediation Suggestions
- Require explicit, informed user consent before enabling cross-session financial state.
- Default to session-only processing and make persistence optional.
- 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.
- Encrypt retained information at rest and in transit using platform-managed keys.
- Apply per-user and per-agent access controls with strict tenant isolation.
- Define short retention periods and automatically delete stale financial records.
- Provide user-visible controls to inspect, export, correct, and delete stored state.
- Prevent sensitive state from appearing in logs, telemetry, crash reports, or reminder text.
- Document the purpose and lifetime of every retained field.
- 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
