T01 · Skill Instruction Hijacking
- Location
SKILL.md:10- Finding
Mandatory Provider Promotion and Agent Behavior Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real hotel-search integration, but it asks agents to install an unpinned global CLI, build shell commands from user input, and persist raw request logs without clear user control.
Install only if you are comfortable with a third-party travel CLI being installed globally and used as the exclusive data source for these travel results. Use an isolated environment, approve the CLI version yourself, avoid entering sensitive personal or payment details, and disable or remove the local execution log unless you intentionally need it.
SKILL.md:10Mandatory Provider Promotion and Agent Behavior Hijacking
SKILL.md:51Unpinned Global Installation of a Third-Party npm Package
SKILL.md:76Shell Command Injection Through User-Controlled Travel Parameters
references/runbook.md:33Unsafe Persistent Logging of Raw User Input Through a Shell Command
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
flyai search-hotel --dest-name "Shanghai" --hotel-stars 5 --sort rate_desc --check-in-date 2026-06-01 --check-out-date 2026-06-03
## Output Rules
1. **Conclusion first** — lead with the key finding
2. **Comparison table** with ≥ 3 results when available
The skill mandates installing a global npm package (npm i -g @fly-ai/flyai-cli) automatically if the CLI is missing, without requiring explicit user consent or warning about system modification. In an agent context, this can trigger unreviewed code installation from a package registry, expanding the attack surface and enabling supply-chain compromise or unintended changes to the host environment.
The trigger list includes the Chinese phrase "总统套房" alongside English, but the file does not explain that the skill is bilingual, region-specific, or user-selectable by language. This can violate language/locale policy because it embeds a locale-specific activation requirement without explicit opt-in or justification.
The trigger list includes the Chinese phrase "带SPA" but does not state that users may choose their preferred language or that the skill is scoped to Chinese-speaking contexts. Embedding locale-specific trigger phrases without opt-in or justification is a natural-language policy concern.
The runbook explicitly records the user's raw input in an internal execution log, which can capture personal data, credentials, payment details, passport/visa data, or other sensitive travel information. Because the skill operates in a travel-booking context that commonly handles high-sensitivity data, retaining raw queries without clear notice, minimization, or redaction materially increases privacy and data-leak risk.
Taken together, the schema captures raw natural-language user input and the persistence section writes the resulting execution log to disk, creating a concrete data retention and leakage path. In this luxury travel/booking skill, users may submit names, itinerary details, booking references, contact data, passport or visa information, and payment-adjacent details, so compromise or misuse of logs can have significant privacy and fraud consequences.
The runbook directs the agent to append execution data to a local file, creating persistent storage of operational and potentially sensitive request information. Persistent logging to disk without notice, encryption, retention controls, or scoping can expose data to other local processes, later operators, backups, or accidental inclusion in support bundles and repositories.
The templates claim outputs are 'Powered by flyai' and instruct users to use 'flyai-cli', while the skill metadata says the service is powered by Fliggy. This inconsistency can mislead users about the actual backend, create trust and provenance confusion, and cause users to run the wrong tooling or disclose travel queries to an unintended platform.
Line L150 says both 'Use detailUrl for booking links' and 'Never use detailUrl.' This is an internal documentation contradiction that can mislead an agent about whether the required booking URL should be included.