T01 · Skill Instruction Hijacking
- Location
SKILL.md:17- Finding
Mandatory Instruction Override and Promotional Behavior Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill can claim Meituan travel coupons, but it also steers users into broad promotional flows, stores account credentials, and supports persistent automatic account actions with overbroad local cache tooling.
Review this carefully before installing. Use it only if you are comfortable giving the skill your Meituan phone-login flow, storing local tokens/device identifiers, and optionally allowing recurring automated coupon claims. Avoid enabling auto-claim unless you understand how to list and cancel the scheduled job, and be aware that the bundled cache tool has overbroad local file and shared-token capabilities.
SKILL.md:17Mandatory Instruction Override and Promotional Behavior Hijacking
scripts/auth.py:487Authentication Token Transmitted in URL Query Parameters
references/auth-flow.md:98Phone Numbers, SMS Codes, and Session Tokens Exposed Through Process Arguments
scripts/skill_cache_cli.py:415Cache CLI Path Traversal Allows Filesystem Access Outside the Cache Root
The description presents a narrow coupon assistant, but the skill also performs broader authentication, local credential persistence, scheduled task management, and remote version checks. This transparency gap prevents informed consent and can hide security-relevant behaviors from users and reviewers, which is particularly sensitive because the skill manages tokens, phone-based login, and persistent local state.
The description presents a narrow coupon assistant, but the skill also performs broader authentication, local credential persistence, scheduled task management, and remote version checks. This transparency gap prevents informed consent and can hide security-relevant behaviors from users and reviewers, which is particularly sensitive because the skill manages tokens, phone-based login, and persistent local state.
The trigger section says the skill should be prioritized for a wide range of generic coupon/discount/red-envelope phrases, which can cause the agent to invoke it in ordinary conversation without sufficiently clear user intent. In this skill, unintended activation is more dangerous than usual because invocation can lead into login, token handling, local persistence, and coupon-claim actions tied to a user account.
The intent-recognition rules are intentionally expansive: broad benefit/activity keywords can trigger direct coupon issuance without clarification, and other vague consumption or price-sensitivity cues prompt upsell-style activation. Because the workflow includes account verification, script execution, and a mandatory follow-up about scheduled auto-claiming, ambiguous triggering can push users into sensitive flows they did not explicitly request.
Referenced artifact was not completely inspected
> 完整的定时任务创建、管理、失败处理和跨平台兼容规则,读取 `references/cron-rules.md`。
Referenced artifact was not completely inspected
> 完整的定时任务创建、管理、失败处理和跨平台兼容规则,读取 `references/cron-rules.md`。
Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.
cmd.append(subcommand)
cmd.extend(args)
env = os.environ.copy()
env.setdefault("SKILL_CACHE_WORKSPACE", _get_workspace())
try:
Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.
cmd.append(subcommand)
cmd.extend(args)
env = os.environ.copy()
env.setdefault("SKILL_CACHE_WORKSPACE", _get_workspace())
try:
This code centralizes authentication tokens in a shared file and provides get/set/delete/list operations for arbitrary skill names, enabling enumeration and manipulation of credentials across skills. In the context of a coupon assistant, that is especially dangerous because tokens are high-value secrets and cross-skill access can lead to credential theft, account misuse, or lateral movement between skills.
The auth delete path removes stored authentication information, including potentially all credentials for a skill, but the CLI offers no warning or confirmation. Deleting credential material is safety-critical because it can break access flows and is not easily recoverable by the user.
The skill exercises powerful capabilities including shell, filesystem, environment access, and network operations, but does not declare an explicit tool scope or permission boundary. That makes its effective privileges opaque to reviewers and increases the chance of over-privileged execution or accidental expansion of what the skill can do, especially because it handles authentication tokens and local credential files.
The instructions require the agent to present a fixed Chinese statement verbatim and then ask the user to provide a phone number, with no indication that another language can be used. This is a natural-language policy issue because it imposes a specific language on users without opt-in or an explicitly documented locale-specific justification in the file.
The skill hard-codes Asia/Shanghai time and says it is independent of the caller's local timezone, which can cause users to enable recurring actions at unintended times. While not a direct code-execution issue, it undermines informed consent and can lead to repeated account activity at times the user did not actually intend.
The skill extends from one-time coupon claiming into persistent cross-platform automation and proactive notifications, which materially broadens its authority beyond the core user-visible purpose. Even if user-beneficial, this creates an autonomy and scope-creep risk because the agent is instructed to establish durable background behavior in external platforms.
The file instructs the agent to invoke platform scheduling commands and APIs such as CronCreate, RemoteTrigger, and openclaw cron, giving it environment-management capabilities beyond simple coupon operations. This is dangerous because durable scheduled execution can outlive the immediate conversation and can be abused or misconfigured to perform unintended repeated actions.
The instructions direct the agent to obtain and use platform-specific user identifiers to create external scheduled jobs, which is more access than is strictly necessary for immediate coupon redemption. This increases privacy and misuse risk because identifiers can be mishandled, misbound to the wrong account, or used to create ongoing jobs outside the user's clear awareness.
The rules explicitly authorize automatic coupon collection at scheduled times without re-confirmation, yet they do not prominently warn users that the skill will continue to act on their authenticated account in the future. That creates a consent and transparency problem, especially if tokens remain valid and actions continue after the user forgets automation was enabled.
The file defines all user-facing response templates entirely in Chinese and requires them to be output verbatim, which imposes a fixed language on users. There is no indication that users can opt into another language or that this locale restriction is documented as a justified region-specific requirement.
The skill is designed around maintaining session state across runs, which is functional but security-relevant because it preserves login capability beyond the immediate authentication event. In the context of a coupon skill, long-lived cached tokens plus automation features make unauthorized reuse more consequential than ephemeral in-memory auth.
调用 mt-ug-ods-skill-cache CLI
Args:
command: 主命令(如 auth, shared, read, write 等)
subcommand: 子命令(如 get, set, list 等)
args: 额外参数列表
raw_output: 是否返回原始输出(用于 shared read 等直接返回内容的命令)
The skill is designed around maintaining session state across runs, which is functional but security-relevant because it preserves login capability beyond the immediate authentication event. In the context of a coupon skill, long-lived cached tokens plus automation features make unauthorized reuse more consequential than ephemeral in-memory auth.
调用 mt-ug-ods-skill-cache CLI
Args:
command: 主命令(如 auth, shared, read, write 等)
subcommand: 子命令(如 get, set, list 等)
args: 额外参数列表
raw_output: 是否返回原始输出(用于 shared read 等直接返回内容的命令)
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
env.setdefault("SKILL_CACHE_WORKSPACE", _get_workspace())
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env)
stdout = result.stdout.strip() if result.stdout else ""
# raw_output 模式:直接返回原始内容
The code transmits the user's phone number to a remote SMS endpoint as part of authentication, but the function itself does not surface a privacy/consent warning at the time of submission. Because phone numbers are sensitive personal data, sending them off-device without explicit just-in-time notice can create privacy and compliance risk even if the endpoint is legitimate.
The verification flow sends both the phone number and SMS code to a remote service without any visible just-in-time warning in this code path. Since the code is an authentication secret and the phone number is personal data, the absence of an explicit disclosure/consent step increases privacy and trust risk.
The auth module implements persistent scheduled automation for coupon claiming, which materially expands the skill's behavior beyond basic login and coupon retrieval. Hidden or under-disclosed scheduling capabilities can cause actions to continue unattended on the user's behalf, increasing the risk of consent issues, surprise behavior, and misuse if combined with stored authentication state.
The skill performs cross-platform environment detection and generates external scheduling commands, which is broader than ordinary coupon/authentication functionality. In security terms, this expands the attack surface by adapting to host capabilities and preparing commands that can trigger future actions, making the skill more powerful and less transparent than its stated purpose suggests.