Back to skill

Security audit

durable-task-runner

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent durable task runner, but it should be reviewed because it can install recurring cron execution and its installer can delete an arbitrary target directory.

Review before installing. Use the default install path only, avoid custom --target paths, and do not run the cron --apply helper unless you intentionally want recurring background status ticks and know how to remove the crontab entry. Do not store secrets in task goals, progress logs, or events, and use explicit task IDs for recovery when more than one durable task exists.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T06 · System Persistence

Error
Location
scripts/task_install_tick_cron.sh:24
Finding

Optional cron helper installs persistent recurring execution

Content
View full analysis
/dev/null 2>&1" case "${1:-}" in --print) printf '%s\n' "$CRON_CMD" ;; --apply) current="$(crontab -l 2>/dev/null || true)" filtered="$(printf '%s\n' "$current" | grep -Fv 'scripts/task_tick_all.py' || true)" { printf '%s\n' "$filtered" printf '%s\n' "$CRON_CMD" } | sed '/^$/N;/^\n$/D' | crontab - echo "Installed cron entry: $CRON_CMD" ;; ``` The same behavior is included in the publish bundle at `dist/durable-task-runner/scripts/task_install_tick_cron.sh:24-25, 44-51`. ### Technical Analysis Invoking the helper with `--apply` reads and rewrites the invoking user's crontab, adding an entry that repeatedly executes `scripts/task_tick_all.py`. This is a cross-session persistence mechanism because the scheduled command continues running independently after the initiating shell or Skill invocation exits. The feature is explicitly documented, opt-in, and limited to the current user. It does not use privilege escalation and is not covert. However, recurring host-level execution is not required for the Skill's primary explicit-resume workflow and therefore exceeds the minimum privilege and lifecycle necessary for that core function. The cron command references a mutable Skill directory. If that directory or `task_tick_all.py` is subsequently modified or replaced, cron executes the replacement at each interval. The helper also has no removal operation or installation marker, so deleting or uninstalling the Skill can leave an orphaned scheduled entry. ### Attack Path 1. A user or automation invokes `scripts/task_install_tick_cron.sh --apply`. 2. The script reads the current user's existing crontab. 3. It re ...[truncated 1190 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
install.sh:38
Finding

Installer recursively deletes an unrestricted user-supplied target

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/prepare_publish.py:72
Finding

Publish utility recursively deletes an unrestricted output directory

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (84)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description is about the runtime behavior of a durable execution/recovery skill, but the supplied code chunk does not implement any of those features. Instead, it is purely an installation script that places the skill into the OpenClaw workspace, either via symlink or file copy, and removes any preexisting installation at the target path. That is a materially different primary purpose from durable task execution and recovery. While installer code can be part of a skill package, this specific chunk's behavior is not represented by the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents an operational skill for managing long-running durable tasks across resets. The supplied code does not implement any of that runtime behavior. Instead, it is a build/release utility that deletes and recreates an output directory, then copies a curated set of files into a publish bundle. This is a materially different primary purpose and includes an undeclared capability: repository packaging for publication. There are no visible behaviors related to persistent task state, recovery, progress updates, verification, or worker coordination in this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises a substantial durable-task orchestration capability: surviving resets, progress updates, explicit recovery, verification before completion, and coordination for larger jobs. This code chunk does not implement those behaviors. It is narrowly focused on formatting a user-facing acknowledgment based on already-recorded task state in a JSON file. While it does touch persisted task state and references active lines/subagents, that is only in service of producing a compact status/control reply, not orchestrating durable execution or recovery. Therefore the actual behavior is materially narrower and different from the declared primary purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description suggests an end-user skill for managing durable, long-running multi-step work with recovery, persistence, and progress continuity. The actual code chunk does not implement or expose that primary functionality; instead, it is a test harness focused on delivery-path smoke coverage. It creates temporary tasks and verifies behavior of other scripts such as task_ctl.py, task_send_status.py, task_maybe_send_now.py, and task_tick_all.py. While this loosely touches task state and status updates, its purpose is materially different: testing delivery mechanics, not providing durable task orchestration or recovery features to users. Therefore the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 134)May include surrounding context.

md
- `scripts/task_install_tick_cron.sh` — optional helper to print/install a current-user cron entry for recurring ticks

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · SKILL.md (reported line 120)May include surrounding context.

md
- `references/quickstart.md` — minimal end-to-end usage pattern
- `references/task-schema.md` — snapshot/event structure
- `references/control-levels.md` — how much process the task earns
- `references/subagent-return-protocol.md` — worker return rules

## Key scripts

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · dist/durable-task-runner/SKILL.md (reported line 120)May include surrounding context.

md
- `references/quickstart.md` — minimal end-to-end usage pattern
- `references/task-schema.md` — snapshot/event structure
- `references/control-levels.md` — how much process the task earns
- `references/subagent-return-protocol.md` — worker return rules

## Key scripts

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/task_reliability_regression.py (reported line 15)May include surrounding context.

python
def run(*args: str, input_text: str | None = None, env: dict[str, str] | None = None) -> subprocess.CompletedProcess[str]:
    merged = os.environ.copy()
    if env:
        merged.update(env)
    return subprocess.run(list(args), text=True, input=input_text, capture_output=True, check=True, env=merged)

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · dist/durable-task-runner/scripts/task_resume_bootstrap.py (reported line 14)May include surrounding context.

python
Design bias:
- explicit, inspectable, low-magic
- prefer clear state classification over ambitious automation theater
"""

from __future__ import annotations

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · dist/durable-task-runner/scripts/task_resume_bootstrap.py (reported line 195)May include surrounding context.

python
Design bias:
- explicit, inspectable, low-magic
- prefer clear state classification over ambitious automation theater
"""

from __future__ import annotations

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/task_resume_bootstrap.py (reported line 14)May include surrounding context.

python
Design bias:
- explicit, inspectable, low-magic
- prefer clear state classification over ambitious automation theater
"""

from __future__ import annotations

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/task_resume_bootstrap.py (reported line 195)May include surrounding context.

python
Design bias:
- explicit, inspectable, low-magic
- prefer clear state classification over ambitious automation theater
"""

from __future__ import annotations

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill instructs use of shell commands and durable file writes but declares no explicit tool scope or permissions boundary. That makes the operational capability broader and less auditable, increasing the chance the agent will invoke filesystem or shell actions unexpectedly when the skill is loaded.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The broad recovery trigger phrase "continue this" can cause over-activation of resume logic without enough contextual constraints. In practice, that increases the risk of the agent resuming the wrong durable task or performing unintended follow-through after a reset based on ambiguous user language.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill says the intended model is not scheduler-based, then later advertises cron support for recurring ticks. That contradiction can mislead users and reviewers about the persistence model, causing them to underestimate the autonomy and post-session activity the skill may enable.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Documenting optional cron-based recurring tick installation expands the skill from explicit user-driven recovery into persistence or scheduled execution territory. In an agent setting, scheduler installation can create ongoing autonomous behavior that survives the immediate conversation, which raises safety and consent concerns if not tightly constrained.

Content

No source excerpt is available for this finding.

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · STATUS.md (reported line 26)May include surrounding context.

md
- connect the emitted hard-stop handoff payload to actual surrounding runtime reset/resume automation
- keep timed status lines compact, programmatic, and clearly separate from human commentary
- pause-clean stale ordinary tasks that have no executable continuation hook instead of letting them loop forever as fake `running`
- verify the resumed-session continuation path is immediate and idempotent after reset

## Next step

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill persists task snapshots, events, and progress logs to disk, but the description does not foreground that data-retention behavior. Users may provide sensitive task content without understanding that it will be stored durably, creating privacy, retention, and potential local disclosure risks.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Using a generic phrase like "continue this" as a recovery trigger is vulnerable to accidental activation because it overlaps with ordinary conversation. In a durable-task context, an imprecise resume cue can restart task activity or follow-through after interruption without sufficiently clear, task-specific confirmation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document says the model is not about ambient scheduler behavior, yet later exposes cron-based recurring execution support. This inconsistency can mislead users and downstream agents into enabling scheduler-like persistence under a lower-risk mental model, increasing the chance of unintended autonomous behavior.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill frames recovery as explicitly user-driven after interruption, but it also advertises recurring status delivery and cron installation across running tasks. That mismatch can lead to unintended background execution or monitoring behavior that persists beyond the immediate user interaction, weakening user expectations and control over when the skill is active.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

Referencing installation of a cron entry for recurring ticks introduces session persistence and scheduled execution beyond the initiating interaction. Even if intended only for status delivery, persistent scheduling expands the attack surface, can outlive user awareness, and may normalize unattended execution in an agent skill.

Content

Scanner excerpt · dist/durable-task-runner/SKILL.md (reported line 134)May include surrounding context.

md
- `scripts/task_subagent_run.py` — prepare a ready-to-use worker payload
- `scripts/task_report.py` / `scripts/task_ticker.py` — render compact status
- `scripts/task_tick_all.py` — run due status delivery across all eligible running tasks
- `scripts/task_install_tick_cron.sh` — print/install a cron entry for recurring ticks

## Attribution discipline

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
93% confidence
Finding

The quickstart explicitly instructs the agent to record progress and continue work "without asking permission to continue," which encourages autonomous action beyond explicit user confirmation. In a durable task runner, this can cause the agent to keep executing multi-step operations after an interruption or ambiguous checkpoint, increasing the risk of unintended actions or scope drift, especially if later steps become destructive or sensitive.

Content

Scanner excerpt · dist/durable-task-runner/references/quickstart.md (reported line 29)May include surrounding context.

Progress checkpoint

Record concrete progress without asking permission to continue:

bash
python3 scripts/task_ctl.py progress demo-task \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The script automatically invokes other helper scripts via subprocess to resume and apply task actions, which can cause downstream state changes, but there is no explicit user-facing disclosure at the time these subprocesses are executed. The docstring mentions applying low-risk next actions, yet it does not clearly warn users that running this helper may automatically trigger continuation/apply workflows.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code auto-discovers channel, account, and chat/session identifiers from environment variables and silently binds them into task artifacts. In an agent skill, environment values often represent sensitive runtime context; auto-collecting and persisting them increases privacy and cross-context leakage risk, especially since later code may use that binding for delivery operations.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.