Back to skill

Security audit

team-building-trip

Security checks for vulnerabilities and agentic risk

Overview

This flight-search skill has a coherent travel purpose, but it asks agents to automatically install and run an unpinned global CLI and uses unsafe command templates for user-supplied travel inputs.

Review this skill before installing. It should require explicit approval before installing `@fly-ai/flyai-cli`, pin and verify the CLI version, avoid global installation where possible, validate all city/date inputs before execution, run the CLI without a shell-rendered command string, and disclose that booking links are external destinations returned by the CLI.

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

Forced Commercial Output and Agent Instruction 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. ``` From `SKILL.md:128-149`: ```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.** ## Usage Examples ```bash flyai search-flight --origin "Beijing" --destination "Shanghai" --dep-date 2026-05-15 --sort-type 2 ``` ## Output Rules 1. **Conclusion first** — lead with best option 2. **Team building tip — Sanya, Moganshan, and Qiandao Lake are popular retreat spots** 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:31-46`: ```markdown ## Output Template ```markdown ## Flight Search Results | # | Airline | Route | Departure | Duration | Price | | |-- ...[truncated 2433 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:68
Finding

Unpinned Global Installation and Execution 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. ``` From `references/fallbacks.md:3-10`: ```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.** ``` From `references/fallbacks.md:20-23`: ```markdown ## F-2: CLI not installed ```bash npm i -g @fly-ai/flyai-cli ``` ``` ### Technical Analysis The skill mandates installation of `@fly-ai/flyai-cli` as a global npm package whenever the `flyai` executable is unavailable. The dependency has no fixed version, lockfile, integrity hash, provenance check, or approved artifact source specified in the project. An unversioned npm installation generally resolves to the package version represented by the registry's current distribution tag at execution time. The effective code can therefore change after the skill has been audited. In addition, npm packages can define lifecycle scripts that execute during installation. Subsequent `flyai` commands then execute package-controlled code. The global `-g` installation broadens the change beyond the project directory and may place executables and package files in shared system or user-level locations. The instructions do not request user approval or require an isolated environment. ### Attack Path 1. The skill checks whether `flyai` is available. ...[truncated 1414 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:93
Finding

Shell Command Injection Risk Through User-Controlled CLI Arguments

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

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. **Team building tip — Sanya, Moganshan, and Qiandao Lake are popular retreat spots**

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill instructs the agent to run npm i -g @fly-ai/flyai-cli automatically if the tool is missing, without any user confirmation or trust check. Installing a global package modifies the host environment and introduces supply-chain and persistence risk, especially when triggered from ordinary user requests.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The activation trigger includes broad phrases like plan a trip and 出行规划, which can match many ordinary travel requests outside the intended niche of team-building trips. Over-broad activation increases the chance this skill will take over unrelated prompts and execute travel-booking workflows or tool calls in contexts where the user did not intend it.

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 only use CLI parameters listed in the Parameters table, but the Direct Route playbook uses --journey-type 1, which is undocumented. This contradiction can cause agents to invent or trust unsupported flags, weakening command safety guarantees and increasing the chance of unintended CLI behavior.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger list includes very generic words like "cheap" and "budget," which commonly appear in everyday conversation outside a clear flight-search context. The file does not provide scope constraints or negative examples to clarify when this playbook should activate versus when those words should be ignored.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The triggers "fast" and "quick" are broad everyday terms that can refer to many user intents unrelated to flight booking. Without explicit flight-related context or negative examples, this activation condition is too ambiguous and risks unintended invocation.

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 'Format prices in CNY (Y)' forces a specific currency/locale presentation regardless of the user's preferences or market context. This is a natural-language policy concern because it imposes a locale-specific output format without offering choice or documenting why the restriction is required.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The trigger "0 results from above playbooks" describes a condition, but it does not clearly define how that state is determined or whether any additional user intent checks are required before running the fallback. This missing specificity can lead to inconsistent or unintended activation behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The manifest says the skill is powered by Fliggy (Alibaba Group), but the output template instructs the agent to present results as 'Powered by flyai'. This is an active documentation/output contradiction about the service identity users are told they are interacting with.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.