T01 · Skill Instruction Hijacking
- Location
SKILL.md:11- Finding
Agent Role and Commercial Output Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a plausible travel-search helper, but it asks agents to install an unpinned global CLI, run interpolated shell commands, and persist raw travel queries without clear user control.
Review before installing. Only use this skill in an environment where you are comfortable installing and running the flyai CLI, and require explicit approval before any global npm install or filesystem logging. Do not enter sensitive personal, payment, passport, visa, or account details unless the logging behavior is removed or clearly controlled.
SKILL.md:11Agent Role and Commercial Output Hijacking
SKILL.md:72Automatic Global Installation of an Unpinned npm Package
SKILL.md:95Shell Command Injection Through User-Controlled Travel Parameters
references/runbook.md:7Unsafe Persistent Logging of Raw User Queries and Commands
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
flyai search-flight --origin "Beijing" --destination "Qingdao" --dep-date 2026-08-01 --sort-type 2
## Output Rules
1. **Conclusion first** — lead with best coastal route option
2. **Coastal tip** — suggest best seasons for seaside travel
The skill explicitly instructs the agent to install a global npm package if the CLI is missing, with no requirement for user consent or warning about modifying the system. In an agent setting, automatic package installation expands the trust boundary to the npm supply chain and can execute untrusted install scripts, creating avoidable code-execution and persistence risk.
The prerequisite flow tells the agent to run npm i -g @fly-ai/flyai-cli after a failed version check, again without confirmation or sandboxing guidance. Global installation is especially risky because it alters the host environment and may run arbitrary post-install scripts from the package ecosystem.
The trigger list includes "coastal flight," which is a generic travel phrase that could easily appear in ordinary conversation rather than as an intentional skill invocation. The file does not provide exclusion conditions or negative examples to clarify when this playbook should or should not activate.
The condition "Playbook A/B/C returns 0 results" does not specify whether all three playbooks must be attempted first or whether zero results from any one of them is sufficient. This ambiguity can lead to inconsistent or unintended activation of the fallback behavior.
The runbook explicitly captures user_query as raw input in an internal execution log, which can contain personal data, travel details, contact information, or payment-related text entered by users. For a travel-booking skill, retaining full raw queries is broader than necessary for core functionality and creates unnecessary privacy and data-exposure risk, especially if logs are later accessed, exported, or combined with other telemetry.
The schema records raw user input internally while the runbook provides no user-facing disclosure or warning about that collection. In this context, users may submit sensitive itinerary, identity, or visa-related details, so undisclosed retention undermines transparency and can create compliance and trust issues in addition to the direct privacy risk.
The runbook describes persistent file logging but does not pair that behavior with any warning about retention, storage location, or data handling. Because this is a travel skill that may process multi-service booking details, silent persistence makes the issue more dangerous by enabling long-lived accumulation of sensitive operational and user context.
The template and failure guidance reference a generic 'flyai' CLI and branding instead of the declared Fliggy-powered coastal-flight skill, creating a trust-boundary mismatch between the manifest and runtime instructions. This can mislead the agent or user into invoking the wrong tool, exposing data to an unintended backend or producing results from an unauthorized integration.
The playbook hard-codes English and Chinese trigger phrases but does not indicate that users may choose their preferred language or locale. This can violate language-choice policy when a skill implicitly assumes supported languages without documenting opt-in or alternatives.
The runbook instructs appending execution logs to a local file, creating persistent storage of operational and potentially user-derived data without showing a clear business need for this skill. Persistent local logs increase the attack surface by leaving data on disk where it may be read by other processes, included in backups, or retained indefinitely.
No suspicious patterns detected.