T01 · Skill Instruction Hijacking
- Location
SKILL.md:9- Finding
Mandatory Third-Party Output 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 auto-install an unpinned global CLI, build shell commands from user travel input, and persist raw queries in a local log.
Install only if you trust the flyai CLI and are comfortable with a third-party booking service receiving travel searches. Do not allow automatic global npm installation; pin and verify the CLI first, avoid shell-based command construction, and disable or remove the raw-query execution log before use.
SKILL.md:9Mandatory Third-Party Output and Agent Behavior Hijacking
SKILL.md:73Automatic Installation of an Unpinned Global npm Dependency
SKILL.md:92Shell Command Injection Through Unescaped User-Controlled Parameters
references/runbook.md:1Undisclosed Persistent Logging of Raw Queries with Unsafe Shell Serialization
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" --max-price 500 --sort rate_desc --check-in-date 2026-05-01 --check-out-date 2026-05-03
## Output Rules
1. **Conclusion first** — lead with the key finding
2. **Comparison table** with ≥ 3 results when available
The manifest-level description emphasizes a narrowly scoped hotel-finding skill focused on sorting and filtering hotels under budget. However, the README says it 'wraps the flyai-cli to provide real-time travel data with booking links,' which expands the behavior beyond hotel search into generic travel data retrieval and booking facilitation.
The README instructs users to run npx skills add ... without pinning a specific package version, which can cause execution of whatever package version is current at install time. If the upstream package, dependency chain, or registry entry is compromised, users may execute attacker-controlled code during installation.
The Chinese documentation mirrors the same mismatch: the skill is presented as a hotel budget finder, but then claims to provide 'real-time travel data and booking links' through flyai-cli. That broader capability is not reflected in the narrow hotel-focused manifest description.
The Parameters table states --sort is 'Always price_asc' at L053, which directly conflicts with both the Sort Options table listing other supported values and the Playbook B/example commands using rate_desc at L066, L111, and L149. This is an active contradiction in the skill's own instructions about intended behavior, not merely an omission.
The trigger phrase "最便宜的住一晚" is broad enough to match ordinary hotel-shopping requests and can cause this playbook to activate in situations where the user did not explicitly opt into this specific workflow. In a travel-booking skill, unintended activation can steer the agent toward executing a hotel search command automatically, increasing the risk of incorrect bookings, mismatched dates, or user-confusing behavior.
The runbook explicitly records raw user input in user_query and instructs the agent to append execution logs to a local file, creating a clear data-retention and privacy risk. Travel-related queries can contain names, destinations, booking details, dates, and other sensitive personal data, and the file persistence is described as internal and not shown to users, which removes transparency and increases the chance of undisclosed collection.
The schema requires retention of user_query as raw input, which can capture sensitive user-provided travel data and possibly credentials or identifiers pasted by mistake. Storing raw prompts internally is unnecessary for normal operation and expands the attack surface for data leakage, insider access, and unintended reuse.
The runbook instructs appending generated execution logs to .flyai-execution-log.json, which may persist user-derived data, command history, and operational context on the local filesystem. Persistent logs are commonly overlooked and can be exposed through backup systems, shared environments, weak file permissions, or later compromise of the host.
The failure template tells users to run local CLI commands such as flyai --version and retry with flyai {command} ..., which encourages action outside the skill’s stated hotel-finder purpose and could normalize executing shell commands provided by generated output. If {command} is derived from runtime context or user input, this pattern can facilitate unsafe command guidance, social engineering, or accidental execution of harmful commands on a user’s machine.
The fallback command hard-codes the hotel type as "民宿", which imposes a specific language/locale choice in the skill content. The file does not indicate that this language is optional, user-selected, or justified as a region-specific requirement.
The playbook hard-codes English and Chinese trigger phrases, including the Chinese-only trigger on later lines, but does not state whether users may interact in other languages or choose their preferred locale. This can amount to an implicit language policy without user opt-in.
The manifest frames this skill primarily as a budget hotel finder, but the template branding at the output layer presents it as a generic real-time booking surface powered by another platform. While not executable code, this documentation/output behavior broadens the apparent function beyond narrowly finding budget hotels and may mislead users about the skill's actual scoped purpose.
No suspicious patterns detected.