Cloudanix VulnDB

CVE-2026-33672

Medium · 5.3

CVSS

5.3

EPSS

0.5%

Published

Mar 26, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A widely used file-pattern matching component could be tricked into matching the wrong files, which may let users bypass rules in applications that accept their file-matching patterns.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Data Tampering
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

CVE-2026-33672 is an input-validation flaw in the JavaScript glob-matching library Picomatch. Affected versions build regular expressions from POSIX bracket expressions using a POSIX_REGEX_SOURCE object that inherits from Object.prototype. Because inherited property names such as constructor can be referenced through crafted patterns like [[:constructor:]], JavaScript implicitly converts inherited methods to strings and incorporates them into the generated regular expression. The practical result is incorrect glob matching: patterns may match files or paths that the application did not intend to allow or deny. The issue is primarily an integrity flaw and is not described as enabling remote code execution, data disclosure, or direct denial of service.

Why it matters to the business

Applications that use Picomatch to enforce security-sensitive file, path, or pattern rules may make incorrect allow/deny decisions. This can affect upload validation, file inclusion/exclusion rules, build or CI/CD filters, authorization checks, policy enforcement, and tenant- or user-controlled pattern matching. The risk is highest where untrusted users can submit glob patterns and the application relies on the result for access control or filtering. Public exploit maturity is currently listed as none, EPSS is low at 0.0041, and it is not in CISA KEV or known ransomware use, so this is generally a patch-priority dependency integrity issue rather than an emergency internet-wide exploitation event.

How an attack unfolds

An attacker first identifies an application feature that accepts glob patterns, filename filters, ignore rules, include/exclude lists, search patterns, or similar user-controlled matching expressions processed by Picomatch. They then submit a crafted POSIX bracket expression that references an inherited Object.prototype method name, such as [[:constructor:]]. In vulnerable Picomatch versions, the library looks up the value through the prototype chain, implicitly stringifies the inherited method, and injects that string into the regular expression source it generates. The resulting regular expression no longer represents the intended POSIX class and may match unintended filenames or paths. If the application uses the match decision to enforce security or operational boundaries, the attacker may bypass filtering, include files that should have been excluded, exclude files that should have been included, or otherwise manipulate path-based logic.

How to fix it

Upgrade Picomatch to a fixed release: 4.0.4 or later for the 4.x line, 3.0.2 or later for the 3.x line, or 2.3.2 or later for the 2.x line. Because Picomatch is commonly pulled in transitively through other JavaScript tooling, update lockfiles and rebuild dependencies after upgrading direct or parent packages. If immediate upgrade is not possible, do not pass untrusted or user-controlled glob patterns to Picomatch. Reject or sanitize POSIX bracket expressions in user input, especially patterns of the form [[:...:]]. Consider disabling POSIX bracket expression support for untrusted input paths. As a temporary source-level mitigation, patch POSIX_REGEX_SOURCE so it uses a null-prototype object and cannot resolve inherited Object.prototype properties.

How to confirm the fix worked

Confirm dependency versions with package manager tooling such as npm ls picomatch, yarn why picomatch, pnpm why picomatch, or software composition analysis output. Validate that all resolved Picomatch instances are at 4.0.4+, 3.0.2+, or 2.3.2+, depending on the release line in use, and that package-lock.json, yarn.lock, or pnpm-lock.yaml no longer pins vulnerable versions. Where the application accepts user-supplied glob patterns, add regression tests using crafted POSIX expressions such as [[:constructor:]] and verify they are rejected, sanitized, or matched only according to expected safe behavior. For production exposure review, inventory endpoints, APIs, configuration features, CI/CD jobs, upload workflows, and search/filter functionality that process user-controlled glob expressions.

Typical attack path

  1. Find an application feature that accepts user-controlled glob patterns, file filters, include/exclude rules, ignore patterns, or path-matching input.
  2. Confirm or infer that the backend uses an affected Picomatch version to compile and evaluate those patterns.
  3. Submit crafted POSIX bracket expressions that reference inherited method names, for example [[:constructor:]].
  4. Trigger Picomatch to convert the crafted glob into a regular expression.
  5. Cause the generated regular expression to match a different set of filenames or paths than intended.
  6. Abuse the incorrect match result to bypass validation, alter filtering behavior, or manipulate access-control or workflow decisions that depend on glob matching.

How to detect it

Exploitation will usually appear as suspicious user-supplied glob input rather than malware or system-level artifacts. Review application logs, API request logs, web access logs, audit logs, CI/CD job logs, repository configuration changes, and file-filtering or search telemetry for POSIX bracket expressions containing inherited JavaScript property or method names. Focus on features that accept glob patterns, include/exclude rules, ignore patterns, path filters, upload filters, or repository/build configuration. Look for repeated testing of [[:...:]] values, especially constructor, __proto__, prototype, toString, valueOf, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, __defineGetter__, __defineSetter__, __lookupGetter__, and __lookupSetter__. Investigate cases where a suspicious pattern preceded unexpected file inclusion, exclusion, access, deployment, upload acceptance, policy bypass, or CI/CD workflow changes. Because this vulnerability causes logic errors rather than code execution, there are no reliable host-level process, registry, or binary indicators specific to this flaw.

  • [[:constructor:]]
  • [[:__proto__:]]
  • [[:prototype:]]
  • [[:toString:]]
  • [[:valueOf:]]
  • [[:hasOwnProperty:]]
  • [[:isPrototypeOf:]]
  • [[:propertyIsEnumerable:]]
  • [[:__defineGetter__:]]
  • [[:__defineSetter__:]]
  • [[:__lookupGetter__:]]
  • [[:__lookupSetter__:]]
  • POSIX_REGEX_SOURCE
  • picomatch

What your security team should do

  • Inventory all direct and transitive uses of Picomatch across JavaScript and Node.js applications, build tooling, CI/CD pipelines, and developer tooling.
  • Prioritize remediation for applications where users, external parties, plugins, repositories, or configuration files can supply glob patterns that affect access control, file selection, upload validation, deployment, or policy decisions.
  • Upgrade to Picomatch 4.0.4+, 3.0.2+, or 2.3.2+ and refresh lockfiles to ensure vulnerable transitive copies are removed.
  • Add input validation that rejects untrusted POSIX bracket expressions, particularly [[:...:]] syntax, unless there is a clear business need and safe parsing behavior is verified.
  • Add regression tests for crafted patterns such as [[:constructor:]] in any security-sensitive glob-matching code paths.
  • Review historical logs or audit trails for suspicious glob patterns if glob input is externally supplied or used in sensitive decisions.
  • Track upstream packages that depend on Picomatch and update parent packages where direct dependency override is not sufficient.

The record

Picomatch is a glob matcher written JavaScript. Versions prior to 4.0.4, 3.0.2, and 2.3.2 are vulnerable to a method injection vulnerability affecting the `POSIX_REGEX_SOURCE` object. Because the object inherits from `Object.prototype`, specially crafted POSIX bracket expressions (e.g., `[[:constructor:]]`) can reference inherited method names. These methods are implicitly converted to strings and injected into the generated regular expression. This leads to incorrect glob matching behavior (integrity impact), where patterns may match unintended filenames. The issue does not enable remote code execution, but it can cause security-relevant logic errors in applications that rely on glob matching for filtering, validation, or access control. All users of affected `picomatch` versions that process untrusted or user-controlled glob patterns are potentially impacted. This issue is fixed in picomatch 4.0.4, 3.0.2 and 2.3.2. Users should upgrade to one of these versions or later, depending on their supported release line. If upgrading is not immediately possible, avoid passing untrusted glob patterns to picomatch. Possible mitigations include sanitizing or rejecting untrusted glob patterns, especially those containing POSIX character classes like `[[:...:]]`; avoiding the use of POSIX bracket expressions if user input is involved; and manually patching the library by modifying `POSIX_REGEX_SOURCE` to use a null prototype.

Affected packages

Ecosystem Package Introduced Fixed
npm picomatch 0 2.3.2
npm picomatch 3.0.0 3.0.2
npm picomatch 4.0.0 4.0.4
Chainguard argo-workflows-ui-3.6 0 3.6.19-r5
Chainguard argo-workflows-ui-4.0 0 4.0.3-r2
Chainguard code-server 0 4.112.0-r2
Chainguard gemini-cli 0 0.35.3-r0
Chainguard kubeflow-pipelines-frontend 0 2.16.0-r11
Chainguard langfuse-2 0 2.95.12-r17
Chainguard langfuse-2-worker 0 2.95.12-r17
Chainguard langfuse-fips-2 0 2.95.12-r20
Chainguard langfuse-fips-2-worker 0 2.95.12-r20
Chainguard langfuse-fips-3-worker 0 3.163.0-r0
Chainguard lerna 0 9.0.7-r2
Chainguard node-gyp 0 12.2.0-r2
Chainguard npm 0 11.12.1-r0
Chainguard opensearch-dashboards-2 0 2.19.5-r3
Chainguard opensearch-dashboards-2-fips 0 2.19.5-r4
Chainguard opensearch-dashboards-3 0 3.5.0-r11
Chainguard opensearch-dashboards-3-fips 0 3.5.0-r8
Chainguard prism 0 5.14.3-r13
Chainguard pulumi-language-nodejs 0 3.229.0-r0
Chainguard rancher-api-ui 0 1.2.3-r8
Chainguard renovate 0 43.104.7-r1
Chainguard tileserver-gl 0 5.5.0-r11
Chainguard tileserver-gl-fips 0 5.5.0-r11
Chainguard wazuh-dashboard 0 4.14.4-r1
Wolfi argo-workflows-ui-4.0 0 4.0.3-r2
Wolfi code-server 0 4.112.0-r2
Wolfi kubeflow-pipelines-frontend 0 2.16.0-r11
Wolfi lerna 0 9.0.7-r2
Wolfi node-gyp 0 12.2.0-r2
Wolfi npm 0 11.12.1-r0
Wolfi opensearch-dashboards-2 0 2.19.5-r3
Wolfi opensearch-dashboards-3 0 3.5.0-r11
Wolfi prism 0 5.14.3-r13
Wolfi pulumi-language-nodejs 0 3.229.0-r0
Wolfi rancher-api-ui 0 1.2.3-r8
Wolfi renovate 0 43.104.7-r1
Wolfi tileserver-gl 0 5.5.0-r11

Related vulnerabilities