Back to skill

Security audit

Travel Planner

Security checks for vulnerabilities and agentic risk

Overview

This travel-planning skill does what it says, but users should understand that trip details and an API key are sent to Camino's external service.

Install only if you are comfortable sharing trip waypoints, purposes, constraints, your Camino API key, and any trial-signup email with Camino. Prefer a pinned release or reviewed commit instead of mutable install commands when available, and avoid submitting sensitive home, medical, client, or security-related locations unless necessary.

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:13
Finding
Unpinned Third-Party Installers and Mutable Skill Sources## Vulnerability Details **File Location**: `SKILL.md`, lines 13-23 **Vulnerability Type**: Supply-chain risk from unpinned dependencies and mutable sources **Risk Level**: Medium ### Vulnerable Code ```bash # Install all skills from repo npx skills add https://github.com/barneyjm/camino-skills # Or install specific skills npx skills add https://github.com/barneyjm/camino-skills --skill travel-planner ``` ```bash npx clawhub@latest install travel-planner # or: pnpm dlx clawhub@latest install travel-planner # or: bunx clawhub@latest install travel-planner ``` ### Technical Analysis The documented installation commands execute npm-distributed installer tools and retrieve Skill content without pinning the tools or downloaded content to reviewed, immutable versions. The `@latest` tag is mutable and can resolve to a different package version each time the command is executed. Likewise, the GitHub repository URL does not specify a reviewed commit hash or signed release. Consequently, the code and instructions installed by these commands can change after this artifact has been audited. An attacker who compromises an upstream package, package-publishing account, repository, maintainer account, or mutable release could distribute malicious code or Skill instructions through these otherwise legitimate-looking installation commands. ### Attack Path 1. An attacker compromises the `clawhub` or `skills` package distribution channel, a relevant publisher account, or the referenced GitHub repository. 2. The attacker publishes a malicious package version or modifies the repository content retrieved by the unpinned URL. 3. A user follows the installation instructions in `SKILL.md`. 4. `npx`, `pnpm dlx`, or `bunx` downloads and executes the attacker-controlled installer version, or the installer retrieves attacker-controlled Skill content. 5. The malicious component operates with the permissions and environment available ...[truncated 537 chars]
Remediation
## Remediation Suggestions 1. Replace `@latest` with an exact, reviewed package version. 2. Pin GitHub installation sources to a reviewed commit hash rather than a mutable branch. 3. Publish and verify cryptographic integrity hashes for downloaded artifacts. 4. Prefer signed releases and configure the installer to verify signatures before execution. 5. Use package-manager lockfiles or equivalent integrity metadata where applicable. 6. Review new package and Skill versions before updating documented pins. 7. Run installation in a least-privileged, isolated environment without unnecessary credentials. 8. Avoid executing remotely sourced package installers directly when an independently verifiable download-and-review workflow is available.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Agent Config Directory Access

High
Category
Agent Snooping
Content
**Add your key to Claude Code:**

Add to your `~/.claude/settings.json`:

```json
{
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documents shell-based installation and execution flows but does not declare any explicit tool scope such as allowed-tools or permissions. In an agent environment, this can cause overly broad shell access assumptions and weakens the safety boundary, making accidental command execution or misuse harder to constrain.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
Using `npx skills add https://github.com/barneyjm/camino-skills` without a pinned version or immutable reference allows whatever content is current at install time to be fetched and executed. This creates a supply-chain risk where a compromised upstream package or repository state could deliver different or malicious code to users.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The skill-specific `npx skills add ... --skill travel-planner` command still references an unpinned remote repository. Even if only one skill is requested, the installation path depends on mutable upstream content and exposes users to repository or package compromise.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
`npx clawhub@latest install travel-planner` explicitly tracks the latest published version, which is mutable and can change between runs. If the package publisher account or package supply chain is compromised, users may execute attacker-controlled code during installation.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill is specifically designed to send waypoint coordinates, itinerary structure, and possibly user intent to an external API, but the documentation does not clearly warn users that precise location data will leave the local environment. Because travel itineraries can reveal sensitive habits, lodging, meetings, and movement patterns, the missing privacy notice materially increases exposure.

External Transmission

Medium
Category
Data Exfiltration
Content
**Instant Trial (no signup required):** Get a temporary API key with 25 calls:

```bash
curl -s -X POST -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}' \
  https://api.getcamino.ai/trial/start
```
Confidence
88% confidence
Finding
The trial setup sends the user's email address to an external service to obtain an API key. While functionally expected, it is still external transmission of personal data, and the documentation does not prominently frame the privacy implications or what the service will do with that data.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
curl -s -X POST -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}' \
  https://api.getcamino.ai/trial/start
```

Returns: `{"api_key": "camino-xxx...", "calls_remaining": 25, ...}`
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
],
    "constraints": {"transport": "foot", "time_budget": "4 hours"}
  }' \
  "https://api.getcamino.ai/journey"
```

## Parameters
Confidence
92% confidence
Finding
The documented `curl` example sends detailed waypoint coordinates and travel constraints to `https://api.getcamino.ai/journey`, which is an external transmission of potentially sensitive location and itinerary data. In the context of a travel-planning skill, this is expected functionality, but it still poses privacy and profiling risk if users are not clearly warned.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The script sends the full user-supplied itinerary JSON, including waypoint coordinates and trip details, to an external Camino API without any explicit user-facing disclosure at runtime. In a travel-planning skill, this data can reveal sensitive location patterns and plans, so undisclosed transmission creates a real privacy and data-handling risk even if it is functionally necessary.

External Transmission

Medium
Category
Data Exfiltration
Content
fi

# Make API request
curl -s -X POST \
    -H "X-API-Key: $CAMINO_API_KEY" \
    -H "Content-Type: application/json" \
    -H "X-Client: claude-code-skill" \
Confidence
95% confidence
Finding
This curl invocation performs an outbound POST request to a third-party API and includes raw user input as the request body, which constitutes external transmission of potentially sensitive itinerary data. In the context of a travel planner, coordinates, destinations, and time constraints may expose user movement or future travel plans, so the transmission is security-relevant and not merely incidental.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Content-Type: application/json" \
    -H "X-Client: claude-code-skill" \
    -d "$INPUT" \
    "https://api.getcamino.ai/journey" | jq .
Confidence
94% confidence
Finding
The hardcoded remote endpoint confirms that the skill sends user trip data to an external domain under the vendor's control. While HTTPS is used, the main issue is that sensitive travel data leaves the local environment and is entrusted to a third party, which increases privacy and compliance risk if users are not clearly informed.