Back to skill

Security audit

Openclaw Skill Clawban

Security checks for vulnerabilities and agentic risk

Overview

This is a real Kanban integration, but it can read or change more project-management items than its assigned-only promise suggests.

Review this skill before installing. Use a dedicated least-privilege PM account or token limited to the exact repo, team, project, or board you want it to manage; do not enable the OpenClaw cron option until assigned-only filtering and automation behavior are acceptable; assume ticket titles, bodies, comments, and possibly internal comments can be shown to the agent; update the flagged npm dev dependencies before running tests or developer servers.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/linear_json.sh:54
Finding
Linear Adapter Exceeds the Assigned-to-Me Data Access Boundary<![CDATA[ ## Vulnerability Details **File Location**: `scripts/linear_json.sh:54-77` **Vulnerability Type**: Excessive data access caused by missing assignee filtering **Risk Level**: Medium ### Vulnerable Code ```bash issues-team) team_id="${1:-}" if [[ -z "$team_id" ]]; then echo "Usage: linear_json.sh issues-team <team_id>" >&2 exit 1 fi # Note: Linear's GraphQL supports querying team by ID. gql "{ team(id: \"$team_id\") { issues(first: 250, filter: { state: { type: { nin: [\\\"completed\\\", \\\"canceled\\\"] } } }) { nodes { id title url updatedAt state { id name type } } } } }" \ | jq -c '{data:{issues:{nodes:(.data.team.issues.nodes // [])}}}' ;; issues-project) project_id="${1:-}" if [[ -z "$project_id" ]]; then echo "Usage: linear_json.sh issues-project <project_id>" >&2 exit 1 fi gql "{ project(id: \"$project_id\") { issues(first: 250, filter: { state: { type: { nin: [\\\"completed\\\", \\\"canceled\\\"] } } }) { nodes { id title url updatedAt state { id name type } } } } }" \ | jq -c '{data:{issues:{nodes:(.data.project.issues.nodes // [])}}}' ;; ``` ### Technical Analysis The declared workflow boundary requires `next` and `autopilot-tick` to consider only work items assigned to the authenticated user. However, both Linear GraphQL queries filter exclusively on workflow state. They request up to 250 non-completed and non-canceled issues across the configured team or project without an assignee constraint. Consequently, `LinearAdapter.fetchSnapshot()` can receive issue metadata belonging to other users, including issue identifiers, titles, URLs, update timestamps, and workflow states. Calls such as setup validation, backlog selection, and autopilot processing invoke this snapshot logic. The authorization token is sent only to Linear's official HTTPS API, which is necessary for the integration. The vulnerability is therefore not credential exfiltration; it is a failure to enforce the narrower, docu ...[truncated 1655 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Query the authenticated Linear viewer and obtain the viewer's stable user ID. 2. Add an explicit assignee filter to both team and project issue queries so only issues assigned to that viewer are returned. 3. Prefer GraphQL variables rather than interpolating identifiers directly into query strings. This also avoids malformed GraphQL or injection risks if configuration identifiers are not trusted. 4. Apply the assignee constraint at the server query layer rather than filtering results only after retrieval, thereby minimizing unnecessary disclosure. 5. Add adapter tests containing issues assigned to the viewer and to other users, and verify that only viewer-assigned issues enter the snapshot. 6. Add integration tests proving that `next` and `autopilot-tick` cannot select another user's issue. 7. Use a Linear token with the narrowest available workspace, team, project, and operation permissions. 8. Consider pagination with a bounded result limit after the assigned-user filter is applied, rather than retrieving a broad fixed set of 250 active issues. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (33)

Known Vulnerable Dependency: vitest==2.1.9 — 2 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed); CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Critical
Category
Supply Chain
Confidence
90% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: vitest==2.1.9 — 2 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed); CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Critical
Category
Supply Chain
Confidence
98% confidence
Finding
This manifest includes vitest 2.1.9, which is flagged with critical advisories involving arbitrary file read and code execution/path traversal in Vitest components. Even though Vitest is a devDependency, the risk becomes real whenever tests or the Vitest UI/server are run in developer workstations or CI, where sensitive source code, tokens, and build secrets may be accessible.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description describes a substantive Kanban workflow skill with integrations and operational verbs. The supplied code chunk does not implement any of that behavior; it merely configures Vitest to run Node-based tests from a specific path. This is a materially different primary purpose and provides none of the declared functional capabilities, so it is a clear mismatch.

Ae1

High
Category
analysis-evasion
Content
- `github.ts` (gh CLI)
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- `src/cli.ts` (provides `kanban-workflow <verb>`; see README for setup flags)
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Known Vulnerable Dependency: nanoid==3.3.11 — 3 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size); CVE-2026-67213 (nanoid: custom generators can loop indefinitely when size is zero); CVE-2026-73086 (nanoid: Integer Overflow or Wraparound)

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: postcss==8.5.6 — 4 advisory(ies): CVE-2026-45623 (PostCSS: Arbitrary file read and information disclosure via attacker-controlled ); CVE-2026-69153 (PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled sourceMappi); CVE-2026-41305 (PostCSS has XSS via Unescaped </style> in its CSS Stringify Output) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: vite==5.4.21 — 3 advisory(ies): CVE-2026-39365 (Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling); CVE-2026-53571 (vite: `server.fs.deny` bypass on Windows alternate paths); CVE-2026-53632 (launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows)

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Memory Manipulation

High
Category
Memory Poisoning
Content
// Stop tracking work items that are no longer in progress.
  for (const id of Object.keys(state.lastAutoCommentAt)) {
    if (!inProgressSet.has(id)) delete state.lastAutoCommentAt[id];
  }

  const postedIds: string[] = [];
Confidence
80% confidence
Finding
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Self-Modification

High
Category
Rogue Agent
Content
}

describe('setup', () => {
  it('requires --force to overwrite existing config', async () => {
    const fs = createMemoryFs({ 'config/kanban-workflow.json': '{"x":1}' });
    const validate = vi.fn(async () => undefined);
Confidence
85% confidence
Finding
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The README says the skill can post an automatic progress update comment every 5 minutes, which is an external write action affecting project data. Although the document has a general security model section, this specific behavior is not accompanied by a direct warning that enabling it will create recurring comments on the user's behalf.

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill explicitly requires shell-capable binaries and environment-based authentication but does not declare any tool scope or allowed-tools boundary. This creates an authorization gap where an agent may invoke shell/env capabilities more broadly than the user expects, increasing the risk of unintended command execution or access to sensitive environment variables such as API keys.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill describes automatic remote comment posting every 5 minutes for in-progress tasks without an explicit warning or consent boundary. In an agentic environment, unattended remote writes can spam external systems, leak sensitive progress details, or create unintended audit/activity noise across connected PM platforms.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The requirements explicitly instruct the skill to retrieve and display private/internal comments where supported, but provide no warning, access guardrails, or least-privilege restrictions. In an agentic workflow, exposing private comments to the model or broader execution context can disclose sensitive internal discussions, credentials, incident details, or HR/legal notes that were not necessary for the immediate task.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The requirements mandate automatic progress comments every 5 minutes while a task is in progress, which creates an ongoing outbound data flow to external PM platforms without any explicit operator consent, visibility controls, or content minimization. This can leak sensitive implementation details, internal reasoning, or proprietary work status more broadly than intended, especially if the task body or comments contain confidential information.

External Transmission

Medium
Category
Data Exfiltration
Content
#
# Requirements: LINEAR_API_KEY, curl, jq

API="https://api.linear.app/graphql"

if [[ -z "${LINEAR_API_KEY:-}" ]]; then
  echo "Error: LINEAR_API_KEY not set" >&2
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

if ! command -v curl >/dev/null 2>&1; then
  echo "Error: curl not found" >&2
  exit 1
fi
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
82% confidence
Finding
The adapter invokes CLI commands that rely on sensitive environment variables documented in the file (`PLANE_API_KEY`, `PLANE_WORKSPACE`) and performs external service access, but there is no user-facing prompt, logging, or runtime disclosure around these actions. In code files, network or credential-backed operations should include some visible warning unless the disclosure exists elsewhere; this file itself provides only developer comments.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This code executes `plane issues update ... --state` to change the state of a remote work item, which is a mutating operation affecting external user/project data. The file contains no visible confirmation prompt, print/log statement, or other user disclosure near the destructive or state-changing action.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The manifest describes a CLI-first kanban workflow skill with setup, verbs, polling/diffing foundations, and automation hooks. While automation hooks are in scope, directly creating a scheduled cron job by invoking an external `openclaw` process is an environment-modifying capability not clearly justified as necessary for managing kanban stages themselves.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The show() verb explicitly requests comments with includeInternal: true and returns them in the user-facing payload without any access-control check, redaction step, or disclosure boundary. In a PM integration, internal comments commonly contain sensitive operational details, private staff discussions, or security-relevant notes, so exposing them through a general-purpose skill can leak data to users or downstream agents that should only see public discussion.

Missing User Warnings

Low
Confidence
88% confidence
Finding
This markdown file states that setup writes `config/kanban-workflow.json`, but it does not include any warning or disclosure about modifying the user's workspace files. For markdown files, operations affecting user data or system state should be explicitly disclosed so users understand that running setup changes local configuration.

Known Vulnerable Dependency: @vitest/mocker==2.1.9 — 1 advisory(ies): CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Low
Category
Supply Chain
Confidence
60% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: esbuild==0.21.5 — 1 advisory(ies): GHSA-67mh-4wv8-2f99 (esbuild enables any website to send any requests to the development server and r)

Low
Category
Supply Chain
Confidence
60% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: esbuild==0.27.3 — 1 advisory(ies): GHSA-g7r4-m6w7-qqqr (esbuild allows arbitrary file read when running the development server on Window)

Low
Category
Supply Chain
Confidence
60% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Static analysis

No suspicious patterns detected.