T05 · Unauthorized Access and Privilege Escalation
- Location
SKILL.md:119- Finding
Excessive Disclosure of Identifiable Conversation Data to an External Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill's preference-learning purpose is clear, but it asks agents to send full conversations and stable user identifiers to pref0 and to apply returned prompt text as future instructions.
Review this before installing. Use it only if users knowingly opt in to sending conversations to pref0, prefer pseudonymous user IDs, avoid sending secrets or sensitive conversations, and render only validated structured preferences instead of directly injecting the returned prompt into system instructions.
SKILL.md:119Excessive Disclosure of Identifiable Conversation Data to an External Service
SKILL.md:121Untrusted Remote Prompt Is Injected Directly into the System-Prompt Context
notes.txt:1Unpinned Package Is Installed Globally from the npm Registry
Instructions found that direct the agent to transmit conversation context or user data to external services.
### After a conversation ends → Track it
After finishing a conversation (or at natural breakpoints), send the messages to pref0 so it can extract preferences. This is especially valuable when the user **corrects** you (e.g., "use pnpm, not npm") or states explicit preferences (e.g., "always use metric units").
### Before responding to a user → Fetch their preferences
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
Each preference includes `evidence` (the quote that triggered extraction), `firstSeen` (when first learned), and `lastSeen` (when last reinforced). The `prompt` field is a ready-to-use string you can append directly to your system prompt.
### Delete a user profile (DELETE /v1/profiles/:userId)
Reset a user's learned preferences. Use for preference resets or data deletion requests.
The skill explicitly instructs agents to send conversation messages to a third-party API after conversations end, but it provides no requirement for informed user consent, privacy notice, minimization, or redaction. This creates a real privacy risk because conversations may contain sensitive or regulated data that is unnecessarily disclosed to an external service.
The skill promotes storing and retransmitting full conversation history plus quoted user statements across sessions to build persistent profiles. This creates durable cross-session data exposure and increases the chance that sensitive content, secrets, or regulated information is retained and resurfaced beyond the original context.
This endpoint sends conversation content to an external domain using an API key, which is a genuine external transmission path for potentially sensitive user data. In this skill's context, the danger is not mere network use but that the transmitted payload contains conversation history intended for profiling.
Send a conversation so pref0 can learn from it. It extracts corrections, explicit preferences, and behavioral patterns automatically.
curl -X POST https://api.pref0.com/v1/track \
-H "Authorization: Bearer $PREF0_API_KEY" \
-H "Content-Type: application/json" \
-d '{
This endpoint sends conversation content to an external domain using an API key, which is a genuine external transmission path for potentially sensitive user data. In this skill's context, the danger is not mere network use but that the transmitted payload contains conversation history intended for profiling.
Send a conversation so pref0 can learn from it. It extracts corrections, explicit preferences, and behavioral patterns automatically.
curl -X POST https://api.pref0.com/v1/track \
-H "Authorization: Bearer $PREF0_API_KEY" \
-H "Content-Type: application/json" \
-d '{
The skill says the external service returns a natural-language 'prompt' that is 'ready-to-use' and can be appended directly to the system prompt. Directly injecting externally generated text into the system prompt creates a prompt-injection/control-plane risk, because malicious or malformed stored content could alter model behavior across future sessions.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Retrieve the user's learned preference profile. Use ?minConfidence=0.5 to only get well-learned preferences suitable for system prompt injection.
curl https://api.pref0.com/v1/profiles/<user-id>?minConfidence=0.5 \
-H "Authorization: Bearer $PREF0_API_KEY"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Retrieve the user's learned preference profile. Use ?minConfidence=0.5 to only get well-learned preferences suitable for system prompt injection.
curl https://api.pref0.com/v1/profiles/<user-id>?minConfidence=0.5 \
-H "Authorization: Bearer $PREF0_API_KEY"
The workflow recommends stable identifiers such as email or phone number for the external profile service without warning about the sensitivity of those identifiers or suggesting pseudonymous alternatives. Using direct personal identifiers increases privacy, correlation, and compliance risk if the external service is breached or misused.
The integration workflow explicitly instructs sending the full message history to an external service at the end of a session. Full-history export materially increases privacy and data-governance risk because it transfers far more user content than is needed to capture simple preferences.
No suspicious patterns detected.