Back to skill

Security audit

Workday Reminder

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed workday reminder, but its instructions are broad enough to create recurring QQ reminders from ambiguous off-work questions.

Install only if you want a Chinese-language QQ workday reminder tied to Asia/Shanghai time. Before using it, treat reminder creation, cancellation, or time changes as actions that should be explicitly confirmed, especially if you only asked for a countdown or what time work ends.

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

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:11
Finding
Overbroad Mandatory Cron Invocation Can Create Unwanted Recurring Reminders## Vulnerability Details **File Location**: `SKILL.md`, lines 11-14 **Vulnerability Type**: Overbroad tool-use instruction that overrides intent-sensitive behavior **Risk Level**: Medium **Vulnerable instruction, faithfully translated into English:** ```markdown ## Mandatory Rules **When the user mentions "off-work reminder," "off-work time," "how long until leaving work," "what time do I leave work," "view countdown," or any other request involving off-work time, the `cron` tool must be called to set a scheduled reminder or calculate a countdown. Never respond only in natural language by saying "Okay"!** You have no memory or background thread. A verbal promise to "remind you later" is ineffective—only invoking the `cron` tool can actually register a scheduled task. ``` ### Technical Analysis The instruction mandates use of the `cron` tool for every request involving an off-work time, including informational requests such as asking what time work ends or requesting a countdown. It does not restrict the state-changing `cron add` operation to cases where the user has explicitly requested a reminder. This broad rule also conflicts with the narrower countdown workflow later in `SKILL.md`, which directs the agent to invoke `scripts/countdown.py` for countdown requests. An agent prioritizing the mandatory rule may interpret an informational query as authorization to register a recurring scheduled task. The issue is classified as instruction hijacking because the skill text broadly overrides intent-sensitive tool selection and directs the agent toward a persistent, externally delivered action. No malicious Python code, remote payload retrieval, credential access, filesystem modification, or privilege escalation was identified. ### Attack Path 1. The skill is loaded for a user request involving off-work time. 2. The user makes an informational request, such as asking, "What time do I leave work?" or "How long until I leave work? ...[truncated 989 chars]
Remediation
## Remediation Suggestions 1. Require explicit user intent before invoking `cron add`. Phrases that only ask for a time or countdown must not authorize creation of a scheduled task. 2. Replace the mandatory rule with intent-specific routing: - Use `scripts/countdown.py` for countdown and time-status queries. - Use `cron add` only for explicit reminder-creation requests. - Use `cron list` and `cron remove` only for explicit reminder-management requests. 3. Ask for confirmation before creating a recurring task when the request is ambiguous. 4. Clearly distinguish read-only operations from state-changing operations in the skill instructions. 5. Validate and display the proposed schedule, timezone, destination channel, and recurrence before registration. 6. After successful creation, return the job identifier and clear cancellation instructions so an unwanted task can be removed easily. 7. Add regression tests confirming that informational prompts such as "What time do I leave work?" and "How long until I leave work?" never invoke `cron add`.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
代码的实际功能明显比声明更窄。它确实实现了“下班倒计时查询”和“工作日/周末区分”,也支持通过参数设置下班时间,但没有任何创建提醒、定时触发、持久化管理、删除/修改提醒等逻辑,因此不足以支撑“下班提醒技能”及“提醒管理功能”的声明。未见越权访问或其他隐藏能力,但声明与实际行为存在实质性能力不匹配。

Vague Triggers

Medium
Confidence
90% confidence
Finding
The trigger description is broad enough that ordinary conversation about getting off work could activate the skill unexpectedly. In an agent environment with tool access, over-broad activation can cause unintended cron operations, confusing user experience, or silent scheduling actions the user did not explicitly request.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The mandatory rule says any request involving off-work time must invoke cron, which blurs the line between harmless discussion and state-changing actions. This increases the chance of unauthorized or accidental scheduling, especially when a user asks a vague question like '几点下班' or casually mentions off-work time without consenting to reminder creation.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This Python file contains user-facing docstrings and output messages entirely in Chinese, including the main result message strings. The policy requires avoiding a forced language or locale unless the skill offers user opt-in or clearly documents a justified regional constraint, which is not present here.

Static analysis

No suspicious patterns detected.