T09 · Insecure Skill Coding Practices
- Location
scripts/apiexe.py:82- Finding
Configurable API Endpoint Permits Plaintext Transmission of Credentials and Passenger Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This expired travel-booking skill is purpose-aligned, but it handles identity data and order changes with weak confirmation and endpoint safeguards.
Prefer the newer version linked by the skill. Only install this if you are comfortable configuring an API key and sending passenger identity and contact details to the travel provider. Before use, ensure the endpoint is an HTTPS vendor URL, avoid broad or ambiguous refund requests, and require the agent to show a final summary before any booking, cancellation, or refund submission.
scripts/apiexe.py:82Configurable API Endpoint Permits Plaintext Transmission of Credentials and Passenger Data
guide/plane.md:49Flight Orders Are Created Without Explicit Final User Confirmation
The declared purpose is travel booking, but the behavior indicates extra CLI/file-processing functionality including shell argument handling and optional file deletion. That mismatch is risky because reviewers and users may approve the skill for booking tasks while hidden or unrelated utility behavior can be abused for local file manipulation or unsafe command execution paths.
The guide instructs collection and display of highly sensitive personal data, including full identity numbers and phone numbers, and even embeds realistic example values, without any privacy notice, minimization guidance, masking requirement, or consent handling. In a travel-booking context this increases the risk of unnecessary exposure of PII in prompts, logs, chat history, screenshots, and downstream tool invocations, which could lead to identity theft or privacy violations.
The skill explicitly instructs the agent to collect contact information and then place a flight order directly without a final confirmation. In a booking context, this can cause unauthorized or accidental transactions, reservation holds, and downstream payment obligations based on incomplete or misunderstood user intent.
This guide enables sensitive operations including passenger creation, order creation, status lookup, and order history access, but it does not require explicit user consent, identity confirmation, or a privacy notice before collecting and transmitting personal data. In a travel-booking context, this increases the risk of unauthorized bookings, exposure of government ID and phone data, and unintended access to historical orders.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
python3 scripts/json_arg_escape.py path/to/payload.json
从文件读取并在输出后删除该文件(用完后不保留):
python3 scripts/json_arg_escape.py --rm path/to/order_arg.json
从 stdin 读取(可粘贴或管道):
python3 scripts/json_arg_escape.py < payload.json
The skill references capabilities that imply file access and networked execution, but it declares no explicit tool scope or permission boundaries. In an agent environment, missing scope declarations can allow the skill to run with broader ambient privileges than users or reviewers expect, increasing the chance of unintended file access, data exposure, or outbound requests.
The top-level trigger list contains broad everyday terms that can activate the skill in contexts that do not actually request travel booking. Unintended activation is dangerous here because the skill can then begin collecting sensitive trip details or invoke external booking flows, creating privacy, confusion, and possible transaction risks.
The refund trigger rules reuse generic phrases like '申请退款' across trains, flights, hotels, and tickets, making it easy for the wrong refund workflow to be selected. In a transactional skill, ambiguity can lead to cancellation of the wrong product, disclosure of order data from the wrong domain, or user coercion into confirming unintended actions.
The hotel.refund method is a high-impact financial action, but its description only says '申请酒店退订' and does not clearly communicate required preconditions, confirmation expectations, or that values must come from prior deduction/order-detail results. In a booking skill that may autonomously guide users through refunds, this ambiguity increases the risk of accidental or improperly constructed refund requests that could cancel reservations or cause financial loss.
This refund endpoint performs an irreversible order-affecting action with direct financial consequences, yet the schema provides no warning about cancellation finality, possible penalties, or the need for explicit user consent. In a travel-booking skill, missing warnings are especially risky because normal user prompts like '退了吧' could lead to unintended cancellations, fees, or disputes if the agent proceeds without strong confirmation.
The passenger-saving API collects highly sensitive personal data including full name, ID number, birth date, nationality, and phone number, but the skill metadata shown provides no user-facing privacy disclosure, consent flow, retention notice, or data-handling explanation. In an agent context, this increases the risk of oversharing sensitive identity data to a third-party service without informed user consent.
The manifest requires passengerName to be in Chinese and pinyinName in a specific uppercase romanization format, which imposes a language/locale constraint in natural-language descriptions. There is no indication that this is optional, user-selected, or explicitly justified as a region-specific requirement.
The hotel order creation endpoint submits traveler identity and contact information, including identity numbers and phone numbers, as part of a booking action without any visible privacy warning or consent checkpoint in the provided skill context. Because this is tied to a transaction flow, users may reveal regulated personal data to the service through the agent with limited awareness of downstream handling.
The cancellation API performs a potentially irreversible action on an existing hotel order, yet the schema does not indicate any confirmation requirement, refund/cancellation-policy warning, or explicit notice of impact. In an agent-driven workflow, ambiguous user phrasing or automation mistakes could trigger unwanted cancellations with financial or travel consequences.
This manifest contains natural-language constraints such as "旅客姓名(中文)", which require Chinese input for passenger names. Under the policy, forcing a specific language or locale without opt-in or justification is a natural-language policy violation.
The manifest defines multiple state-changing and privacy-sensitive operations, including saving passenger PII, creating orders, viewing order history, and cancelling orders, but it does not declare invocation constraints, consent boundaries, or when each action may be used. In an agent setting with broad travel-related triggers, this increases the risk of over-broad tool use, unintended transactions, or retrieval of sensitive data without sufficiently explicit user intent.
This JSON manifest includes a natural-language description stating the deduction call is required before a refund, but it does not clearly define invocation scope, exclusions, or negative cases. As a manifest file, this can create overly broad or unclear triggering behavior for agents deciding when to call the skill.
The field description specifies "旅客姓名(中文)", which imposes a Chinese-language requirement in natural-language documentation. The file does not provide an opt-in, alternative locale handling, or a documented region-specific justification for restricting names to Chinese.
The trigger condition is defined as simply '退订/退款酒店', which is broad enough to activate a state-changing refund workflow without clear scope checks such as confirming the user wants to cancel an existing hotel order. In a booking skill, ambiguous activation increases the chance of the agent initiating refund-related data access or guiding the user into a cancellation flow when the intent was only informational, leading to accidental order changes or privacy exposure.
The refund guidance documents a cancellation workflow and shows fee computation, but it does not require a prominent user-facing warning before submission that the action will change order state and may incur non-refundable fees. In this context, users could confirm a refund flow without understanding financial consequences, making accidental loss or disputes more likely.
The instruction to remember already collected information after failures encourages retaining order and passenger-related data beyond the immediate transaction need. In a travel-booking context, that data can include identifiers and itinerary details, so informal retention without limits increases exposure risk through leakage across sessions, over-collection, or reuse beyond the user's expectation.
The activation text "预订/查询酒店" is a broad natural-language trigger without clear scope, boundaries, or exclusion examples. In a markdown skill guide, this can cause unintended invocation for general travel conversation or casual hotel inquiries rather than explicit use of this booking workflow.
The trigger examples include broad phrases such as '退票' and '我要退票' in a refund workflow involving funds and irreversible actions. In this skill context, overbroad matching can cause the agent to enter a sensitive refund flow from ambiguous conversation, increasing the risk of unintended cancellation attempts, disclosure of order details, or social-engineering-assisted misuse if the agent initiates refund steps without strong contextual validation.
The activation phrase lists broad verbs like '购买/查询/预订' combined with generic travel nouns, but does not define boundaries for when this skill should or should not activate. Without narrower scope or exclusion examples, ordinary conversation about flights could unintentionally trigger the skill.
The skill directs the agent to automatically poll order status every 3 seconds after order submission without separately informing the user that continued background queries will occur. Although limited in scope, this behavior can create unnecessary processing and privacy concerns by continuing to interact with the booking backend on the user's behalf without explicit notice or opt-in.
No suspicious patterns detected.