Back to skill

Security audit

Dessix Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is for controlling a local Dessix workspace, but it exposes broad read/write bridge access without a clear permission boundary.

Review before installing if you do not want an agent to read or change Dessix workspace content. Use this only with a trusted Dessix desktop app, approve the exact bridge tool and block/workspace IDs before any create, update, or delete operation, and prefer pinned installation commands over mutable npx/global npm examples.

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

Warning
Location
README.md:7
Finding
Unpinned npm packages are downloaded and executed<![CDATA[ ## Vulnerability Details **File Location**: `README.md:7-11` and `README.md:52-58` **Vulnerability Type**: Unpinned third-party package installation and execution **Risk Level**: Medium ### Vulnerable Code ```markdown ### Via npx (recommended) ```bash npx skills add dessix-skill ``` ``` ```markdown ## Publishing to ClawHub Install the CLI globally: ```bash npm i -g clawhub ``` ``` ### Technical Analysis The documented commands resolve mutable package versions from the user's configured npm registry. Neither command identifies an exact, previously reviewed version: - `npx skills add dessix-skill` may download and execute the latest matching `skills` CLI package and retrieve a mutable skill release. - `npm i -g clawhub` globally installs the latest matching `clawhub` package and may execute package lifecycle scripts during installation. These packages are not covered by the project's reviewed `package-lock.json`. Consequently, their source, integrity, and transitive dependency graph can change after this project has been audited. A compromised package owner, malicious future release, registry substitution, or unsafe registry configuration could turn the documented installation workflow into an arbitrary-code execution path. ### Attack Path 1. An attacker compromises the relevant npm package, publisher account, dependency chain, or package distribution channel. 2. The attacker publishes a malicious version or substitutes the package through the user's configured registry. 3. A user follows the README and runs one of the unpinned commands. 4. npm resolves the attacker-controlled mutable release. 5. The package CLI or an installation lifecycle script executes with the invoking user's privileges. 6. The malicious package can access resources available to that user and, in the global-install case, place files in globally configured npm locations. ### Impact Assessment Successful exploitation can execute arbitrary code with the privileges of the ...[truncated 350 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every executable package to an exact reviewed version rather than relying on a mutable latest release. 2. Replace the `npx` example with an exact-version invocation, such as: ```bash npm exec --package=skills@<reviewed-version> -- skills add dessix-skill ``` 3. Replace the global installation example with an exact version: ```bash npm install --global clawhub@<reviewed-version> ``` 4. Prefer project-local, lockfile-controlled tooling over global installation where practical. 5. Document the expected npm registry and package publisher identity. 6. Verify npm package provenance, integrity metadata, release signatures, and ownership before updating the documented version. 7. Review the selected packages and their transitive dependencies for lifecycle scripts before recommending execution. 8. Run installation with the least-privileged user account and avoid elevated shells. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (27)

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
Use `scripts/dessix-bridge.mjs` for all requests instead of re-implementing socket logic.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Known Vulnerable Dependency: brace-expansion==5.0.3 — 5 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-45149 (brace-expansion: Large numeric range defeats documented `max` DoS protection) +2 more

High
Category
Supply Chain
Confidence
97% confidence
Finding
brace-expansion 5.0.3 is flagged for multiple denial-of-service issues involving pathological brace patterns and range handling. Even though it appears here as a transitive devDependency via minimatch/eslint, the dependency is genuinely vulnerable and any workflow that processes attacker-controlled glob-like patterns during development or automation could be forced into excessive CPU or memory consumption.

Known Vulnerable Dependency: flatted==3.3.3 — 2 advisory(ies): CVE-2026-32141 (flatted vulnerable to unbounded recursion DoS in parse() revive phase); CVE-2026-33228 (Prototype Pollution via parse() in NodeJS flatted)

High
Category
Supply Chain
Confidence
93% confidence
Finding
flatted 3.3.3 is reported vulnerable to prototype pollution and unbounded recursion DoS in parse() behavior. This is a real issue in the dependency tree, but here it is only transitively included through flat-cache for eslint as a devDependency, so the direct runtime risk to the published skill is lower unless untrusted data is fed into development tooling or local automation that invokes the parser.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to install the skill via `npx skills add dessix-skill` without pinning a specific package version. Because `npx` resolves and executes the latest published package by default, a compromised upstream package, malicious update, or namespace takeover could cause users to fetch and run unreviewed code. In this skill's context, that is more dangerous because the package is intended to interface with a local Electron bridge and local workspace data, increasing the value of any supply-chain compromise.

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill exposes access to a local Electron bridge and requires environment-based connectivity, but it does not declare any explicit tool scope or permissions boundary. That makes it easier for an agent to invoke sensitive local capabilities without a clear allowlist, increasing the chance of unintended access to workspace data or write-capable bridge tools.

Vague Triggers

Medium
Confidence
86% confidence
Finding
The description is very broad: it invites use whenever an agent needs to read, invoke tools programmatically, build automations, or fetch prompt content. Broad trigger language can cause over-selection of this skill in unrelated contexts, leading agents to access a local desktop bridge and potentially sensitive workspace content more often than necessary.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The multi-step examples include write-capable operations like dessix_create_block and dessix_update_block, but they do not present a strong, explicit warning that these commands modify the user's local workspace. In an agent setting, that omission can normalize destructive or persistent changes without clear consent, especially because the skill targets a local desktop application's data plane.

Known Vulnerable Dependency: @humanfs/node==0.16.7 — 1 advisory(ies): GHSA-p498-v437-472g (humanfs: Recursive copy follows symlinked files and copies data from outside the)

Low
Category
Supply Chain
Confidence
89% confidence
Finding
The lockfile pins @humanfs/node 0.16.7, which is reported vulnerable to recursive copy following symlinks and copying files from outside the intended tree. This is a real supply-chain risk, but in this specific skill the package is only a transitive devDependency of eslint and there is no evidence from this file that the vulnerable copy functionality is exercised at runtime by the skill itself, which reduces practical exposure.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"clawhub:sync": "clawhub sync --root . --bump patch --tags latest"
  },
  "devDependencies": {
    "@eslint/js": "^10.0.1",
    "eslint": "^10.0.2",
    "globals": "^17.3.0",
    "prettier": "^3.8.1"
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
},
  "devDependencies": {
    "@eslint/js": "^10.0.1",
    "eslint": "^10.0.2",
    "globals": "^17.3.0",
    "prettier": "^3.8.1"
  }
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Static analysis

No suspicious patterns detected.