Back to skill

Security audit

FlightClaw

Security checks for vulnerabilities and agentic risk

Overview

FlightClaw appears to be a real flight-search and tracking skill, but it needs review because it claims backup of travel history and uses mutable installs without clear user controls.

Before installing, verify whether R2 backup is actually enabled and how to opt out or delete backed-up travel history. Use an isolated Python environment, review or pin dependencies, and expect flight search details to be sent to Google Flights and tracked routes to be stored locally.

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
setup.sh:4
Finding
Unpinned Third-Party Dependencies Permit Supply-Chain Code Execution## Vulnerability Details **File Location**: `setup.sh`, line 4 **Vulnerability Type**: Unpinned third-party dependencies **Risk Level**: Medium **Complete Code Snippet**: ```bash #!/bin/bash set -e echo "Installing flightclaw dependencies..." pip install flights "mcp[cli]" mkdir -p "$(dirname "$0")/data" echo "Done. flightclaw is ready to use." ``` ### Technical Analysis The setup script installs `flights` and `mcp[cli]` without exact version constraints, a lock file, or cryptographic hashes. Consequently, installation is not reproducible and implicitly trusts whichever package releases and transitive dependencies the package index serves at execution time. Python packages may execute code during installation or later when imported. A compromised package publisher account, malicious replacement release, dependency-confusion condition, or compromised transitive dependency could therefore turn the documented installation process into arbitrary local code execution. The documentation also recommends an unpinned installation command at `SKILL.md:14`: ```bash npx skills add jackculpan/flightclaw ``` Dynamic package retrieval through `npx` adds another mutable supply-chain dependency unless the launcher and retrieved artifact are pinned and verified. ### Attack Path 1. An attacker compromises a referenced package, one of its transitive dependencies, its publisher account, or an applicable package-distribution source. 2. The attacker publishes a malicious release or causes malicious package content to be selected during dependency resolution. 3. A user follows the documented setup process and runs `setup.sh`. 4. `pip install flights "mcp[cli]"` resolves and downloads the mutable dependency release without hash verification. 5. Malicious installation hooks execute immediately, or malicious package code executes when `server.py` or a script imports the dependency. 6. The payload operates with the privileges an ...[truncated 651 chars]
Remediation
## Remediation Suggestions 1. Pin every direct dependency to an exact reviewed version, for example: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 2. Generate and commit a lock file containing all transitive dependencies and SHA-256 hashes using a tool such as `pip-tools`. 3. Install only from explicitly trusted package indexes and disable unintended extra indexes to reduce dependency-confusion exposure. 4. Review new dependency versions before updating pins, and use automated vulnerability and provenance scanning in CI. 5. Run installation in an isolated virtual environment as a non-privileged user; do not recommend `sudo pip install`. 6. Pin and verify any `npx` launcher and downloaded Skill revision rather than relying on mutable names or branches. 7. Consider producing signed release artifacts and documenting checksum or signature verification for manual installation.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The documented capabilities substantially exceed the supplied behavior, including claims around alerts, tracking over time, MCP functionality, and advanced filtering. Security-relevant mismatches are dangerous because users and agents may trust the skill to behave in bounded ways while the actual implementation is incomplete, unreviewed elsewhere, or dependent on unstated components.

Lp3

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding
The skill advertises file read/write behavior but does not declare any explicit tool scope or permission boundary in the manifest. That increases the chance that an agent or user will invoke the skill without understanding its filesystem access, which is especially relevant because it persists tracked flight data locally and mentions remote backup.

Rp1

Medium
Category
MCP Rug Pull
Confidence
79% confidence
Finding
The install instruction uses `npx skills add jackculpan/flightclaw` without pinning a version or immutable reference. This creates a supply-chain risk where later upstream changes could alter what gets installed, including potentially malicious updates, with no integrity guarantee for users following the documentation.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The skill relies on IP-based locale detection for currency without offering user choice or opt-in. While not severe on its own, it can leak or infer location-related information and may surprise privacy-conscious users who expect deterministic, user-selected localization.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill states that tracked flight data persists in `tracked.json` and is backed up via R2, but this remote persistence is not surfaced as a prominent user warning in the main description or install/use flow. Silent off-device storage can expose travel patterns, dates, and route preferences, which are sensitive behavioral data, especially if users do not realize their tracking history is being retained remotely.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The function sends flight search data to an external Google endpoint via `client.post`, but this file provides no confirmation prompt, logging, or comment warning that user-supplied travel search details are transmitted over the network. For code files, outbound network calls that transmit user or system data should have some form of disclosure unless the warning is documented elsewhere or clearly covered by the skill purpose.

Static analysis

No suspicious patterns detected.