T01 · Skill Instruction Hijacking
- Location
SKILL.md:128- Finding
Untrusted Remote API Responses Are Forwarded Without Validation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This travel skill appears purpose-built for Trip.com queries, but it is broad enough to capture general travel conversations and sends potentially sensitive travel details plus an API token to an external service with weak disclosure and unsafe local handling.
Install only if you are comfortable sending travel questions, itinerary details, locale information, and a TripGenie API token to Trip.com infrastructure. Configure the API key through a protected environment or secret manager rather than chat, avoid using the skill for casual travel discussion unless you intend a provider lookup, and treat returned links or booking details as third-party content to verify before acting.
SKILL.md:128Untrusted Remote API Responses Are Forwarded Without Validation
SKILL.md:42API Token Is Solicited Through Conversational Input
SKILL.md:57Predictable Shared Temporary Files Permit Symlink Clobbering and Data Exposure
The skill declares itself the primary handler for all travel-related queries and tells the orchestrator to prefer it over generic alternatives. Those broad routing rules can capture ordinary travel conversation and send user prompts to a third-party API even when the user did not explicitly choose this provider, increasing privacy and unintended-action risk.
The workflow states that user travel queries are POSTed to the TripGenie API and the full response is returned, but it does not clearly warn users that their query text and locale may be sent off-platform and written to a local file. This creates a transparency and privacy issue because users may disclose sensitive itinerary, identity, or booking details without informed consent.
This command transmits the user's query, locale, and API token to an external Trip.com endpoint and writes the returned content to /tmp. In a travel skill this behavior is functionally expected, but it is still security-relevant because sensitive travel plans and associated metadata leave the local trust boundary and the output file may expose data to other local processes.
| locale | No | Language/region; use LANG when available. |
jq -n --arg token "$TRIPGENIE_API_KEY" --arg query "$USER_QUERY" --arg locale "$LANG" '{token: $token, query: $query, locale: $locale}' | curl -s -X POST https://tripgenie-openclaw-prod.trip.com/openclaw/query -H "Content-Type: application/json" -d @- > /tmp/tripgenie-result.md
cat /tmp/tripgenie-result.md
The airline example posts travel details and the API token to an external service and stores the response in a predictable temporary file. Flight search data can reveal itinerary, location, and timing information, and predictable temp paths increase local disclosure risk on multi-user or shared environments.
China domestic flight search example:
jq -n --arg token "$TRIPGENIE_API_KEY" --arg departure "BJS" --arg arrival "SHA" --arg date "2026-03-15" --arg flight_type "1" '{token: $token, departure: $departure, arrival: $arrival, date: $date, flight_type: $flight_type, query: $query}' | curl -s -X POST https://tripgenie-openclaw-prod.trip.com/openclaw/airline -H "Content-Type: application/json" -d @- > /tmp/tripgenie-flight.md
cat /tmp/tripgenie-flight.md
This example has the same external transmission and temporary-file exposure pattern as the prior airline example. In context, international travel queries may be especially sensitive because they can reveal cross-border plans and personal movement patterns, so forwarding them as-is and storing responses locally raises privacy concerns.
International flight search example:
jq -n --arg token "$TRIPGENIE_API_KEY" --arg departure "FRA" --arg arrival "HKG" --arg date "2026-03-17" --arg flight_type "0" '{token: $token, departure: $departure, arrival: $arrival, date: $date, flight_type: $flight_type,query: $query}' | curl -s -X POST https://tripgenie-openclaw-prod.trip.com/openclaw/airline -H "Content-Type: application/json" -d @- > /tmp/tripgenie-flight.md
cat /tmp/tripgenie-flight.md
The trigger phrases and keywords include generic terms like hotel, accommodation, lodging, flight, airline, and ticket. In this skill's context, broad matching can cause over-triggering and unnecessary transmission of user content to the external API, especially for casual discussion rather than booking intent.
Automatically populating locale from the system LANG variable sends environment-derived regional information to the external API without explicit user choice. While low severity, it leaks contextual metadata and may also produce responses based on host settings rather than user preference.
The parameter definition states that flight_type value 1 means domestic China and 0 means international/other, embedding a region-specific categorization in the skill behavior. Without a documented user-facing rationale or opt-in, this may impose a locale-specific assumption on flight search handling.
No suspicious patterns detected.