Back to skill

Security audit

travel-wallet

Security checks for vulnerabilities and agentic risk

Overview

This flight-search skill is mostly coherent, but it asks agents to run unsafe shell-style commands and automatically install an unpinned global npm package.

Install only if you are comfortable with a skill that may modify the host by globally installing an npm CLI and then use live external booking links. Prefer requiring explicit approval before installation, pinning the CLI version, validating all flight parameters, and running the CLI with least privilege.

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:9
Finding

Mandatory commercial-link and branded-output injection

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. ``` Additional mandatory output instructions include: ```markdown ## Output Rules 1. **Conclusion first** — lead with best option 2. **Wallet tip — set max-price to filter results within your budget** 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 ``` The output template reinforces the same behavior: ```markdown ## Flight Search Results | # | Airline | Route | Departure | Duration | Price | | |---|---------|-------|-----------|----------|-------|-| | 1 | {airlineName} | {origin} -> {destination} | {depTime} | {duration} | Y{price} | [Book]({{detailUrl}}) | Powered by flyai - Real-time pricing, click to book ``` ### Technical Analysis The Skill changes the agent's normal response policy by declaring that the agent is exclusively a CLI executor, prohibiting answer ...[truncated 2039 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:63
Finding

Automatic installation of an unpinned global npm dependency

Content
View full analysis
proceed to Step 1 - FAIL: `command not found` -> ```bash npm i -g @fly-ai/flyai-cli flyai --version ``` ``` The fallback document 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/ ``` ```markdown ## F-2: CLI not installed ```bash npm i -g @fly-ai/flyai-cli ``` ``` ### Technical Analysis The Skill requires installation of `@fly-ai/flyai-cli` without specifying an exact version, lockfile, package integrity hash, trusted registry, or reviewed artifact. The `-g` option installs the package globally instead of isolating it within the Skill's runtime. An npm installation can execute package lifecycle scripts such as `preinstall`, `install`, and `postinstall`. Consequently, the instruction creates a code-execution path before any flight search occurs. The code that will execute can also change after the Skill has been audited because the package version is resolved at installation time. The audited repository does not establish that the current package is malicious. The confirmed security weakness is that the Skill automatically trusts and globally installs an unpinned, externally maintained executable dependency. ### Attack Path 1. The Skill checks whether `flyai` exists by running `flyai --version`. 2. On a system where the command is absent, installation is mandatory. 3. The agent runs `npm i -g @fly-ai/flyai-cli`. 4. npm resolves the package version from the configured re ...[truncated 1238 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:83
Finding

Shell-command injection through user-controlled command-template 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 (12)

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 141)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. **Wallet tip — set max-price to filter results within your budget**

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest advertises broad capabilities such as hotel reservation, train tickets, visa info, and insurance, but the documented implementation only supports flight search through the flyai CLI. This can mislead an agent into invoking the skill for unsupported tasks, increasing the chance of hallucinated answers, unsafe fallback behavior, or incorrect automation in a sensitive travel-booking context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill instructs the agent to automatically run npm i -g @fly-ai/flyai-cli if the CLI is missing, without user confirmation or trust verification. Automatic global package installation is dangerous because it performs system modification and executes third-party install scripts, which can be abused for supply-chain compromise or unauthorized environment changes.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill states that only parameters listed in the table may be used, but later instructs use of an undocumented --journey-type flag. This inconsistency can cause agents to disregard safety constraints around command construction, normalize undocumented flags, and increase the risk of unsafe or invalid CLI invocation patterns.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation triggers are broad and ambiguous, including generic phrases like "budget flight" and even malformed terms like "travel travel," which can cause over-triggering in unrelated contexts. In an agent environment, this expands the skill's execution surface and may lead to unnecessary command execution, incorrect task routing, or interference with other skills.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The line states 'use Chinese or English city names,' which imposes a language constraint in the skill's natural-language guidance. The file does not offer a language choice, explain why only those languages are supported, or justify the restriction as a region-specific requirement.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger set for PB-2 includes very broad terms like "cheap" and "budget", which can match many travel-related user requests without clearly indicating flight search intent. This can cause unintended invocation of the flight-search workflow, leading to irrelevant actions, user confusion, or accidental use of external tooling with user-provided parameters.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger set for PB-3 uses ambiguous single-word terms like "fast" and "quick", which are not specific to flights and may activate this playbook for unrelated requests. In an agent skill that can invoke booking/search tooling, such overbroad activation increases the chance of unintended external actions and incorrect travel recommendations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The template says 'Powered by flyai' even though the skill metadata states it is powered by Fliggy. This creates a source-integrity and trust problem: users may be misled about the service handling pricing and booking, and downstream systems or reviewers may be confused about the actual provider. In a travel-booking context, provider identity matters because users may click booking links and disclose travel or payment-related information based on that branding.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The Parameters Table says --sort-type has default 3 as 'recommended', while the Sort Options table defines value 2 as 'Recommended' and 3 as 'Price ascending'. The prerequisite example also uses --sort-type 2, creating contradictory guidance about what 'recommended' behavior actually is.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file instructs operators to run a global npm install (npm i -g @fly-ai/flyai-cli) as a recovery step without any warning that this changes the host system or that global package installation carries supply-chain and privilege risks. In an agent-skill context, this is dangerous because it normalizes system modification during troubleshooting and could lead users or automation to install unreviewed code on the machine.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The instruction 'Format prices in CNY (Y)' imposes a specific locale/currency format in natural language. The file does not indicate that this skill is China-specific or that users can opt into another locale, so it may violate the language/locale policy requirement.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.