T01 · Skill Instruction Hijacking
- Location
SKILL.md:9- Finding
Mandatory Vendor Workflow Hijacks Agent Behavior and Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This travel skill is purpose-aligned overall, but it requires unpinned global CLI installation, writes hidden raw-query logs, and uses shell-style command templates with user input.
Install only if you are comfortable with a third-party FlyAI CLI being installed and used for travel searches. Require explicit approval before any npm or npx command, prefer a pinned or isolated CLI install, avoid entering sensitive personal or booking details, and disable or delete the hidden .flyai-execution-log.json logging behavior unless you intentionally want local query logs.
SKILL.md:9Mandatory Vendor Workflow Hijacks Agent Behavior and Output
SKILL.md:58Unpinned Global Installation and Execution of Third-Party npm Package
SKILL.md:79User-Controlled City Values Are Interpolated into Shell Command Templates
references/runbook.md:7Raw User Queries Are Persisted Through an Injection-Prone Shell Logging Command
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
flyai search-poi --city-name "Jiaxing" --category "古镇古村"
## 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 or version, which can cause retrieval and execution of whatever package/version is current at install time. This creates a supply-chain risk: a compromised or typosquatted package, or a later malicious update, could be executed in the user's environment during installation.
The skill explicitly instructs the agent to install a global npm package automatically if the CLI is missing, which modifies the host environment without prior user consent or a safety warning. In an agent setting, this can lead to unreviewed code being fetched and executed from the package registry, increasing supply-chain and system-integrity risk.
The Prerequisites section recommends npm i -g @fly-ai/flyai-cli as a default setup step without warning that it performs a global install and changes the system environment. Users or agents may execute it reflexively, exposing the machine to package-install side effects and potential registry compromise.
The workflow mandates automatic installation after a failed environment check, effectively instructing the agent to alter the system before responding. This is dangerous because it couples ordinary query handling to package installation, enabling unintended execution of external code and violating least-privilege expectations for a travel-information skill.
The instruction "Try Chinese/English variants" imposes specific language handling as the prescribed fallback behavior. This is a natural-language locale policy concern because the file does not indicate user choice, opt-in, or a documented region-specific reason for restricting or prioritizing these languages.
The command hard-codes the category value in Chinese ("古镇古村"), which imposes a specific language/locale behavior without any user opt-in or documented justification. This can conflict with language-choice policy when users have not requested Chinese-language operation.
The command includes the hard-coded Chinese keyword "水乡" and the file does not indicate that users can select another language or that the skill is region-specific. That creates a natural-language policy concern by forcing a locale-specific term implicitly.
The command hard-codes the keyword "古村" in Chinese, but the document does not offer language choice or explain that the playbook is intentionally limited to a Chinese-language context. This may violate language/locale policy by imposing a specific locale implicitly.
The runbook explicitly stores the raw user query in an internal execution log, which can capture sensitive travel data such as names, destinations, booking details, passport or visa-related information, and other personal context. Because the document provides no notice, minimization, redaction, or retention controls, this creates a real privacy and data-handling risk if logs are accessed, retained too long, or reused outside the original request flow.
The runbook instructs the agent to append execution logs to a local file, which can persist user-derived data to disk beyond the active session. In a travel-booking skill context, persisted logs may include sensitive itinerary, booking, or identity-related information, increasing exposure through unauthorized file access, backup leakage, multi-tenant environments, or accidental retention.
The README states that the skill wraps a CLI to provide real-time travel data and booking links, which implies network access and external data transmission, but it does not warn users about that behavior. In a skill ecosystem where users may expect local-only assistance, lack of disclosure can undermine informed consent and lead to unintended sharing of queries, itinerary details, or other travel-related data with third-party services.
The activation phrase is a short, generic natural-language term that could plausibly appear in ordinary user requests, but the file does not define boundaries, exclusions, or a narrower invocation context. This creates ambiguity about when the playbook should activate versus when the phrase is merely descriptive.
The trigger is a common descriptive phrase with no surrounding activation constraints, exact-match requirement, or exclusion examples. Without clearer scope, the skill may activate unintentionally on ordinary discussion of travel or geography.
This trigger is expressed as a broad natural-language phrase and the document does not specify context, exclusions, or precise matching behavior. That leaves uncertainty about whether mentioning the phrase in general conversation should invoke the playbook.
No suspicious patterns detected.