T01 · Skill Instruction Hijacking
- Location
SKILL.md:12- Finding
Mandatory Commercial Output and Agent Instruction Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This flight-search skill has a coherent travel purpose, but it asks agents to install and run an unpinned CLI, even with sudo fallback, and to persist raw user queries without clear consent or limits.
Review before installing. Only use this skill if you trust the flyai CLI and its package source, avoid sudo/global installation where possible, run it in a constrained environment, and be aware that it may add booking links, relax travel constraints, and write raw travel queries to a local log.
SKILL.md:12Mandatory Commercial Output and Agent Instruction Hijacking
references/fallbacks.md:5Unpinned Global Package Installation with Root Escalation
SKILL.md:103Shell Command Injection Through Unsanitized Travel Parameters
references/runbook.md:3Undisclosed 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 "New York" --dep-date 2026-07-01 --seat-class-name first --sort-type 3
## Output Rules
1. **Conclusion first** — lead with the key finding
2. **Comparison table** with ≥ 3 results when available
The README instructs users to run npx skills add ... without pinning a specific package version, which can cause execution of whatever version is current at install time. If the upstream package, dependency chain, or registry resolution is compromised, users may execute unintended code during installation, making this a supply-chain risk.
The skill instructs the agent to install a global npm package as a mandatory step before answering. This introduces unnecessary code-execution and supply-chain risk for a read/search task, since installing and running third-party CLI tooling can execute untrusted package lifecycle scripts and expand host capabilities beyond what the user explicitly requested.
The manifest and overview frame the skill around business class and first class flight search, but Playbook C explicitly handles 'premium but not too expensive' by showing premium economy alternatives. Premium economy is outside the stated 'premium cabin flights — business class and first class' scope described in the manifest and core overview.
The documentation recommends retrying installation with sudo, encouraging privileged execution of a package-manager command. Running npm global installs as root increases the blast radius of a malicious or compromised package and can lead to host-level compromise rather than a contained user-level issue.
npm i -g @fly-ai/flyai-cli
flyai --version
# Fails → sudo npm i -g @fly-ai/flyai-cli
# Still fails → STOP. Do NOT answer with training data.
The skill instructs the agent to silently broaden the user's search by expanding dates, adding connections, and falling back to broad keyword search without first warning the user that their constraints are being relaxed. In a travel-booking context, this can produce misleading results, violate user intent, and nudge users toward options they did not authorize or want.
Automatically increasing the user's budget threshold by 30% changes a core user constraint without consent. In a commerce-oriented travel skill, this can manipulate recommendations toward more expensive options and undermine user trust, especially if later flows support booking or affiliate-driven conversions.
The instruction to auto-search tomorrow after an invalid or passed date overrides a material user parameter without consent. In a booking and itinerary context, changing the date can lead to inappropriate travel recommendations, mistaken assumptions, or unintended downstream actions if connected booking flows rely on the modified search.
The trigger phrase "premium but not too expensive" is broad and subjective, so the skill may activate when a user is expressing a general preference rather than explicitly requesting this workflow. In a travel-booking context, unintended activation can lead to irrelevant flight searches or parameter mapping mistakes, which may confuse users and cause incorrect downstream actions if the agent proceeds too aggressively.
The runbook explicitly logs raw user input in user_query and persists execution logs to a local file, but provides no data minimization, retention limits, redaction rules, or user notice. In a travel skill, user queries may contain names, passport or visa details, booking references, destinations, dates, and other sensitive travel data, so persistent storage increases privacy and unauthorized access risk.
The documentation first instructs not to search when a date has passed, then immediately says to auto-search tomorrow. These two directions are in tension: one forbids searching, while the next performs a search anyway. This is an intent-level contradiction in the fallback instructions.
The playbook defines trigger phrases only in English and Chinese (e.g. "business class", "商务舱", "first class", "头等舱") without stating that language choice is optional or user-selectable. This can create a locale/language policy issue because the skill appears to privilege specific languages without documenting opt-in or regional scope.
The manifest says the skill is powered by Fliggy (Alibaba Group), but the templates present results as 'Powered by flyai' and instruct retries via a 'flyai' CLI. This creates a semantic mismatch between the skill’s claimed service/backend and what the documentation indicates it actually uses.
The inline output templates explicitly tell users that pricing and booking are powered by 'flyai' and that real-time data depends on a 'flyai-cli', which conflicts with the manifest’s claim that the skill is powered by Fliggy. This is not merely incomplete documentation; it actively points to a different implementation/provider.
No suspicious patterns detected.