Back to skill

Security audit

explore-france

Security checks for vulnerabilities and agentic risk

Overview

This France flight-search skill has a coherent travel purpose, but it asks the agent to globally install and run an unpinned third-party CLI automatically and to execute shell-style commands built from user inputs.

Review carefully before installing. Only use this skill in an environment where global npm installation and execution of the FlyAI CLI are acceptable, and prefer requiring manual approval, version pinning, URL validation, and strict input validation before any command runs.

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 Vendor-Controlled Output and Commercial Link 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. ``` From `SKILL.md:126-141`: ```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.** ## Output Rules 1. **Conclusion first** — lead with best option 2. **France tip — Schengen visa required; Paris CDG is main hub** 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 ``` From `references/templates.md:30-46`: ```markdown ## Output Template ```markdown ## Flight Search Results | # | Airline | Route | Departure | Duration | Price | | |---|---------|-------|-----------|----------|-------|-| | 1 | {airlineName} | {origin} -> {destination} | {depTime} | {duration} | Y{price} | [Book]({{detail ...[truncated 2243 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:67
Finding

Unpinned Global Installation of a Mutable 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 ``` ``` From `references/fallbacks.md:3-9`: ```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/ ``` From `references/fallbacks.md:19-23`: ```markdown ## F-2: CLI not installed ```bash npm i -g @fly-ai/flyai-cli ``` ``` ### Technical Analysis The Skill requires automatic global installation of `@fly-ai/flyai-cli` without: - Pinning an audited version. - Verifying a package integrity hash or signature. - Using a lockfile. - Validating registry provenance. - Disabling npm lifecycle scripts. - Isolating the package in a sandbox. - Requesting informed user approval. An unversioned npm installation resolves whichever release the configured registry currently considers appropriate. Consequently, the code executed at installation and runtime can change after the Skill itself has been reviewed. npm packages may execute lifecycle scripts during installation, and a global installation makes the resulting executable available beyond the current project. This creates a supply-chain trust boundary in which control over the package, publisher account, dependency graph, DNS, registry configuration, or registry infrastructure can result in attacker-controlled code being installed. ### Attack Path 1. The FlyAI CLI is absent from the host or is deliberately removed from `PATH`. 2. A user activates the Skill with a matc ...[truncated 1374 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:88
Finding

Shell Command Injection Through Textual Interpolation of User-Controlled Parameters

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill instructs the agent to automatically install a global npm package if the CLI is missing, which is a system-modifying action performed without user confirmation. This is dangerous because it can alter the host environment, introduce supply-chain risk from the package registry, and violate least-privilege expectations for a travel lookup task.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The fallback path concretely executes npm i -g @fly-ai/flyai-cli, a privileged global install, without any user-facing warning or consent. In practice this turns a benign information request into code acquisition and execution from an external registry, which is a substantial supply-chain and host integrity risk.

Content

No source excerpt is available for this finding.

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. **France tip — Schengen visa required; Paris CDG is main hub**

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest advertises broad travel capabilities such as hotels, trains, attraction tickets, visa info, insurance, and car rental, but the documented implementation only provides flight-search CLI flows. This mismatch can mislead an agent into invoking the skill for unsupported tasks, increasing the chance of hallucinated answers or unsafe fallback behavior outside the verified command surface.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly says only listed flags exist and that the agent must never invent parameters, yet a later playbook uses undocumented --journey-type. This internal contradiction weakens guardrails and can normalize undocumented command usage, making it easier for an agent to guess unsupported flags or execute unintended CLI behavior.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Using a broad trigger like "discover" can cause the skill to activate on unrelated user requests. In an execution-oriented skill that may run commands or attempt installations, accidental activation materially increases the attack surface and the chance of unintended system actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger terms in this playbook include very generic words such as "cheap," "budget," "fast," and "quick," which can overlap with ordinary conversation and cause unintended playbook activation. In a transactional travel-booking skill, misrouting a user into a booking workflow can lead to incorrect searches, confusion, or actions being taken on the wrong intent.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The fallback condition "0 results from above playbooks" is underspecified and may be interpreted inconsistently by the agent, causing the broad-search path to trigger unexpectedly. Because the fallback issues an additional keyword search, ambiguous activation can expand scope beyond the user's precise request and produce unintended or less controlled search behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The template hard-codes Chinese yuan formatting ('Y{price}') and instructs the agent to always present prices in CNY without checking the user's locale or preferred currency. In a travel-booking context, this can mislead users about actual costs, create pricing confusion, and increase the chance of mistaken purchases, especially for international travelers expecting local currency or explicit conversion.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The manifest positions the skill as France travel, including Paris, Nice, and Lyon, yet the only concrete usage example searches flights from Beijing to Shanghai. This indicates the implementation is a generic flight-search wrapper rather than a France-focused capability as described.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The file embeds English and Chinese trigger phrases, but it does not explain whether language selection is user-driven or whether the skill is intended for a specific bilingual audience. This can create a language-policy issue because supported locales are implicitly fixed rather than explicitly offered or justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The overview text explicitly scopes the skill to France-specific travel content ('Explore France — Paris Nice Flights, France Travel Guide'). This is a locale-specific constraint presented without any indication that users can choose another language or region, which can violate the policy against forcing a locale without opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.