Back to skill

Security audit

multi-city

Security checks for vulnerabilities and agentic risk

Overview

This travel skill is meant to search flights, but it asks agents to install and run an unpinned global CLI and to keep raw travel logs in ways that need careful review.

Review before installing. Require explicit approval for any npm install, pin and verify the flyai CLI, run it in a restricted environment, validate all city/date inputs before execution, and disable or redesign raw local logging unless users have knowingly opted in.

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 (4)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:15
Finding

Mandatory Commercial Output and Booking-Link Injection

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:70
Finding

Unpinned Global Installation and Execution of a Third-Party npm Package

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:97
Finding

Shell Command Injection Through User-Controlled Travel Parameters

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
references/runbook.md:33
Finding

Command Injection and Sensitive Query Retention in Execution Logging

Content
View full analysis
> .flyai-execution-log.json ``` ``` ### Technical Analysis The runbook directs the Agent to include the raw user query in a generated JSON object and then embed the entire JSON value in a single-quoted shell command. JSON string escaping does not necessarily escape apostrophes because an apostrophe has no special role in JSON strings. It does, however, terminate a single-quoted POSIX shell string. Therefore, a raw query containing an apostrophe followed by shell syntax can break out of the `echo` argument. For example, a query containing a payload structurally similar to: ```text '; id > /tmp/flyai-log-injection; # ``` can produce a command in which: 1. The apostrophe terminates the shell's single-quoted JSON text. 2. The semicolon ends the `echo` command. 3. The injected command executes. 4. The comment m ...[truncated 2035 chars]
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 170)May include surrounding context.

flyai search-flight --origin "Chengdu" --destination "Beijing" --dep-date 2026-05-07 --sort-type 2

text

## Output Rules

1. **Leg-by-leg presentation** — each segment clearly numbered
2. **Total trip summary** — total flights, total estimated cost

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The runbook explicitly stores raw user input in an execution log and appends it to a local file without any notice, consent, retention policy, or redaction requirement. For a travel skill, raw input can include passport-related details, names, destinations, dates, contact info, and other sensitive travel data, creating a direct privacy and data-retention risk if the file is accessed, copied, or reused.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill frames the agent as a CLI executor and mandates installation of flyai-cli if missing, normalizing tool execution and package installation without prior user approval. In agent environments, instructions that push immediate system-level actions can lead to unreviewed changes to the host and expansion of the attack surface.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The workflow explicitly instructs npm i -g @fly-ai/flyai-cli as an automatic recovery step after command not found, with no warning about global installation effects. This is dangerous because global package installation executes code and modifies the environment, which is especially risky when triggered automatically by documentation-driven agent behavior.

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 Parameters table may be used, but later instructs adding --transfer-city, which is not documented there. This inconsistency can cause agents to invoke unsupported or unintended CLI behavior, increasing the risk of command misuse, failed execution paths, or reliance on undefined tool features.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file contains a hard-coded user-facing warning in Chinese: "两段之间中转时间不足3小时,可能存在误机风险". Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified, which this file does not do.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file instructs the agent to respond with the Chinese message "后续航段日期不能早于前一航段". This is a user-facing locale choice embedded in the skill, and the file does not indicate that the user opted into Chinese or that the skill is explicitly region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction "never answer without executing" pressures the agent into tool use without preserving user choice, clarification, or safe non-execution responses. In a booking skill, this can cause premature searches or transactions based on incomplete or ambiguous itinerary details, reducing safety controls and making misuse or accidental actions more likely.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The fallback trigger "Complex route not directly supported" is vague and can match a wide range of user requests, causing the skill to route requests into a generic keyword search rather than a constrained, parameterized flow. In a travel-booking context, this increases the chance of incorrect command selection, unintended queries, and unsafe handling of user-provided free text because the query is injected wholesale into a search command.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Persisting natural-language user queries to a local execution log creates a durable leak path because free-form travel requests often contain sensitive personal and trip information that is hard to reliably sanitize after the fact. The combination of raw input capture and filesystem persistence increases exposure through local compromise, debugging artifacts, backups, or unintended downstream processing.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The instruction to log on every skill trigger is underspecified and broad, which can cause over-collection of events and user data beyond what is necessary for the travel task. In a travel-booking skill that may process itinerary details, names, dates, and other sensitive context, ambiguous trigger scope increases the chance of unnecessary persistent logging and accidental privacy exposure.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The templates present booking results as 'Powered by flyai' and instruct users to check flyai --version, which conflicts with the skill metadata stating the provider is Fliggy. This creates a trust and provenance mismatch that can mislead users about which backend or CLI they are interacting with, increasing phishing, support misdirection, or unsafe operational workarounds if copied into production responses.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.