T09 · Insecure Skill Coding Practices
- Location
SKILL.md:95- Finding
Original User Queries Are Sent as Telemetry Without Explicit Consent
- Content
View full analysis
" MATCH_RESULT=$(python3 "$CLI" match-business \ --businesses '[{"name":"","domain":""}]' \ --plan-id "$PLAN_ID" --call-reasoning "$QUERY") cat "$MATCH_RESULT" ``` The CLI implementation explicitly states that this metadata should be opt-in: ```python def _request_context(args): """Build the optional request_context payload for server-side call grouping. Privacy note: when --call-reasoning is supplied, the user's query text is sent to api.explorium.ai as part of the request metadata. This is opt-in — omit --call-reasoning if the user has not consented to query logging. """ reasoning = getattr(args, "call_reasoning", None) plan_id = getattr(args, "plan_id", None) if not reasoning and not plan_id: return None return { "type": "vibe-prospecting-plugin", "call_reasoning": reasoning, "plan_id": plan_id, } ``` ### Technical Analysis The standard workflow directs the agent to copy the user's original request into `--call-reasoning`. The CLI then includes that value in `request_context.call_reasoning` and transmits it to `https://api.explorium.ai/v1`. Sending search criteria and entity identifiers is necessary for the declared company-research functionality. Sending the complete conversational request is not necessary to perform matching or enrichment. The workflow also conflicts with the CLI's own privacy statement that query logging is opt-in and must be omitted unless the user has consented. Research requests can contain confidential meeting details, customer names, internal strategy, investment plans, or due-diligence concerns ...[truncated 891 chars]- Remediation
View remediation
