Back to skill

Security audit

Flight

Security checks for vulnerabilities and agentic risk

Overview

This flight skill is not clearly malicious, but it asks for broad local travel, contact, finance, project, and profile access and writes sensitive records without a confirmation gate.

Review before installing. This skill is suitable only if you want a persistent local flight assistant that can read and update Clawic travel memory plus shared bookings, contacts, finances, and projects. It should not store passwords, card numbers, passport numbers, or bank details, but it can keep sensitive travel plans, locators, loyalty data, companion details, claims, and card-fee metadata in plain local notes. Back up those files and review writes, especially deletions or shared finance/contact updates.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:17
Finding
Overbroad Cross-Domain Access and Automatic Persistence of Sensitive Travel Data## Vulnerability Details **File Location**: `SKILL.md:17-44`, `memory-template.md:5-37`, `memory-template.md:236-250`, and `passengers.md:88` **Vulnerability Type**: Excessive permissions and violation of least privilege **Risk Level**: Medium ### Complete Code Snippets `SKILL.md:17-35`: ```yaml configPaths: - ~/Clawic/data/flight/ - ~/Clawic/data/bookings/ - ~/Clawic/data/contacts/ - ~/Clawic/data/finances/ - ~/Clawic/data/projects/ - ~/Clawic/profile.yaml - ~/flight/ - ~/clawic/flight/ openclaw: requires: config: - ~/Clawic/data/flight/ - ~/Clawic/data/bookings/ - ~/Clawic/data/contacts/ - ~/Clawic/data/finances/ - ~/Clawic/data/projects/ - ~/Clawic/profile.yaml - ~/flight/ - ~/clawic/flight/ ``` `SKILL.md:38-44`: ```markdown **Data.** At the start of every session, read `~/Clawic/data/flight/config.yaml` (what the user declared) and `~/Clawic/data/flight/memory.md` (what you observed, plus its `## Boxes` index and `## Due` table). Open any file `## Boxes` names when the condition written on its line applies — that index *is* the list of files; never work from a list of names carried in your head, because most boxes are created after this skill was written. Read `~/Clawic/data/bookings/<current year>.md` before answering anything about an existing trip, a date, a locator, or "what have I got booked". If none of it exists, work from defaults and say nothing about it. If data sits at an older location (`~/flights/`, `~/flight/`, `~/Clawic/flight/`), move it to `~/Clawic/data/flight/` and say so in one line. Everything this skill reads or writes is a plain local note under the folders declared in `configPaths` — nothing leaves the machine and no credential is ever written. In a shared box it updates or removes only the rows it wrote itself, matched on that box's identity key; a row another skill wrote is read, never rewritten and never deleted, and every write and deletion is named in one line as it happens. **Write be ...[truncated 9603 chars]
Remediation
## Remediation Suggestions 1. Restrict the declared access scope to `~/Clawic/data/flight/` by default. Grant access to individual booking, contact, finance, or project files only when a specific user request requires it. 2. Replace directory-wide permissions with file-level allowlists wherever the host platform supports them. 3. Require explicit user consent before the first persistent read or write, before storing third-party traveller information, and before accessing shared contacts or finances. 4. Make persistence opt-in rather than mandatory. Provide a session-only mode for flight search and general advice. 5. Validate and canonicalize every path obtained from `## Boxes`. Reject absolute paths, traversal components, symbolic-link escapes, and paths outside a narrow approved root. 6. Do not treat mutable memory as an authorization source. Keep authorization policy in immutable Skill configuration. 7. Minimize retained information. Use aliases or pseudonymous traveller identifiers and avoid storing record locators, ticket numbers, email addresses, or loyalty numbers unless essential. 8. Separate flight records from shared contacts and finances. Exchange only narrowly defined references through an explicit interface. 9. Introduce retention limits, per-record provenance, audit logging, and user-accessible deletion controls. 10. Require confirmation before moving or deleting existing records, even when the Skill believes it originally created them. 11. Encrypt sensitive local records at rest and apply operating-system permissions that prevent unrelated Skills or users from reading them. 12. Add tests proving that flight-search requests cannot read contacts, finances, projects, or unrelated booking rows.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (18)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Content
| "Find me a flight to X" | Origin set from `home_airports`, ±3 days, alternate airports, then total cost per option — never the headline fare | `search.md` |
| "Is this a good price?" | Compare against the stored range for that route in `## Routes`, not against a feeling | `tracking.md` |
| "Should I book now or wait?" | Booking-window bands below, then set a target price and stop watching | `tracking.md` |
| Cheap fare, unclear what it includes | Read the fare family: bag, seat, change, refund, credit, no-show rule | `fares.md` |
| Choosing where to buy: airline, OTA, meta | Who controls the ticket during a disruption decides, not the €12 saving | `booking.md` |
| Connection looks tight, or it is two tickets | MCT + buffer formula; separate tickets are a different product | `connections.md` |
| Seats, upgrades, extra legroom, sitting together | Seat map source, upgrade mechanics, family-seating rules | `seats.md` |
Confidence
85% confidence
Finding
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Description-Behavior Mismatch

Medium
Confidence
84% confidence
Finding
The manifest explicitly excludes accommodation, whole-trip itinerary handling, and car hire, yet the skill is instructed to use a shared bookings file where non-flight bookings live so it can answer questions like "what do I have in October." That behavior goes beyond a flight-only scope into cross-trip itinerary management.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Item | Rule |
|---|---|
| Spare lithium batteries and power banks | Cabin only, never checked. Roughly: under 100 Wh no approval, 100-160 Wh needs airline approval and is limited in number, over 160 Wh refused |
| Devices with batteries installed | Checked is usually allowed but discouraged; must be switched fully off |
| E-cigarettes and vapes | Cabin only, no charging or use on board |
| Smart bags with non-removable batteries | Refused by most carriers |
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly instructs reading local booking records and claims history from disk, which likely contain passenger names, locators, itinerary details, and potentially other sensitive travel data, but gives no user-facing warning, minimization rule, or consent boundary. In a flight-disruption workflow, this creates a real privacy risk because the agent is encouraged to access personal records as a default step and may expose or overuse data beyond what is necessary for the immediate task.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill directs the agent to write claim rows to memory files and save claim letters to disk, while also mentioning bank details and claim amounts, but does not establish safeguards against persisting sensitive personal or financial information. This is dangerous because claims artifacts can accumulate regulated personal data, financial identifiers, travel history, and dispute records in long-lived storage without notice, minimization, or access controls.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The manifest covers flight search, booking, disruption handling, and itinerary-tied document rules, but consular-service registration is a broader travel safety/government-services task. This expands from advising on flight eligibility into external citizen-services workflow not clearly justified by the skill's declared purpose.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## flown/

`~/Clawic/data/flight/flown/<year>.md`, append-only, created with the first flight recorded. This is what makes status questions, requalification maths and "have we flown this route before" answerable without asking.

```markdown
# Flights Flown — 2026
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The instruction to add new travelers to a shared contacts file expands this flight skill from itinerary handling into persistent contact/profile management. That creates a real risk of unauthorized storage or modification of personal data for third parties without explicit user confirmation, and it can affect data outside the skill's core scope.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The file instructs the agent to update local data files containing personal information but provides no requirement to warn the user or obtain confirmation before persisting that data. In a skill that may handle names, nationality, document expiry, assistance needs, and meal constraints, silent writes increase privacy, consent, and data-integrity risk.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
This section instructs the agent to read and update a financial subscriptions file for credit cards, including fees, renewal dates, and benefits, without any warning or confirmation gate. Even though it forbids card numbers, it still directs modification of sensitive financial records, which can corrupt bookkeeping, expose private financial metadata, or cause unauthorized persistent changes.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
This instruction explicitly tells the agent to write loyalty balances, tier progress, and expiry data into persistent user files after merely seeing the data. That creates a state-changing side effect on potentially sensitive personal travel records without requiring user confirmation, creating risks of unwanted persistence, stale or incorrect records, and privacy exposure if the data is misread or written to the wrong place.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly instructs persistent storage of route, price targets, best observed prices, and trip-planning context in memory.md without requiring user consent, disclosure, retention limits, or data-minimization controls. In a travel skill, this can reveal sensitive behavioral patterns such as intended destinations, budgets, and travel timing, creating privacy risk and potentially exposing personal or business travel plans if memory is reused or accessed beyond the immediate task.

Intent-Code Divergence

Low
Confidence
72% confidence
Finding
The data-handling statement says nothing leaves the machine, which implies strictly local-only operation. Later documentation tells the agent to fetch/install other skills from clawic.com on confirmation, creating a contradiction between the local-only claim and the documented behavior.

Missing User Warnings

Low
Confidence
89% confidence
Finding
The skill instructs recording baggage-fee benefit information into a local finance file without any minimization, consent, or sensitivity warning. While not an immediate exploit, it encourages persistent storage of potentially sensitive financial/travel metadata that could be exposed if local notes are synced, shared, or insufficiently protected.

Missing User Warnings

Low
Confidence
93% confidence
Finding
The skill tells the agent to store claim references, baggage incident details, amounts claimed, and deadlines in memory files without warning that these may contain personal travel and claims data. This creates unnecessary privacy risk because such records can reveal itinerary history, dispute activity, and other sensitive context if retained broadly or accessed by others.

Context-Inappropriate Capability

Low
Confidence
82% confidence
Finding
The file tells the skill to read `config.yaml` for `passport_country` in addition to traveller-specific memory. Accessing a broader config source is not clearly justified by the flight skill's stated purpose, which centers on itinerary and traveller data rather than global configuration inspection.

Missing User Warnings

Low
Confidence
81% confidence
Finding
Line L38 directs the user to store fare-rule screenshots and booking change/cancel terms in a local bookings file. In a markdown skill file, this is a user-data-affecting behavior, but there is no warning about sensitivity, privacy, or safe storage of travel records.

Missing User Warnings

Low
Confidence
80% confidence
Finding
Line L96 tells users to write decisive fare-rule details and dates into `~/Clawic/data/bookings/<year>.md` and `## Due`. This is a data-handling instruction affecting user records, but the document provides no warning that these notes may expose sensitive itinerary information if stored insecurely.

Static analysis

No suspicious patterns detected.