T01 · Skill Instruction Hijacking
Error
- Location
- SKILL.md:198
- Finding
- Untrusted Seller Messages Can Hijack LLM Decisions and Trigger Automated Actions## Vulnerability Details **File Location**: `SKILL.md:198-224`; related execution flow in `guides/llm-analyzer.md:15-47` and `guides/auto-bargain.md:137-184` **Vulnerability Type**: Prompt injection through untrusted marketplace content **Risk Level**: High **Relevant source segment, translated into English:** ```text [Product] {itemName} ¥{originalPrice} [Target price] ¥{targetPrice} [Maximum price] ¥{maxPrice} [Current offer] ¥{currentOffer} [Round] {round}/{maxRounds} [Message style] {messageStyle} [Conversation history] {history} [Seller's latest reply] {latestMessage} Analyze the seller's intent and decide the next step: 1. intent: agree/counter/reject/question/other 2. sellerPrice: price mentioned by the seller, if any 3. action: accept/raise/respond/wait/notify/giveup 4. nextMessage: reply to send 5. notifyUser: whether to notify the user 6. reason: reason for the decision Rules: - If the seller agrees or counters at or below the maximum price: accept and notify the user to place the order. - If the counteroffer is above the maximum price: notify the user. - If the seller rejects and rounds remain: raise the offer. - If the seller asks a question: respond naturally and repeat the offer. - Never disclose the maximum price. ``` The related automated execution flow states: ```text 1. Read the state file. 2. Open the chat page and check for new messages. 3. If there is a new seller reply, use the LLM to analyze seller intent. 4. Execute the corresponding action. 5. Update the state file. 6. Send an announcement if the user must be notified. ``` ### Technical Analysis The Skill directly interpolates seller-controlled chat content and conversation history into an LLM decision prompt. It does not establish a clear trust boundary declaring that seller messages are data only, nor does it instruct the model to disregard commands embedded in those messages. The LLM output inc ...[truncated 2517 chars]
- Remediation
- ## Remediation Suggestions 1. Mark all product-page content, seller messages, and conversation history as untrusted data that must never be interpreted as instructions. 2. Place untrusted content inside strongly delimited or structured fields and add an explicit instruction to ignore commands, policies, tool requests, or role changes contained in those fields. 3. Use a deterministic parser and validator after LLM generation. Permit only a fixed action allowlist and reject unknown fields or malformed JSON. 4. Independently enforce all price constraints outside the LLM: - Offers must be numeric. - Offers must not decrease unexpectedly. - Offers must remain within the user-approved range. - The maximum price must never appear in seller-facing text. 5. Scan generated messages for confidential values and sensitive state before sending them. 6. Require user confirmation whenever output is anomalous, references system instructions, requests new tools, changes negotiation scope, or approaches the maximum price. 7. Restrict scheduled runs to the minimum browser operations required for reading the specific conversation and drafting or sending an approved message. 8. Record rejected injection attempts and notify the user rather than responding to them automatically.
