T09 · Insecure Skill Coding Practices
- Location
features/voice_memory.py:17- Finding
Configurable API Endpoint Can Expose Bearer Credentials and Sensitive Voice Data
- Content
View full analysis
Optional[str]: """Store a conversation/memory. Returns session_id. Feature 1 core.""" if not API_KEY or not text or len(text.strip()) < 5: return None payload = {"text": text[:8000]} if title: payload["title"] = title[:200] if tags: payload["tags"] = tags[:10] try: async with httpx.AsyncClient(timeout=timeout) as client: r = await client.post(f"{BASE}/agent-remember", headers=_headers(), json=payload) ``` The same configurable `BASE` and authorization header are also used by `recall()` and `note()` at lines 47-70. ### Technical Analysis `BLUECOLUMN_BASE` is read directly from the process environment and used as the destination of authenticated HTTP requests. The code does not validate that the URL: - Uses HTTPS. - Targets the documented BlueColumn Supabase host. - Has an approved path. - Cannot redirect authenticated requests to another destination. Every outbound request contains `BLUECOLUMN_API_KEY` in an `Authorization: Bearer` header. Depending on the operation, the request body can also contain voice transcripts, meeting transcripts, journal entries, CRM records, coaching information, sales records, customer identifiers, and recall queries. This issue is exploitable when an attacker can influence the process environment or deployment configuration. It does not independently grant an unauthenticated remote attacker control over the ...[truncated 1152 chars]- Remediation
View remediation
