Back to skill

Security audit

Roadbook Csv 1.0.0

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent, but it automatically sends detailed itinerary/location data to Cyeam and documents an unsafe shell curl pattern for user-derived CSV content.

Review before installing. Use this only when you are comfortable sending itinerary details to Cyeam-operated services for temporary remote storage. The skill should ask before posting data, avoid printing the API key, and use a structured HTTP request or curl with data passed via stdin rather than interpolating user content into a shell command.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:118
Finding
Shell Command Injection Through User-Controlled CSV Content<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 118–132 **Vulnerability Type**: Shell command injection **Risk Level**: High ### Vulnerable Code ```markdown When the user provides a travel plan, convert it into CSV format and invoke the API: > User: Help me plan a two-day trip. > Assistant: (After checking `CYEAM_API_KEY`, convert the plan into CSV and invoke the API.) curl -X POST "https://cyeam-open-main-d02895c.d2.zuplo.dev/api/roadbook/csv" \ -H "Authorization: Bearer $CYEAM_API_KEY" \ -H "Content-Type: text/plain" \ -d "Hotel,Hotel Street,Accommodation,Day1,Check-in Morning Market,Market Street,Dining,Day2,Breakfast Ceramics Museum,Museum Road,Attraction,Day2,Afternoon visit Barbecue Restaurant,Restaurant Street,Dining,Day2,Dinner" > Assistant: The roadbook has been generated. ``` ### Technical Analysis The Skill instructs the agent to transform arbitrary user-supplied itinerary fields into CSV and place the resulting content directly inside a double-quoted shell argument passed to `curl -d`. Double quotes do not disable all shell interpretation. Command substitutions using `$(...)` or backticks are evaluated inside double-quoted strings before `curl` executes. Embedded quotation marks can also terminate the intended argument and alter the command structure. For example, if a user supplies an itinerary note containing `$(malicious_command)`, and the agent copies it into the documented command template, the shell may execute `malicious_command` locally rather than treating it solely as CSV data. The issue arises because data and shell syntax are combined in a generated command string without a non-shell data boundary. Exploitation is conditional on the agent executing the generated command through a shell, but that is the exact invocation pattern documented by the Skill. ### Attack Path 1. An attacker supplies a travel plan containing shell syntax in a CSV field such as a place name, address, or note. 2. The agent ...[truncated 1176 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not construct or execute shell command strings containing user-derived CSV data. 2. Prefer a structured HTTP client or tool API that accepts the URL, headers, and request body as separate values without invoking a shell. 3. If `curl` must be used, pass the request body over standard input and invoke the executable through an argument-array API: ```text CSV bytes → process standard input Arguments → ["curl", "--fail-with-body", "--data-binary", "@-", ...] Shell → disabled ``` 4. Explicitly state in the Skill that generated CSV must never be interpolated into shell source, including double-quoted shell arguments. 5. Keep the API key in a dedicated authorization-header argument and prevent it from appearing in logs, diagnostics, or generated command text. 6. Validate CSV structure separately for correctness, including the required five-column limit and proper CSV quoting. Validation should be defense in depth and must not replace elimination of shell interpretation. 7. Apply least privilege to the agent runtime, restrict filesystem and outbound-network access, and ensure the API key has only the permissions required to create roadbooks. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs sending user itinerary data, including precise locations and travel plans, to a third-party API, but it does not require an explicit user-facing consent or privacy warning before transmission. This is dangerous because itinerary and lodging data can reveal sensitive movement patterns and personal whereabouts, and the skill also notes the data is stored remotely in Redis for 30 days.

External Transmission

Medium
Category
Data Exfiltration
Content
**认证:** `Authorization: Bearer $CYEAM_API_KEY`

```bash
curl -X POST "https://cyeam-open-main-d02895c.d2.zuplo.dev/api/roadbook/csv" \
  -H "Authorization: Bearer $CYEAM_API_KEY" \
  -H "Content-Type: text/plain" \
  -d "名称,地址,类型,日期,备注"
Confidence
97% confidence
Finding
This skill contains a concrete command that posts user-provided CSV itinerary content, along with an Authorization bearer token, to an external API endpoint. In context, the transmitted data includes travel locations, dates, hotel stays, and notes, making the external transmission privacy-sensitive even if it is the intended product behavior.

External Transmission

Medium
Category
Data Exfiltration
Content
**无需认证**

```bash
curl -s "https://www.cyeam.com/api/roadbook/get?id=bf9186906ec8"
```

**返回:**
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Low
Confidence
87% confidence
Finding
The skill depends on an API key for authenticated third-party requests, but it does not clearly warn the user that a credential will be used to send data off-platform. While the key itself is not directly exposed in the document, undisclosed authenticated outbound requests can surprise users and increase the risk of unintended third-party data sharing or misuse of privileged access.

Static analysis

No suspicious patterns detected.