T09 · Insecure Skill Coding Practices
- Location
SKILL.md:46- Finding
Unnecessary Disclosure of Verbatim User Messages to a Third-Party MCP Service
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:46,SKILL.md:86,SECURITY.md:31-42,reference.md:34-36
Vulnerability Type: Excessive transmission of unsanitized user-controlled data
Risk Level: MediumVulnerable Code Snippets
SKILL.md:46:markdown - Required: `checkIn`, `checkOut`. Pass `hotelName` + `city` + `queryText` (verbatim user text) whenever knownSKILL.md:86:markdown `queryText` — the user's message verbatimSECURITY.md:31-42:markdown Only the arguments the agent passes to a tool — a **travel query, not personal data**: | Tool | Data sent | |---|---| | `search_hotels_live` / `poll_search_results` | city, dates, adult count, language, `sessionId` | | `get_ota_hotel_detail` | hotel name, city, dates, `queryText` | | `get_hotel_detail` | `propertyId`, dates, adult count | | `get_cancellation_policy` | `propertyId`, `ratePlanId`, check-in date | ⚠️ `queryText` is **the user's original request, verbatim**. Whatever the user typed goes to the server as-is, so do not pass a message that carries unrelated personal context.reference.md:34-36:markdown **Required:** `checkIn`, `checkOut` **Strongly recommended:** `hotelName`, `city`, `queryText` (user's original text, verbatim) **Optional:** `adults` (default 2), `rooms` (default 1), `language`, `propertyUrl`Technical Analysis
The skill strongly recommends transmitting the user's original message verbatim through the
queryTextfield to PriceWin's hosted, closed-source MCP service. This violates data-minimization principles because the operation already provides structured fields for the hotel name, city, dates, guest count, and other search criteria.Free-form user messages can contain information unrelated to the hotel search, including names, contact details, travel plans, account information, health or accessibility informatio ...[truncated 2109 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove the instruction to send the user's original message verbatim.
- Omit
queryTextby default when structured parameters are sufficient. - If
queryTextis technically required, construct it from an allowlisted set of fields, such as the hotel name and city, rather than copying arbitrary user input. - Strip contact details, credentials, payment information, identifiers, unrelated personal context, and other sensitive content before transmission.
- Require explicit user consent before sending free-form text to the hosted MCP service.
- Update
SKILL.md,SECURITY.md, andreference.mdconsistently so they describe the sanitized behavior. - Add a clear data-retention and processing disclosure for the hosted service.
- Prefer a contract in which
queryTextis optional and document the specific cases in which it is necessary.
A safer instruction would be:
markdown Pass the structured hotel name, city, dates, and guest fields. Do not send the user's original message as `queryText`. If a query string is required, construct a minimal value from the hotel name and city after removing personal or unrelated information.
