CVE-2026-33672
Medium · 5.3CVSS
5.3
EPSS
0.5%
Published
Mar 26, 2026
CISA due date
—
Cloudanix analysis
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.
- 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
- Find an application feature that accepts user-controlled glob patterns, file filters, include/exclude rules, ignore patterns, or path-matching input.
- Confirm or infer that the backend uses an affected Picomatch version to compile and evaluate those patterns.
- Submit crafted POSIX bracket expressions that reference inherited method names, for example [[:constructor:]].
- Trigger Picomatch to convert the crafted glob into a regular expression.
- Cause the generated regular expression to match a different set of filenames or paths than intended.
- 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
- GHSA-3v7f-55p6-f55p Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Matching Same vulnerability
- CVE-2026-33671 Picomatch is a glob matcher written JavaScript. Also affects picomatch
- GHSA-c2c7-rcm5-vvqj Picomatch has a ReDoS vulnerability via extglob quantifiers Also affects picomatch
- GHSA-f23m-r3pf-42rh lodash vulnerable to Prototype Pollution via array path bypass in `_.unset` and `_.omit` Also affects argo-workflows-ui-3.6
- CVE-2026-2950 Impact: Lodash versions 4.17.23 and earlier are vulnerable to prototype pollution in the… Also affects argo-workflows-ui-3.6
- GHSA-37ch-88jc-xwx2 path-to-regexp vulnerable to Regular Expression Denial of Service via multiple route… Also affects argo-workflows-ui-3.6
- CVE-2026-33750 The brace-expansion library generates arbitrary strings containing a common prefix and… Also affects argo-workflows-ui-3.6
- GHSA-f886-m6hf-6m8v brace-expansion: Zero-step sequence causes process hang and memory exhaustion Also affects argo-workflows-ui-3.6