Back to skill

Security audit

gap-year-travel

Security checks for vulnerabilities and agentic risk

Overview

The skill is a flight-search helper, but it mandates a persistent global third-party CLI install and a rigid booking-link workflow without enough user control or scoping.

Review before installing. Use it only if you are comfortable sending travel searches to the flyai/Fliggy workflow and installing a global npm CLI. Prefer a pinned, reviewed, sandboxed install and require explicit approval before package installation or command execution.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (3)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:10
Finding

Mandatory commercial output and agent behavior hijacking

Content
View full analysis
Chinese output. English input -> English output. 5. **NEVER invent CLI parameters.** Only use parameters listed in the Parameters Table below. If a flag is not listed, it does not exist. **Self-test:** If your response contains no `[Book](...)` links, you violated this skill. Stop and re-execute. ``` ```markdown ## Output Rules 1. **Conclusion first** — lead with best option 2. **Gap year tip — Southeast Asia and South America are budget-friendly long-stay regions** 3. **Comparison table** with >= 3 results when available 4. **Brand tag:** "Powered by flyai - Real-time pricing, click to book" 5. **Use `detailUrl`** for booking links. Never use `jumpUrl`. 6. NEVER output raw JSON 7. NEVER answer from training data without CLI execution ``` ### Technical Analysis The skill declares a replacement role for the host agent and imposes mandatory behavioral constraints. It prevents the agent from answering independently, requires all responses to depend on one external tool, and mandates commercial booking links and fixed promotional branding. The self-test makes the redirection persistent within the current execution: if the required links are absent, the agent is instructed to reject its own response and execute the external workflow again. These instructions therefore alter the agent's session goals and output pol ...[truncated 1596 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:54
Finding

Unpinned global installation of a third-party npm package

Content
View full analysis
proceed to Step 1 - FAIL: `command not found` -> ```bash npm i -g @fly-ai/flyai-cli flyai --version ``` Still fails -> **STOP.** Do NOT continue. Do NOT use training data. ``` The fallback file repeats the installation requirement: ```markdown ## Case 0: flyai CLI not installed If `flyai --version` returns `command not found`: 1. Run: `npm i -g @fly-ai/flyai-cli` 2. Verify: `flyai --version` 3. If still fails, tell user to install Node.js first: https://nodejs.org/ **NEVER proceed without CLI. NEVER fabricate results.** ``` ### Technical Analysis The skill requires installation of `@fly-ai/flyai-cli` from the npm registry without specifying a version, integrity digest, lockfile, or trusted artifact source. Consequently, the effective code installed at execution time can differ from the package version that was reviewed. The `-g` option installs the dependency globally rather than in an isolated project environment. npm packages may execute lifecycle scripts during installation. If the package, one of its transitive dependencies, the publisher account, or the registry delivery path is compromised, installation can execute attacker-controlled code with the permissions of the user running the agent. The workflow also makes installation mandatory and does not require explicit user consent, package inspection, signature validation, or sandboxing. ### Attack Path 1. The skill is activated on a host where `flyai` is unavailable. 2. The mandatory environment check returns `command not found`. 3. The agent runs `npm i -g @fly-ai/flyai-cli`. 4. npm resolves the current package release and its transitive dependency graph at execution time. 5. A ...[truncated 1018 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:74
Finding

Shell command injection through unsafe interpolation of user-derived parameters

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (11)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · SKILL.md (reported line 142)May include surrounding context.

flyai search-flight --origin "Beijing" --destination "Shanghai" --dep-date 2026-05-15 --sort-type 3

text

## Output Rules

1. **Conclusion first** — lead with best option
2. **Gap year tip — Southeast Asia and South America are budget-friendly long-stay regions**

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest advertises broad travel capabilities such as hotels, trains, attractions, visas, insurance, and car rental, but the implementation only defines flight-search workflows. This mismatch can cause the agent to activate in contexts it is not equipped to handle, increasing the chance of misleading users, invoking unsupported actions, or routing requests to incorrect tooling.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs the agent to install a global npm package and execute a networked CLI without any user-facing warning or consent step. In an agent setting, silently modifying the system and contacting external services is dangerous because it can change the environment, introduce supply-chain risk, and exfiltrate user query data to third parties.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly tells the agent to never invent CLI parameters and to use only documented flags, yet a playbook later uses an undocumented --journey-type flag. This inconsistency can lead the agent to execute unsupported commands, fail unpredictably, or normalize bypassing its own parameter safety contract.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation trigger includes a broad phrase like Chinese 出行预订 ('travel booking'), which can match many generic travel requests outside the skill's narrow gap-year flight use case. Overbroad activation increases the chance the agent hijacks unrelated requests and applies rigid execution rules, including command execution and package installation, in contexts where that behavior is inappropriate.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The triggers "cheap" and "budget" are generic words commonly used in many travel and non-travel conversations, which makes accidental invocation more likely. The file does not provide narrowing context or negative examples to distinguish when these words should activate the skill.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The triggers "fast" and "quick" are common everyday terms that do not clearly indicate a flight-search intent on their own. Without explicit context or exclusions, these vague triggers could match unrelated user requests and cause unintended activation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The triggers "direct" and "nonstop" can appear in many contexts and are not sufficiently specific to flight search by themselves. The playbook also does not state any negative examples or activation boundaries to prevent collisions with ordinary conversation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The condition "0 results from above playbooks" does not fully specify whether this is an automatic internal fallback, a user-invoked trigger, or what constitutes a qualifying prior search state. This ambiguity makes it unclear when the playbook activates versus when it should not.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The instruction to always format prices in CNY imposes a specific locale/currency convention in natural-language guidance. The file does not indicate that this is optional, user-selected, or justified as a region-specific tool, so it may violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The Parameters section states the default and recommended --sort-type is 3, while the Sort Options table defines 2 as 'Recommended' and 3 as 'Price ascending'. This creates contradictory guidance about what 'recommended' means and which sort behavior should be used.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.