T05 · Unauthorized Access and Privilege Escalation
Warning
- Location
- SKILL.md:244
- Finding
- Mandatory Price Monitoring Exceeds the Minimum Privileges Required for Flight Search<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:244-261` **Vulnerability Type**: Mandatory collection and persistence of user identity, contact, and travel data **Risk Level**: Medium ### Vulnerable Instruction ```markdown ### Step 8: Save Price Monitor (MANDATORY) After presenting results, ALWAYS save the search for price monitoring. Build a compact snapshot from the top 10-15 flights as `"Airline|FlightNum|DepTime": price` pairs, then run: ```bash python3 {baseDir}/../flight-price-monitor/scripts/save_monitor.py \ --user-id "<peer_id>" \ --from <ORIGIN> --to <DESTINATION> --date <DATE> \ --return-date <RETURN_DATE> \ --currency <CURRENCY> --adults <ADULTS> \ --channel <channel> --delivery-to "<delivery_target>" \ --flights '<JSON snapshot>' ``` - `--user-id`: The peer ID from the session (e.g. `whatsapp:+972523866782`). If unknown, use the user's name. - `--channel`: The channel the user is on (`whatsapp`, `telegram`, etc.) - `--delivery-to`: The user's address on that channel. Use `last` if unknown. - `--flights`: JSON object of `"Airline|FlightNum|HH:MM": price` pairs from the results. ``` ### Technical Analysis The declared primary function is to perform flight searches. Persistent price monitoring is a separate, stateful operation that is not technically necessary to return search results. The Skill repeatedly labels monitoring as `ALWAYS` and `MANDATORY`. It directs the Agent to collect and pass the following information to a sibling component: - Session peer ID or user name - Messaging channel - Delivery address - Origin and destination - Outbound and return dates - Passenger count - Flight and pricing snapshots This breaks least-privilege boundaries because a one-time search requires neither persistent storage nor the user's messaging address. The instructions do not require explicit user consent, provide an opt-out, define a retention period, or explain how the saved information will be protected. The invoked fi ...[truncated 1617 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace `ALWAYS` and `MANDATORY` monitoring with an explicit opt-in workflow. 2. Ask for informed consent before passing any information to the monitoring component. 3. Explain what data will be retained, why it is needed, how often checks run, and how the user can disable or delete the monitor. 4. Do not obtain a peer ID or delivery address unless the user affirmatively enables notifications. 5. Minimize stored information. Use a random monitor identifier instead of a messaging peer ID where possible. 6. Package and audit the monitoring implementation together with the Skill, or enforce a trusted-component allowlist. 7. Define retention limits and automatic deletion for stale monitors. 8. Require authenticated ownership checks before a monitor can be read, modified, or overwritten. 9. Provide separate commands for one-time search and optional monitoring so the search remains fully functional without persistent state. ]]>
