Back to skill

Security audit

油价智能提醒

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it needs review because enabling it can create a recurring cron job and several advertised safety/configuration controls are not implemented.

Review before installing. Only enable it if you are comfortable with a recurring cron job that keeps running, contacts the NDRC website, and writes local state. Ask the publisher to add explicit confirmation, the exact cron entry, disable/remove instructions, duplicate-job protection, and real implementations for the advertised configuration and duplicate-reminder controls.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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
Findings (1)

T06 · System Persistence

Error
Location
SKILL.md:31
Finding
Automatic Installation of a Persistent Scheduled Task## Vulnerability Details **File Location**: `SKILL.md`, lines 31–35 **Vulnerability Type**: System Persistence **Risk Level**: High ### Vulnerable Code Snippet ```markdown After the user asks Nova to enable oil-price reminders, Nova automatically: 1. Creates the `memory/oil_state.json` state file 2. Creates a cron job, triggered every 3 days 3. Records the next price-adjustment window ``` The original Skill text explicitly states that Nova automatically creates a state file and a cron job after the reminder feature is enabled. ### Technical Analysis The Skill instructs the Agent to modify the host's task scheduler by creating a recurring cron job. A cron entry survives the current Skill invocation and causes code to execute automatically in future sessions. This is cross-session system persistence and is therefore classified as `T06: System Persistence`. Although recurring execution is related to the advertised reminder function, the instructions do not require explicit confirmation immediately before modifying the scheduler. They also do not specify: - The exact command and arguments to be installed. - A unique identifier or ownership marker for the cron entry. - The account and privilege context under which it will run. - An expiration or automatic cleanup policy. - Procedures for listing, disabling, and removing the task. - Controls preventing duplicate or incorrectly scoped entries. The monitoring script itself performs recurring HTTPS requests to the declared NDRC website, updates `/workspace/memory/oil_state.json`, and prints a reminder. No evidence was found that it retrieves executable code, executes remote content, accesses credentials, or escalates privileges. The risk arises from the Skill's instruction to establish persistent scheduled execution. ### Attack Path 1. A user asks the Agent to enable the oil-price reminder. 2. The Agent loads and follows the instructions in `SKILL.md`. 3. The Agent creates the persistent state file under `/wo ...[truncated 1140 chars]
Remediation
## Remediation Suggestions 1. Do not create cron entries automatically merely because the reminder feature was requested. 2. Immediately before scheduler modification, request explicit user approval and display the complete proposed cron expression, executable path, arguments, execution account, and state-file location. 3. Prefer a platform-managed reminder or scheduler API that provides ownership, authorization, auditing, lifecycle controls, and automatic cleanup. 4. If cron is necessary, install a narrowly scoped entry that: - Uses an absolute path to the packaged script and interpreter. - Uses fixed arguments rather than user-controlled shell text. - Runs with the least-privileged account required. - Has a unique, recognizable ownership marker. - Prevents duplicate entries. - Uses a constrained environment and safe file permissions. 5. Add an expiration date or bounded execution count unless the user explicitly requests indefinite monitoring. 6. Document and implement commands for listing, disabling, and removing the task. 7. Remove both the scheduler entry and associated state data when the user disables or uninstalls the Skill. 8. Log creation, execution, modification, and removal of the scheduled task so users can audit persistent activity.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
The documented behavior overclaims functionality such as configurable scheduling, city support, and duplicate-suppression logic that is not actually implemented. This is dangerous because users and platform operators may make trust and deployment decisions based on false assumptions, leading to unintended cron creation, repeated notifications, or incorrect automation behavior.

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill describes capabilities that involve shell execution (`curl`) and persistent file writes, but it does not declare any explicit tool scope or permissions boundary. This creates a security and governance gap: an agent may be granted more capability than the user understands, and reviewers cannot verify least-privilege operation from the manifest alone.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The trigger phrase `什么时候加油` is broad everyday language and may activate the skill during ordinary conversation without clear user intent to enable monitoring or scheduling. In this skill’s context, accidental activation is more serious because the skill claims it will create cron jobs and persistent state, which are side effects beyond a simple one-shot response.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill indicates that enabling it will create cron jobs and write persistent local state, but this side effect is not clearly disclosed upfront in the main description as a user warning. Hidden persistence and scheduling reduce informed consent and can surprise users with ongoing background execution or retained data.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The script description and all reminder messages are hard-coded in Chinese, with no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking locale. This is a natural-language policy concern because it enforces a specific language without user opt-in.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The manifest describes configurable monitoring frequency, city-specific configuration, and anti-duplicate reminder state handling. In this file, the script only performs a single check when run, uses no city-specific logic at all, and persists state without any logic to suppress repeat reminders based on prior notifications.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def curl(url):
    try:
        r = subprocess.run(['curl', '-s', url], capture_output=True, text=True, timeout=12)
        return r.stdout
    except: return ""
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This Python code fetches remote content from an external government website using curl and writes persistent state to /workspace/memory/oil_state.json, but it provides no confirmation prompt, logging, print statement, or explanatory comments/docstring disclosing these actions. For a code file, these safety-relevant operations warrant at least some visible disclosure to the user.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The manifest suggests the reminder is based on monitoring NDRC announcements and judging upcoming adjustment windows. However, the code computes the next adjustment date from a fixed date seed and weekday counting, independent of the fetched announcement content, so the reminder timing is not actually driven by the monitored source.

Natural-Language Policy Violations

Low
Confidence
80% confidence
Finding
SQP-3 applies to all file types and covers language or locale policy issues. The file forces a single language in the skill description and trigger phrases without indicating user opt-in or offering an alternative language, which can violate an organizational expectation of language choice.

Context-Inappropriate Capability

Low
Confidence
82% confidence
Finding
For an oil-price reminder skill, fetching official web pages is expected, but spawning a system subprocess to do so is a broader execution capability than the manifest implies. The stated purpose is monitoring and reminding, not invoking external binaries or shell-adjacent tooling.

Static analysis

No suspicious patterns detected.