Back to skill

Security audit

travel with family

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed family-travel planning helper that uses an external travel CLI and booking links, with supply-chain and data-sharing cautions but no evidence of hidden or destructive behavior.

Install only if you are comfortable using the flyai travel CLI and sharing travel-search details with that provider. Prefer a pinned, reviewed, isolated install of @fly-ai/flyai-cli, avoid storing long-lived API keys unless needed, and treat booking links, prices, child-ticket rules, and refund terms as information to verify on the actual booking page before purchase.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:74
Finding

Unpinned Third-Party CLI Installed Globally

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 74–78
Additional Locations: SKILL.md, line 34; README.md, lines 3, 11–13, and 18–21
Vulnerability Type: Supply-chain exposure through an unpinned globally installed dependency
Risk Level: Medium

Vulnerable Code Snippet

markdown
## 安装 CLI(必须)

```bash
npm i -g @fly-ai/flyai-cli
text

The same installation pattern also appears in `README.md`:

```markdown
- Node.js 环境
- `npm i -g @fly-ai/flyai-cli`
- 可选:`flyai config set FLYAI_API_KEY "your-key"`

Technical Analysis

The Skill requires installation of the latest available version of @fly-ai/flyai-cli without specifying an exact version, lockfile, integrity hash, trusted package provenance, or reviewed source revision. Because the CLI implementation is not included in this repository, its behavior cannot be verified through this static audit.

Using npm i -g increases the exposure:

  • npm may execute package lifecycle scripts during installation.
  • The package executes with the privileges of the user running npm.
  • Its executable is placed on the global command path.
  • Future calls to flyai trust code outside the audited project.
  • An unpinned installation can resolve to a different package version on each installation.

This is a supply-chain trust issue rather than evidence that the current package is malicious. Exploitation would require compromise of the package, its maintainer or publishing credentials, the package registry path, or a future release.

Attack Path

  1. An attacker compromises the npm package, a maintainer account, or the package publication pipeline.
  2. The attacker publishes a malicious version under the expected package name.
  3. A user or Agent follows the Skill's mandatory unpinned command:
    bash
    npm i -g @fly-ai/flyai-cli
    
  4. npm resolves and installs the attacker-controlled release.
  5. Malicious lifecycle code may execute during installation, or malicious behavior may ...[truncated 994 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin the dependency to an exact reviewed version:

    bash
    npm install --global @fly-ai/flyai-cli@X.Y.Z
    
  2. Document the expected package publisher, official registry, source repository, and package integrity hash.

  3. Prefer a project-local dependency with a committed lockfile instead of a global installation:

    bash
    npm install --save-exact @fly-ai/flyai-cli@X.Y.Z
    
  4. Invoke the locally pinned binary through a controlled project script rather than relying on a mutable executable from the global command path.

  5. Review the package's source, dependency tree, and lifecycle scripts before approving upgrades.

  6. If compatible with the package, install with lifecycle scripts disabled:

    bash
    npm install --ignore-scripts --save-exact @fly-ai/flyai-cli@X.Y.Z
    
  7. Run the CLI with least privilege in an isolated environment, exposing only the files, credentials, and network destinations required for travel searches.

  8. Avoid storing API keys in plaintext configuration when possible. Use a scoped secret manager or short-lived environment injection, and ensure secrets are not included in logs or command output.

  9. Establish a controlled upgrade process in which new versions are reviewed, integrity-verified, and tested before the pinned version is changed.

Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The skill description is written as an instruction-facing README in Chinese and does not indicate that users may choose another language or that the skill is restricted to a Chinese-speaking or China-specific audience. Under the language/locale policy, mandating a specific language without opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger patterns are broad enough to match generic family or weekend travel phrasing, which can cause the skill to activate when the user did not actually ask for booking-oriented family travel assistance. In this skill, over-triggering is more concerning because activation then pushes the agent toward external travel searches and booking-link output by default, increasing the chance of irrelevant commercial actions or user-confusing recommendations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Line L097 instructs that the agent reply to users according to the main SKILL.md requirement for a fixed output format, and the entire file is written as prescriptive Chinese guidance for user-visible responses. This creates a natural-language locale constraint with no indication that users may choose another language, which matches the policy’s language/locale violation criterion.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The document is written as a normative output specification in Chinese and frames the required response style around Chinese-language headings and phrasing. Although line 20 mentions English users as an exception, the default instruction set still imposes a specific language/locale style rather than clearly offering user choice or opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The entire skill guidance is written as a Chinese-only operating instruction, including user-facing display requirements, with no indication that the user can choose another language or that the skill is restricted to a Chinese-locale context. This creates a natural-language locale policy concern because it implicitly enforces a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Line L11 states that the --category value must exactly match Chinese enumerations, which imposes a specific language requirement. The file does not provide an opt-in, alternative locale, or justification that this is a region-specific compliance constraint, so it appears to violate the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The file specifies a Chinese default label '[点击预订]' for booking links, while the skill also explicitly supports English-language queries. This creates a locale/language preference in user-visible output without stating that the user can choose or that output should follow the user's language.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.