Back to skill

Security audit

Task Notifier

Security checks for vulnerabilities and agentic risk

Overview

Task Notifier is clearly described as a desktop-notification helper, but installing it requires an unsafe-install bypass for a separate runtime plugin with persistent lifecycle access that was not included for review.

Install only if you are comfortable granting a persistent OpenClaw plugin lifecycle access across agents and allowing it to run local notification commands. Prefer a reviewed, pinned runtime version or source bundle before using the unsafe-install command, and use the documented disable/uninstall and state-cleanup steps if you remove it.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Error
Location
SKILL.md:30
Finding
Unaudited Remote Runtime Installed Through an Unsafe-Install Bypass## Vulnerability Details **File Location**: `SKILL.md:30-45` **Vulnerability Type**: Remote third-party runtime installed with elevated lifecycle access and local command-execution capabilities **Risk Level**: High The same installation guidance and security-sensitive capabilities are also documented in `README.md:8-39` and `references/README.md:8-39`. ### Vulnerable Code ```markdown Before installing, get explicit user confirmation. Tell the user what the install changes: - downloads the runtime plugin to `~/.openclaw/extensions/task-notifier/`; - enables `task-notifier` in OpenClaw plugin config; - adds it to `plugins.allow`; - grants lifecycle hook access with `allowConversationAccess`; - requires `--dangerously-force-unsafe-install` because the plugin intentionally runs local notification commands. The flag is a real security decision, not a cosmetic warning. The runtime plugin is designed to use local OS notification tools (`osascript` on macOS, PowerShell on WSL-on-Windows, and `notify-send` on Linux fallback), inspect the active foreground window title for suppression, and write small per-run state files under the active workspace's `.openclaw-task/` directory. The runtime itself does not need network access for notifications, but installing or updating from ClawHub uses network access. Privacy note: `allowConversationAccess` lets the runtime receive OpenClaw lifecycle hook context for conversations and agent turns. Task Notifier uses that context only to decide when a user-initiated agent run started/ended, identify the agent name, and avoid heartbeat/cron/system-event noise. Do not install it unless the user explicitly accepts persistent lifecycle hook access across agents. After explicit approval, install the runtime plugin: ```bash openclaw plugins install clawhub:task-notifier --dangerously-force-unsafe-install --force ``` ``` ### Technical Analysis The audited artifact contains documentation but do ...[truncated 3178 chars]
Remediation
## Remediation Suggestions 1. **Include the runtime source in the audited artifact.** Bundle `src/index.js`, `src/index.ts`, `src/task-notify.sh`, installer scripts, diagnostics, manifest, and package metadata so reviewers can verify the executable behavior. 2. **Pin an immutable package identity.** Install a specific reviewed version and cryptographic digest rather than resolving a mutable package name. Verify the digest before enabling the plugin. 3. **Avoid the unsafe-install bypass.** Modify the plugin architecture to satisfy normal installation policy. If the bypass remains unavoidable, require an additional integrity check and display the exact pinned version and source digest before installation. 4. **Minimize lifecycle permissions.** Restrict hook data to the minimum fields needed to identify task start and completion. Avoid broad conversation access if a narrower event API is available. 5. **Constrain command execution.** Use fixed executable paths and fixed argument structures, reject untrusted input in notification titles and bodies, and avoid shell evaluation or dynamically constructed PowerShell commands. 6. **Apply least privilege and isolation.** Run notification handling in a restricted subprocess with limited filesystem access, no unnecessary network access, and no access to secrets or unrelated workspaces. 7. **Improve provenance verification.** Publish signed releases, document the source repository and build process, generate reproducible artifacts, and verify package signatures during installation and updates. 8. **Require approval for updates.** Do not automatically replace the reviewed runtime with newer remote code. Present permission or behavior changes and require renewed explicit consent. 9. **Provide complete cleanup.** Uninstallation should remove plugin configuration, allowlist entries, granted conversation access, installed runtime files, and residual `.openclaw-task` state after user confirmation.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The skill metadata presents this as a narrow documentation change, but the body contains operational guidance to install, enable, run, restart, test, and remove a runtime plugin with system-level side effects. This mismatch can mislead a reviewing agent or user about the true capabilities being introduced, reducing scrutiny around plugin installation, lifecycle-hook access, and execution of local OS commands.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
This section instructs installing a plugin with `--dangerously-force-unsafe-install` and `allowConversationAccess`, granting persistent lifecycle-hook access across agents. Even though consent language is present, embedding these high-risk installation steps in a skill whose manifest claims only documentation tightening creates a capability escalation path that could normalize unsafe installation of code with privileged runtime access.

Ae1

High
Category
analysis-evasion
Content
| `SKILL.md` | Agent-facing documentation |
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Credential Access

High
Category
Privilege Escalation
Content
You can also delete stale per-run state from workspaces after uninstalling:

```bash
find ~/.openclaw/workspace -path '*/.openclaw-task/runs/*.env' -type f -delete
```

## Agent filters
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
You can also delete stale per-run state from workspaces after uninstalling:

```bash
find ~/.openclaw/workspace -path '*/.openclaw-task/runs/*.env' -type f -delete
```

## Agent filters
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The text frames the skill as documentation and guidance, but it immediately provides direct operational commands elsewhere for install, restart, diagnostics, and notification testing. This framing can cause downstream systems or operators to classify the skill as low-risk documentation when it actually instructs changes to local configuration and execution of privileged plugin workflows.

Session Persistence

Medium
Category
Rogue Agent
Content
- grants lifecycle hook access with `allowConversationAccess`;
- requires `--dangerously-force-unsafe-install` because the plugin intentionally runs local notification commands.

The flag is a real security decision, not a cosmetic warning. The runtime plugin is designed to use local OS notification tools (`osascript` on macOS, PowerShell on WSL-on-Windows, and `notify-send` on Linux fallback), inspect the active foreground window title for suppression, and write small per-run state files under the active workspace's `.openclaw-task/` directory. The runtime itself does not need network access for notifications, but installing or updating from ClawHub uses network access.

Privacy note: `allowConversationAccess` lets the runtime receive OpenClaw lifecycle hook context for conversations and agent turns. Task Notifier uses that context only to decide when a user-initiated agent run started/ended, identify the agent name, and avoid heartbeat/cron/system-event noise. Do not install it unless the user explicitly accepts persistent lifecycle hook access across agents.
Confidence
89% confidence
Finding
The plugin stores per-run state files in the workspace and requests persistent lifecycle-hook conversation access, which creates session persistence and metadata retention across agent runs. Even if the stored data is intended to be minimal, persistence plus hook visibility can expose conversation-derived context and leave artifacts in user workspaces if not tightly controlled.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill discloses that the runtime executes OS notification commands, inspects the active foreground window, and writes per-run state files. Those are real host-interaction capabilities and persistence mechanisms that exceed a documentation-only description, creating under-declared behavioral scope and privacy risk if an agent follows the guidance without heightened review.

Session Persistence

Medium
Category
Rogue Agent
Content
2. `agent_end` reads that run marker, checks whether OpenClaw is the active foreground window, sends a native desktop notification when OpenClaw is not active, and then cleans up the marker.

The plugin tracks runs separately by run/session key so parallel agents do not overwrite each other. It works for the main agent and subagents unless filtered by environment variables.

## Smart suppression
Confidence
82% confidence
Finding
Tracking runs separately by run/session key indicates cross-turn state correlation for parallel agents, which is a form of session persistence. In context, this is functional rather than overtly malicious, but it still increases sensitivity because the runtime can correlate agent activity over time and across subagents.

Scope Creep

Low
Category
Excessive Agency
Content
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Confidence
70% confidence
Finding
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Static analysis

No suspicious patterns detected.