T09 · Insecure Skill Coding Practices
- Location
SKILL.md:19- Finding
Customer PII Is Persisted to an External Service Without Data-Handling Safeguards
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:19-36,SKILL.md:44-59
Vulnerability Type: External persistence of sensitive customer information without consent, minimization, or retention controls
Risk Level: MediumThe documented workflows instruct the agent to transmit customer email addresses, support history, preferences, plan information, and technical-stack details to BlueColumn's externally hosted persistent-memory service.
markdown ## Store Customer Interaction ```bash curl -X POST .../agent-remember \ -H "Authorization: Bearer <key>" \ -d '{ "text": "Customer: jane@acme.com. Issue: API rate limiting on Developer plan. Resolved by upgrading to Builder. Prefers email communication. Tech stack: Python + LangChain.", "title": "Customer: jane@acme.com - 2026-04-14" }'Store Quick Customer Note
bash curl -X POST .../agent-note \ -H "Authorization: Bearer <key>" \ -d '{ "text": "jane@acme.com prefers async email over live chat", "tags": ["customer", "jane@acme.com", "preference"] }'text The required workflow further encourages routine collection and persistence: ```markdown ## Workflow **New interaction:** 1. Query customer history first: "what do we know about [customer]?" 2. Use context to personalize response 3. After interaction → store summary via `/agent-remember` 4. Store key preferences via `/agent-note` with customer email tag **Support ticket:** 1. Recall similar past issues: "have we seen this error before?" 2. Resolve using historical context 3. Log resolution with outcome ## Title Convention `"Customer: <email> - <YYYY-MM-DD>"` Use consistent email-based naming so recall queries work accurately across all interactions with the same customer.Technical Analysis
Customer data is sent to
https://xkjkwqbfvkswwdmbtndo.supabase.co/functions/v1and stored as searc ...[truncated 2571 chars]- Remediation
View remediation
Remediation Suggestions
- Require explicit customer and organizational authorization before enabling persistent storage.
- Add a mandatory preprocessing stage that removes passwords, API keys, session tokens, payment data, government identifiers, health information, and other sensitive fields.
- Replace email-based titles and tags with opaque, tenant-scoped customer identifiers.
- Define an allowlist of fields that may be stored rather than accepting unrestricted interaction summaries.
- Require confirmation before persisting unusually sensitive or high-volume content.
- Document retention periods, deletion procedures, data residency, subprocessors, and incident-response responsibilities.
- Provide API operations or administrative procedures for customer-specific export and deletion.
- Scope API keys per environment and tenant, rotate them regularly, and never include them in logs or stored memory.
- Warn agents not to persist entire transcripts by default; store only the minimum operational facts necessary.
