Back to skill

Security audit

Extract Design System

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says, but it tells agents to run unpinned third-party npm commands that can execute changing external code locally.

Review before installing. Prefer running a pinned, lockfile-managed version of extract-design-system and Playwright, or run the extraction in a sandbox/container with minimal filesystem and credential access. The skill should not be allowed to modify existing app code unless you explicitly ask it to.

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
SKILL.md:27
Finding

Unpinned Third-Party Packages Are Downloaded and Executed via npx

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:27-28
Vulnerability Type: Unpinned third-party dependency execution
Risk Level: Medium

bash
npx playwright install chromium
npx extract-design-system <url>

The same unsafe execution pattern also appears in references/workflow.md:5-6:

text
0. If Chromium is missing locally, run `npx playwright install chromium`
1. `npx extract-design-system <url>`

Additional unpinned invocations of extract-design-system occur at SKILL.md:42, SKILL.md:49, references/workflow.md:11, and references/workflow.md:13.

Technical Analysis

The Skill instructs the agent to invoke npm package executables through npx without specifying exact, reviewed versions. If a suitable local package is unavailable, npx can retrieve a package from the configured npm registry and execute it immediately. The effective executable may therefore change after the Skill has been audited.

Neither an exact package version nor lockfile-based integrity verification is specified. This creates a supply-chain trust boundary in which a compromised package release, transferred package ownership, malicious update, registry compromise, or unexpected upstream behavior can result in arbitrary third-party code being executed locally.

The Playwright command additionally initiates installation of a Chromium browser binary through dependency-controlled tooling, expanding the external artifact trust surface.

Attack Path

  1. An attacker compromises an npm maintainer account, package release process, package ownership, or relevant distribution infrastructure.
  2. The attacker publishes a malicious release under one of the referenced package names.
  3. A user loads this Skill and requests design-system extraction.
  4. The agent follows the documented command using unversioned npx.
  5. If the package is not already available locally, npx resolves and downloads the current registry version.
  6. The downloaded pack ...[truncated 763 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin each executable package to an exact, reviewed version rather than using an unqualified package name.
  2. Declare dependencies in a project manifest and commit a lockfile containing integrity hashes.
  3. Install dependencies in a controlled step with lockfile enforcement, such as npm ci, and review installation scripts before use.
  4. Invoke the preinstalled local executable with npx --no-install or an equivalent package-manager command that forbids implicit downloads.
  5. Verify npm package provenance, publisher identity, registry source, and release integrity before approving upgrades.
  6. Pin and validate browser artifacts downloaded by Playwright where the deployment process permits it.
  7. Run the extraction process in a sandbox or container with minimal filesystem access, no unnecessary credentials, restricted network access, and least-privilege permissions.
  8. Apply the same controls to every documented invocation at SKILL.md:42,49 and references/workflow.md:11,13.
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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (9)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
- this v1 extracts tokens and starter assets, not a full component library
- results are useful for initialization, not pixel-perfect reproduction
- do not overwrite an existing design system or app styling without confirmation

## Workflow

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The skill instructs the agent to execute npx playwright install chromium without pinning an exact package version. Unpinned npx execution pulls code at runtime from the registry, which creates a supply-chain risk: a compromised latest release, dependency hijack, or unexpected breaking change could cause arbitrary code execution in the agent environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The command npx extract-design-system <url> executes an unpinned package directly from the package registry. Because the package is fetched and run at invocation time, the skill exposes the environment to arbitrary code execution if the package or one of its dependencies is malicious, compromised, or unexpectedly changed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This --extract-only variant still invokes npx extract-design-system without version pinning, so it carries the same supply-chain and arbitrary code execution risk as the main command. The fact that it is framed as a limited mode does not reduce the core danger, because the package must still be downloaded and executed.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The npx extract-design-system init instruction again relies on unpinned runtime package execution. Even though this path only regenerates local starter files, it still grants the fetched package code execution privileges in the environment and could modify files or exfiltrate data.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The workflow instructs users to run npx playwright install chromium without pinning a specific package version. Because npx resolves and executes packages from the registry dynamically, a compromised upstream release, typosquatted dependency path, or unexpected latest-version change could cause unreviewed code to run on the user's machine.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The command npx extract-design-system <url> executes an unpinned package directly from the registry, which is especially risky because this skill is explicitly about fetching and processing untrusted third-party websites. If the package or a dependency is malicious or unexpectedly changed, the user could execute arbitrary code locally while handling attacker-controlled input.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The documented npx extract-design-system <url> --extract-only invocation is another unpinned remote package execution path. Even though --extract-only sounds safer functionally, it still requires trusting whatever code npx fetches at execution time, creating a supply-chain execution risk on the local system.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The npx extract-design-system init command also runs an unpinned package from the registry. Since the workflow encourages regenerating local files, a malicious or altered upstream package could modify project assets or execute arbitrary code during initialization.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.