Back to skill

Security audit

Cabin Flights

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent flight-booking integration, but it needs review because it can send passenger details to a third-party API and instruct an agent to make an irreversible USDC payment without a clear final confirmation step.

Install only if you are comfortable with Cabin receiving passenger booking details. Require the agent to ask for explicit approval before sending passenger data and before any payment, and prefer sharing the hosted checkout URL. Do not allow unattended wallet transfers; verify the Base network, USDC token, full recipient address, exact amount, booking ID, and fees for every transaction.

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:59
Finding

Insufficient authorization safeguards for passenger PII submission and irreversible USDC payment

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 59–101
Vulnerability Type: Sensitive-data transmission and unsafe cryptocurrency transaction authorization
Risk Level: High

Vulnerable Code

bash
curl -X POST https://api.cabin.team/v1/book \
  -H "Content-Type: application/json" \
  -d '{
    "offer_id": "offer_1",
    "search_id": "abc123",
    "passengers": [{
      "type": "adult",
      "given_name": "John",
      "family_name": "Doe",
      "email": "john@example.com",
      "born_on": "1990-01-15",
      "gender": "m"
    }]
  }'
bash
# Check USDC balance on Base
node src/balance.js base --json

# Send USDC to deposit address
node src/send.js base USDC <deposit_address> <amount_usdc> --yes --json

Technical Analysis

The booking workflow transmits passengers' names, email addresses, dates of birth, and gender to https://api.cabin.team. This transmission is directly related to the declared flight-booking functionality and uses HTTPS, so it is not evidence of concealed or unrelated data exfiltration. However, the Skill does not require an explicit disclosure and consent checkpoint immediately before transmitting the information, nor does it provide guidance to prevent passenger data from being unnecessarily retained or logged.

The payment workflow presents a greater risk. It instructs an agent with wallet capabilities to send USDC to a deposit address returned by the remote booking API while supplying the --yes option. This option suppresses an interactive confirmation step for an irreversible blockchain transaction. The instructions do not require the agent to present the exact recipient address, token contract, network, amount, and associated booking identifier to the user for transaction-specific approval.

Consequently, a compromised or erroneous API response, address substitution, stale booking, incorrect amount, or agent misunderstan ...[truncated 1825 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require explicit, informed user consent immediately before transmitting passenger PII. Identify the destination service and enumerate the data fields that will be submitted.
  2. Collect and transmit only information required by the selected airline or booking provider. Do not retain passenger PII after the booking workflow unless the user explicitly requests it and an appropriate retention policy exists.
  3. Warn agents not to include passenger PII in persistent memory, telemetry, shell history, diagnostic output, or general-purpose logs. Redact sensitive fields from errors.
  4. Remove --yes from the wallet command so that payment cannot silently bypass confirmation.
  5. Require transaction-specific user approval immediately before every transfer. Display the full recipient address, Base network, verified USDC contract address, exact amount, estimated gas fee, and booking identifier.
  6. Treat the API-provided address and amount as untrusted input. Validate the Ethereum address format, enforce the Base network and expected USDC token contract, reject zero or abnormal amounts, and apply reasonable spending limits.
  7. Use a trusted secondary confirmation channel or signed payment request to bind the deposit address, amount, booking ID, and expiration time together.
  8. Reconfirm expired or stale bookings before payment and reject transactions when the booking state or quoted amount has changed.
  9. Default wallet integrations to least privilege, including per-transaction approval, narrowly scoped spending limits, and no access to unrelated tokens or accounts.
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 (13)

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 19)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 19)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 59)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 22)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 111)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 118)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 124)May include surrounding context.

Search

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "BKK",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README provides a workflow that collects passenger PII and initiates an irreversible USDC payment, but it does not warn users or downstream agent developers that sensitive personal data is being transmitted to a third-party API and that payment on-chain cannot be reversed. In an agent-skill context, omission of these warnings is risky because an autonomous agent may proceed with booking and payment without explicit user confirmation or informed consent.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The booking example sends passenger PII, including name, email, date of birth, and gender, to an external API, but the README does not provide privacy, consent, retention, or data-handling warnings. In an AI-agent setting, this is more dangerous because the agent may automatically transmit regulated personal travel data to a third party without explicit user approval.

Content

Scanner excerpt · README.md (reported line 34)May include surrounding context.

Book

bash
curl -X POST https://api.cabin.team/v1/book \
  -H "Content-Type: application/json" \
  -d '{
    "offer_id": "offer_1",

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 22)May include surrounding context.

When the user wants to find flights:

bash
curl -X POST https://api.cabin.team/v1/search \
  -H "Content-Type: application/json" \
  -d '{
    "from": "HAN",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The booking flow instructs the agent to collect and transmit sensitive passenger personal data, including full name, email, date of birth, and gender, to an external API without any explicit privacy, consent, retention, or data-handling warning. In an agent context, this increases the risk of over-collection or silent transmission of personally identifiable information to a third party without informed user approval.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This booking endpoint sends sensitive passenger data to an external service as part of making a real reservation. While external transmission is functionally necessary, in this context it becomes a true security/privacy issue because the skill does not pair the transmission with explicit consent, privacy notice, or handling safeguards for the PII being submitted.

Content

Scanner excerpt · SKILL.md (reported line 61)May include surrounding context.

When the user wants to book:

bash
curl -X POST https://api.cabin.team/v1/book \
  -H "Content-Type: application/json" \
  -d '{
    "offer_id": "offer_1",

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The payment flow directs users or wallet-capable agents to transfer USDC on-chain using a deposit address, but does not warn that blockchain transfers are effectively irreversible and that sending funds to the wrong address, chain, or amount may permanently lose funds. In an autonomous-agent setting, absence of a confirmation and risk warning materially increases the chance of accidental loss.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.