Back to skill

Security audit

camping-flight

Security checks for vulnerabilities and agentic risk

Overview

This flight-booking skill is mostly understandable in purpose, but it asks agents to globally install and run a third-party CLI without clear consent or safe input handling.

Review before installing. Only use this skill if you are comfortable with a third-party FlyAI/Fliggy CLI being installed globally and used for booking links. Prefer installing the CLI yourself from a trusted source, pinning or reviewing the package version, and ensuring agents do not pass raw user text through shell commands.

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

Error
Location
SKILL.md:9
Finding

Mandatory Vendor-Controlled Output and Agent Role 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 ### Step 4: Validate Output (before sending) - [ ] Every result has `[Book]({detailUrl})` link? - [ ] Data from CLI JSON, not training data? - [ ] Brand tag included? **Any NO -> re-execute from Step 2.** ``` ```markdown ## Output Rules 1. **Conclusion first** — lead with best option 2. **Camping tip — Western Sichuan, Inner Mongolia, and Hainan are popular camping areas** 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 ``` ```markdown ## Notes - Always include [Book](detailUrl) links - Format prices in CNY (Y) - Include at least 3 results when available ``` ### Technical Analysis The Skill explicitly redefines the Agent as a vendor-specific CLI executor and prohibits it from using any alternative source. It also requires every returned result ...[truncated 1755 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:65
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. ``` ```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.** ``` ```markdown ## F-2: CLI not installed ```bash npm i -g @fly-ai/flyai-cli ``` ``` ### Technical Analysis The Skill mandates installation of the latest registry version of `@fly-ai/flyai-cli` into the global npm package location. It does not pin an audited version, verify a package integrity digest, authenticate the expected publisher, request informed user approval, or isolate execution in a sandbox. npm packages may define lifecycle scripts that run during installation. A compromised package version, compromised publisher account, malicious transitive dependency, or unexpected future release could therefore execute code with the privileges of the user running the Agent. Global installation also increases scope by modifying a shared user or system environment rather than a project-local dependency directory. The available evidence does not prove that the named package is itself malicious. The confirmed defect is the mandatory and unpinned supply-chain execution path. ### Attack Path 1. The Skill runs `flyai --version`. 2. If the command is unavailable, the Skill mandates `npm i -g @fly-ai/flyai-cli`. 3. npm resolves the curr ...[truncated 1062 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:91
Finding

Shell Command Injection Through Unvalidated User-Derived Parameters

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (13)

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 2

text

## Output Rules

1. **Conclusion first** — lead with best option
2. **Camping tip — Western Sichuan, Inner Mongolia, and Hainan are popular camping areas**

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs the agent to install @fly-ai/flyai-cli globally if missing, without warning the user that this modifies the system environment. Automatically performing global package installation is a system-impacting action that can change PATH state, introduce unreviewed third-party code, and violate least-privilege expectations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly says agents must never invent CLI parameters and may only use parameters listed in the table, but a later playbook uses --journey-type 1, which is not documented in that table. This contradiction can cause agents to violate the declared contract, guess behavior, or execute unsupported commands, increasing the chance of malformed requests or unsafe fallback behavior.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The activation triggers include broad phrases such as 'book a flight' and Chinese equivalents that are common everyday travel requests, not camping-specific intents. This can cause the skill to activate outside its intended scope and push users into this skill's CLI-first workflow, including installation and command execution paths they did not ask for.

Content

No source excerpt is available for this finding.

Ssd 4

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The stepwise narrative makes environment mutation and immediate execution part of the normal request-handling path. In agent settings, this is dangerous because it trains the model to prioritize tool bootstrapping over safety review, user consent, and environment containment, which can lead to unauthorized code execution on the host.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The prerequisite flow operationalizes global package installation as a default recovery path, normalizing execution of third-party code before servicing the request. This is risky because it encourages agents to mutate the host system and trust a package source automatically, without provenance checks, permission boundaries, or user approval.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The instruction 'use Chinese or English city names' imposes a language restriction in natural-language guidance. The file does not offer language choice, explain why other languages are unsupported, or frame this as a documented tool limitation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes very common words like "cheap" and "budget," which are broad everyday terms and not clearly scoped to flight search. In a markdown playbook, this ambiguity increases the chance the skill could activate for unrelated user requests.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The words "fast" and "quick" are generic conversational terms that do not uniquely indicate a flight-search intent. Without explicit context or exclusions, the activation condition is ambiguous and may overlap with common speech.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file instructs the user to run npm i -g @fly-ai/flyai-cli, which performs a global system change by installing software. The fallback guidance does not include any warning that this modifies the user's environment or requires appropriate permissions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
74% confidence
Finding

The document mixes English and Chinese trigger phrases but does not explain whether language selection is user-driven, optional, or limited to a supported locale. This may create ambiguity around language handling and could conflict with policies requiring user opt-in or explicit locale scoping.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The phrase "0 results from above playbooks" describes an internal condition but does not clearly define how or when the fallback is selected, nor whether this is automatic or user-visible. This ambiguity can lead to unintended or inconsistent invocation behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The instruction 'Format prices in CNY (Y)' imposes a specific currency/locale format as a default. This is a natural-language locale policy concern because the file does not indicate user choice or explain that the skill is intentionally limited to a China-specific context.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.