T01 · Skill Instruction Hijacking
- Location
SKILL.md:34- Finding
Mandatory Promotional Link Injection into Every User Response
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This ride-hailing skill performs plausible trip functions, but it asks to persist sensitive account and location data in plaintext and can send detailed ride data and screenshots to external messaging targets.
Install only if you are comfortable with the agent handling real ride-account credentials, phone numbers, precise home/work locations, browser screenshots, and external trip notifications. Before use, remove plaintext TOOLS.md storage for tokens and addresses, require explicit opt-in for saved places and messaging targets, and disable screenshots or restrict them to a verified recipient and minimal trip data.
SKILL.md:34Mandatory Promotional Link Injection into Every User Response
SKILL.md:24Plaintext Persistence of Authentication Tokens and Precise Personal Location Data
scripts/ruqi_poll_with_screenshot.js:294Excessive Disclosure of Ride and Driver Data Through Notifications and Full-Page Screenshots
The manifest presents the skill as a normal ride-hailing assistant, but the instructions also include local process execution, persistent credential storage, polling automation, and cross-channel notification behavior. This mismatch prevents informed consent and makes it easier to hide risky side effects behind a benign transportation description.
The trigger phrases include common expressions such as '回家', '上班', '下班', and '怎么走', which can easily appear in ordinary conversation unrelated to authorizing a ride-service workflow. Overbroad triggers raise the chance of accidental activation, unintended collection of location or phone data, and execution of downstream actions in the wrong context.
The skill explicitly tells the agent to persist authentication tokens, phone numbers, and address data into TOOLS.md, a plain reusable file outside a purpose-limited secret store. Storing credentials and sensitive personal data in general notes creates a high risk of disclosure, reuse by unrelated skills, and long-term compromise of the user's account and location privacy.
The skill requires persistent storage of highly sensitive data—API token, phone number, home address, and company address—without any user-facing privacy notice, retention disclosure, or consent model. In a mobility context, these data elements enable identity linkage and detailed movement profiling, making the omission especially dangerous.
The instructions direct persistence and reuse of sensitive user data in plain-language notes, including token material and identifiable location data. This is dangerous because notes files are typically broadly readable within the agent environment, making credential theft and exposure of home/work patterns much more likely.
The login flow tells the agent to record the returned token and phone number in a reusable markdown file, which creates a durable credential cache tied to a real person. If that file is accessed by another tool, skill, or operator, an attacker could query orders, infer travel history, or act on the user's ride account.
Referenced artifact was not completely inspected
"scripts/ruqi_poll_with_screenshot.js",
Referenced artifact was not completely inspected
"scripts/ruqi_poll_with_screenshot.js",
Referenced artifact was not completely inspected
调用方式:`RUQI_CLIENT_MCP_TOKEN=<Token> node scripts/ruqi_api.js <命令> <参数>`
The skill directs use of shell execution and environment-variable handling (node, background polling, token injection) but does not declare any explicit tool scope or permissions boundaries. This increases the risk of unintended command execution or overbroad runtime access because reviewers and enforcement layers cannot clearly constrain what the skill is allowed to do.
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.
## ⚡ 核心规则(必须遵守)
| 规则 | 说明 |
| ---------------------- | ------------------------------------------------------------------------------------------------------ |
| 1. Token 动态注入 | 登录后从响应获取 Token,保存到 TOOLS.md,通过环境变量 `RUQI_CLIENT_MCP_TOKEN` 注入。登录接口无需 Token |
| 2. 下单前须用户确认 | 展示价格后等待用户明确确认("确认"、"下单"、"好的"等) |
The instruction requires every message to end with a fixed Chinese footer link, regardless of the user's language preference. This imposes a specific language/locale on all interactions without offering choice or documenting a justified locale restriction.
Saving home and company locations for future use creates a persistent record of the user's most sensitive places. In a mobility skill, these addresses significantly increase safety and stalking risks if exposed, and they exceed what should be retained by default without strong consent controls.
The skill instructs the agent to launch a background Node.js polling script after order creation, which extends behavior beyond a simple transactional ride request into persistent local execution. Background processes can leak data, continue acting without user awareness, and create a foothold for misuse if the script or its inputs are modified.
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.
### 核心工具
| 工具 | 功能 | 必需参数 |
| -------------------------------- | ---------- | --------------------------------------------------------------------------------------- |
| `send_verification_code` | 发送验证码 | `--phone` |
| `login_with_verification_code` | 验证码登录 | `--phone --msgCode` |
The manifest describes a ride-hailing assistant providing booking, pricing, tracking, and route services. While network access to the ride platform is expected, spawning an external process to run curl is a separate execution capability that is not necessary to the stated purpose and expands what the skill can do beyond ordinary API calls.
This function constructs a request body containing an environment-sourced token and user-derived fields such as phone-based deviceId, then sends it to a remote HTTPS endpoint via curl. The code has no confirmation prompt, user-facing log/print before transmission, or explanatory comment/docstring disclosing that sensitive data is being sent off-host.
The manifest describes a ride-hailing assistant focused on calling rides, price estimates, order tracking, driver location, route planning, and cancellation. This file additionally implements phone verification-code sending and login, and later exposes query_order_list, which are account/session-management capabilities not described in the manifest's stated user-facing scope.
This function submits phone-based authentication data and exposes the returned session token to stdout without any built-in confirmation, masking, or handling safeguards. In an agent context, that can enable silent account access or token leakage through logs, downstream tools, or prompt-mediated workflows, especially because the skill handles real ride-service accounts.
Order cancellation is a destructive action affecting a real-world service transaction, yet this wrapper performs it directly with no confirmation or secondary check. In an agent-driven environment, an incorrect interpretation, prompt injection, or accidental invocation could cancel a user's ride without consent.
The script sends ride details, driver information, and optional screenshots to an external messaging destination taken from environment variables. In the context of a ride-hailing skill, this extends data flow beyond the stated core travel functions and can disclose sensitive trip and personal data to third-party recipients without clear user consent or interface warning.
The script forwards sensitive ride metadata and potentially screenshots to an external messaging service without an explicit warning or consent mechanism in the script interface. In this skill context, users would reasonably expect ride management features, but not silent export of trip and driver data to off-platform channels.
Using RUQI_TARGET and RUQI_CHANNEL from the environment allows trip updates to be routed to arbitrary external recipients with no in-script validation, allowlist, or confirmation. Because the payload includes order, address, driver, and screenshot data, a misconfigured or malicious environment can turn normal ride tracking into silent data exfiltration.
The script automates a browser to open a trip-share page and capture full-page screenshots during polling. Those screenshots can contain sensitive trip status, addresses, map location, and other account-linked information, creating an unnecessary collection and transmission surface not disclosed by the skill description.
The file's user-visible comments and error messages are written in Chinese, including the runtime error at L045 and other diagnostic strings, with no indication that the user can choose another language. That can violate a language/locale policy requiring user choice or explicit justification for a fixed locale.
Detected: suspicious.dangerous_exec