Back to skill

Security audit

RegexVisualizer

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says, but it runs a local browser with sandboxing disabled and depends on scanner-flagged browser tooling, so users should review it before installing.

Install only if you are comfortable running a headless local browser from this skill. Prefer using trusted regex inputs, keep Chrome/Edge and npm dependencies updated, and consider editing the launcher to remove --no-sandbox or running it in a locked-down container or low-privilege account.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/render.mjs:190
Finding
Chromium Browser Sandbox Is Unconditionally Disabled## Vulnerability Details **File Location**: `scripts/render.mjs`, lines 190–197 **Vulnerability Type**: Browser sandbox disabled during processing of user-controlled input **Risk Level**: High ```js const browser = await puppeteer.launch({ executablePath: chrome.includes("\\") || chrome.includes("/") ? chrome : undefined, headless: true, args: [ "--disable-gpu", "--no-sandbox", "--disable-dev-shm-usage", ], ``` ### Technical Analysis The script unconditionally launches Chrome or Edge with the `--no-sandbox` argument. The Chromium sandbox is a primary defense-in-depth boundary that limits the operating-system access available to compromised renderer processes. The browser loads the bundled `assets/regulex.html` page and processes a user-supplied regular expression through its embedded JavaScript renderer. No malicious behavior was identified in that bundled page. However, if specially crafted input triggers a vulnerability in the browser or rendering code, disabling the sandbox substantially increases the potential consequences. Code executing through a compromised renderer would not benefit from Chromium's normal sandbox containment. The regular expression is URL-encoded before being placed in the fragment, so the reviewed code does not establish direct HTML or JavaScript injection. Exploitation would require a separate vulnerability in Chromium or the bundled rendering implementation; therefore, this finding represents unsafe hardening rather than a demonstrated direct code-execution primitive. ### Attack Path 1. An attacker supplies a specially crafted regular expression to the `--re` argument. 2. The script URL-encodes the expression and includes it in the fragment of the local `assets/regulex.html` URL. 3. Puppeteer launches the local browser with `--no-sandbox`. 4. The bundled JavaScript renderer and browser process the attacker-controlled expression. 5. If the input triggers an exploitable vulnerability in Chromium or the render ...[truncated 855 chars]
Remediation
## Remediation Suggestions 1. Remove `--no-sandbox` from the default Chromium arguments and run with the browser sandbox enabled. 2. If a deployment environment cannot support Chromium sandboxing, fail safely and document the required host or container configuration instead of silently weakening isolation. 3. If sandbox disabling must remain available for compatibility, require an explicit opt-in command-line option with a prominent security warning. 4. Run any explicitly unsandboxed browser inside an additional isolation boundary, such as a locked-down container, virtual machine, or dedicated low-privilege operating-system account. 5. Restrict container permissions, mount only required files, use a read-only root filesystem where possible, disable unnecessary capabilities, and deny access to sensitive host paths and metadata services. 6. Keep Chrome or Edge and the bundled renderer updated to minimize exposure to known browser and rendering vulnerabilities. 7. Consider validating limits for input length, rendering scale, and timeout to reduce the attack surface for resource-exhaustion inputs.
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Ae1

High
Category
analysis-evasion
Content
node scripts/render.mjs `
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/render.mjs `
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/render.mjs `
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/render.mjs `
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
node scripts/render.mjs `
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- Uses `assets/regulex.html` (a copy of the Regulex-Plus web UI) and loads it with `#!cmd=export&flags=...&re=...`.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
- Uses `assets/regulex.html` (a copy of the Regulex-Plus web UI) and loads it with `#!cmd=export&flags=...&re=...`.
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Known Vulnerable Dependency: basic-ftp==5.2.0 — 4 advisory(ies): GHSA-6v7q-wjvx-w8wg (basic-ftp: Incomplete CRLF Injection Protection Allows Arbitrary FTP Command Exe); CVE-2026-39983 (basic-ftp has FTP Command Injection via CRLF); CVE-2026-41324 (basic-ftp vulnerable to denial of service via unbounded memory consumption in Cl) +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: extract-zip==2.0.1 — 2 advisory(ies): CVE-2026-19693 (extract-zip allows arbitrary file writes through symlink archive entries); CVE-2026-56876 (extract-zip unvalidated symlink path traversal)

High
Category
Supply Chain
Confidence
93% confidence
Finding
extract-zip 2.0.1 is a real vulnerable package and is pulled in by @puppeteer/browsers, where it may process downloaded browser archives. If the skill ever downloads or installs browser binaries from an archive, symlink/path traversal bugs can permit arbitrary file write outside the intended extraction directory, which can lead to overwrite of sensitive files or code execution depending on context.

Known Vulnerable Dependency: ip-address==10.1.0 — 2 advisory(ies): CVE-2026-69192 (ip-address: Address4 decodes leading-zero octets as decimal while resolvers deco); CVE-2026-42338 (ip-address has XSS in Address6 HTML-emitting methods)

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: ws==8.19.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
95% confidence
Finding
ws 8.19.0 is a real vulnerable dependency used directly by puppeteer-core for DevTools/WebDriver BiDi communication. A memory disclosure or memory exhaustion issue in WebSocket handling could be exploited by a malicious or compromised browser endpoint, or by hostile network conditions if the debugging transport is exposed, causing denial of service and potentially leaking process memory.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The manifest describes a renderer that takes a regex and produces SVG/PNG matching the Regulex-Plus UI. In addition to that core rendering task, the script consumes CHROME_PATH/PUPPETEER_EXECUTABLE_PATH from the host environment and also accepts an arbitrary --chrome executable path, allowing execution of whatever binary the caller or environment points to.

Unpinned Dependencies

Low
Category
Supply Chain
Content
"version": "1.0.0",
  "type": "module",
  "dependencies": {
    "puppeteer-core": "^24.0.0"
  }
}
Confidence
40% confidence
Finding
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Context-Inappropriate Capability

Low
Confidence
76% confidence
Finding
The stated purpose is exporting a regex diagram image, but the implementation probes OS-specific installation locations and falls back to PATH-based executable names to find Chrome or Edge. While related to launching a browser, this host-environment discovery capability is not disclosed in the manifest and goes beyond a simple render-only description.

Static analysis

No suspicious patterns detected.