Cloudanix VulnDB

CVE-2026-27903

High · 7.5

CVSS

7.5

EPSS

0.6%

Published

Feb 26, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A small specially crafted file-matching pattern can make affected JavaScript tools or services freeze, delaying builds or making applications unavailable.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This is an algorithmic denial-of-service flaw in the JavaScript minimatch package. Vulnerable versions perform unbounded recursive backtracking in matchOne() when evaluating glob patterns that contain multiple non-adjacent GLOBSTAR segments, such as repeated ** components, against a path that does not match. The matching cost grows binomially with the number of path segments and globstars, and there is no memoization, timeout, or recursion budget to cap evaluation. In Node.js applications, a single crafted glob can block the event loop for seconds to tens of seconds per invocation, causing request latency, worker starvation, build pipeline hangs, or service unavailability. The flaw affects minimatch before 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3; the upstream Git fix is commit ea94840326c3f40522f1b544bd2303024b0eec35.

Why it matters to the business

Systems that accept user-controlled glob patterns may be slowed or made unavailable with small inputs. The most likely impact is operational disruption: stalled CI/CD jobs, delayed builds, unresponsive developer tooling, degraded multi-tenant services, or API workers consumed by expensive pattern matching. The issue has a high availability impact but no direct confidentiality or integrity impact. It is not currently listed in CISA KEV, is not known to be used in ransomware campaigns, and has low EPSS at 0.00517, but it has been public for 165 days and is easy to trigger wherever untrusted glob input reaches minimatch.

How an attack unfolds

An attacker first identifies a feature that accepts glob syntax and is evaluated by minimatch, such as file include or exclude rules, ignore patterns, build configuration, linting configuration, user-defined filters, task runner arguments, or tenant-specific matching rules. They then submit a compact glob pattern containing many separated ** segments and cause the application to compare it with paths that do not match. In vulnerable minimatch versions, matchOne() recursively explores a large number of combinations while trying to satisfy the globstars. Because Node.js runs JavaScript on a single event loop per worker, the expensive synchronous computation blocks other work in that process. Repeating the request, commit, configuration update, or build trigger can keep workers or pipelines saturated. Exploitation does not require code execution; it only requires the ability to influence a glob pattern in a path that the application evaluates.

How to fix it

Upgrade minimatch to a fixed release in every dependency path. Fixed versions are 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3, with upstream Git fix ea94840326c3f40522f1b544bd2303024b0eec35. Because minimatch is commonly transitive, update lockfiles and rebuild artifacts, not only direct package manifests. Use npm, yarn, pnpm, or the relevant software composition analysis tooling to identify all installed vulnerable minimatch versions. If immediate upgrade is not possible, restrict untrusted glob input: cap pattern length, limit the number of ** segments, reject patterns with repeated non-adjacent globstars, evaluate matching in isolated worker processes with execution time limits, rate-limit endpoints that evaluate globs, and avoid running tenant-supplied glob evaluation in shared long-lived processes.

How to confirm the fix worked

Confirm that all deployed, built, and packaged artifacts resolve minimatch to a fixed version: 10.2.3 or later in the 10.x line, 9.0.7 or later in the 9.x line, 8.0.6 or later in the 8.x line, 7.4.8 or later in the 7.x line, 6.2.2 or later in the 6.x line, 5.1.8 or later in the 5.x line, 4.2.5 or later in the 4.x line, or 3.1.3 or later in the 3.x line. Validate package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, container images, serverless bundles, and vendored node_modules directories. Run dependency scans such as npm ls minimatch, npm audit, yarn why minimatch, pnpm why minimatch, or SCA tooling against the final deployable artifact. Where safe, add regression tests that evaluate hostile multi-globstar patterns and assert bounded execution time. Also confirm that application-level controls reject or isolate untrusted glob patterns with excessive ** usage.

Typical attack path

  1. Find an application, build pipeline, developer tool, or multi-tenant feature that accepts glob-style include, exclude, ignore, or filter rules.
  2. Confirm or infer that the feature is implemented using a vulnerable minimatch dependency version.
  3. Submit a crafted glob containing many non-adjacent ** segments through a request parameter, configuration file, repository file, admin setting, tenant rule, or CI/CD job input.
  4. Cause the service or pipeline to evaluate the crafted pattern against paths that do not match.
  5. The vulnerable matchOne() routine performs excessive recursive backtracking and blocks the Node.js event loop.
  6. Repeat or parallelize submissions to create sustained latency, worker exhaustion, failed builds, or service unavailability.

How to detect it

To determine whether this was already exploited, review logs from features that accept glob, include, exclude, ignore, or filter patterns. Relevant sources include API access logs, application audit logs, admin setting change logs, tenant rule history, CI/CD job logs, build tool output, repository commits containing configuration files, package manager logs, and Node.js process telemetry. Look for short glob values with many ** segments, especially repeated non-adjacent globstars submitted shortly before request timeouts, build hangs, high CPU, event-loop delay alerts, worker restarts, or autoscaling events. Correlate suspicious pattern submissions with spikes in response time, HTTP 408/429/500/502/503/504 responses, job cancellations, container CPU throttling, and Node.js event-loop lag. For forensics, preserve the exact submitted pattern, request metadata, user or automation identity, source IP where available, application logs around the stall, and process metrics. There are no unique malware-style indicators because this vulnerability is triggered through data input rather than dropping files or spawning processes.

  • minimatch
  • matchOne
  • GLOBSTAR
  • **/**/**/**/**
  • **/*/**/*/**/*/**
  • **/a/**/a/**/a/**/a/**
  • \*\*/[^\n]*\*\*/[^\n]*\*\*/[^\n]*\*\*/[^\n]*\*\*/
  • event loop delay
  • event-loop delay
  • Event loop blocked
  • JavaScript heap out of memory
  • Build timed out
  • Job timed out
  • Request timeout
  • HTTP 504
  • HTTP 503
  • npm ls minimatch
  • node_modules/minimatch/package.json
  • package-lock.json
  • yarn.lock
  • pnpm-lock.yaml

What your security team should do

  • Prioritize inventory of internet-facing services, CI/CD systems, developer portals, and multi-tenant platforms that accept user-controlled glob patterns.
  • Upgrade minimatch to a fixed version across direct and transitive dependencies, and regenerate lockfiles and deployable artifacts.
  • Search dependency manifests and lockfiles for vulnerable minimatch versions before 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3.
  • Add input validation for glob fields: cap length, limit globstar count, and reject repeated non-adjacent ** segments from untrusted users.
  • Run glob evaluation in isolated workers or subprocesses with CPU and wall-clock time limits when untrusted patterns are a required product feature.
  • Monitor for sudden increases in Node.js event-loop delay, request latency, worker restarts, build timeouts, and repeated submissions of suspicious glob patterns.
  • Create SIEM detections for configuration changes, API requests, commits, or CI job inputs containing repeated ** globstar sequences.
  • Treat exploitation as an availability incident: collect pattern inputs, affected endpoints or jobs, timing data, process CPU samples, and tenant or user activity logs before rotating logs.

The record

minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3, `matchOne()` performs unbounded recursive backtracking when a glob pattern contains multiple non-adjacent `**` (GLOBSTAR) segments and the input path does not match. The time complexity is O(C(n, k)) -- binomial -- where `n` is the number of path segments and `k` is the number of globstars. With k=11 and n=30, a call to the default `minimatch()` API stalls for roughly 5 seconds. With k=13, it exceeds 15 seconds. No memoization or call budget exists to bound this behavior. Any application where an attacker can influence the glob pattern passed to `minimatch()` is vulnerable. The realistic attack surface includes build tools and task runners that accept user-supplied glob arguments (ESLint, Webpack, Rollup config), multi-tenant systems where one tenant configures glob-based rules that run in a shared process, admin or developer interfaces that accept ignore-rule or filter configuration as globs, and CI/CD pipelines that evaluate user-submitted config files containing glob patterns. An attacker who can place a crafted pattern into any of these paths can stall the Node.js event loop for tens of seconds per invocation. The pattern is 56 bytes for a 5-second stall and does not require authentication in contexts where pattern input is part of the feature. Versions 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3 fix the issue.

Affected packages

Ecosystem Package Introduced Fixed
npm minimatch 0 3.1.3
npm minimatch 10.0.0 10.2.3
npm minimatch 4.0.0 4.2.5
npm minimatch 5.0.0 5.1.8
npm minimatch 6.0.0 6.2.2
npm minimatch 7.0.0 7.4.8
npm minimatch 8.0.0 8.0.6
npm minimatch 9.0.0 9.0.7
Chainguard actions-runner 0 2.332.0-r1
Chainguard arangodb-3.11 0 3.11.14.3-r2
Chainguard arangodb-3.12 0 3.12.7.2-r3
Chainguard code-server 0 4.109.2-r0
Chainguard emscripten 0 5.0.2-r1
Chainguard eslint 0 10.0.2-r1
Chainguard graalvm-25-ce-nodejs 0 25.0.2-r4
Chainguard kibana-8.17 0 8.17.10-r12
Chainguard kibana-8.17-bitnami 0 8.17.10-r12
Chainguard kibana-8.17-iamguarded 0 8.17.10-r12
Chainguard kibana-8.19 0 8.19.12-r2
Chainguard kibana-8.19-bitnami 0 8.19.12-r2
Chainguard kibana-8.19-iamguarded 0 8.19.12-r2
Chainguard kibana-9.0 0 9.0.8-r13
Chainguard kibana-9.0-bitnami 0 9.0.8-r13
Chainguard kibana-9.0-iamguarded 0 9.0.8-r13
Chainguard kibana-9.1 0 9.1.10-r6
Chainguard kibana-9.1-iamguarded 0 9.1.10-r6
Chainguard kibana-9.2 0 9.2.5-r5
Chainguard kibana-9.2-iamguarded 0 9.2.5-r5
Chainguard kibana-9.3 0 9.3.0-r2
Chainguard kibana-9.3-iamguarded 0 9.3.0-r2
Chainguard langfuse-2-worker 0 2.95.12-r12
Chainguard lerna 0 9.0.5-r1
Chainguard librechat 0 0.8.2-r6
Chainguard node-gyp 0 12.2.0-r2
Chainguard npm 0 11.11.0-r1
Chainguard opensearch-dashboards-2 0 2.19.4-r15
Chainguard opensearch-dashboards-2-dashboards-reporting 0 2.19.4-r15
Chainguard opensearch-dashboards-2-fips 0 2.19.4-r13
Chainguard opensearch-dashboards-2-fips-dashboards-reporting 0 2.19.4-r13
Chainguard opensearch-dashboards-3 0 3.5.0-r6
Chainguard opensearch-dashboards-3-dashboards-reporting 0 3.5.0-r6
Chainguard opentelemetry-auto-instrumentations-node 0 0.70.1-r1
Chainguard prism 0 5.14.3-r8
Chainguard pulumi-language-nodejs 0 3.224.0-r1
Chainguard renovate 0 43.49.0-r1
Chainguard serve 0 14.2.6-r0
Chainguard tileserver-gl 0 5.5.0-r6
Chainguard tileserver-gl-fips 0 5.5.0-r7
Chainguard vitess-22 0 22.0.4-r4
Chainguard vitess-23 0 23.0.3-r5
Wolfi code-server 0 4.109.2-r0
Wolfi eslint 0 10.0.2-r1
Wolfi lerna 0 9.0.5-r1
Wolfi node-gyp 0 12.2.0-r2
Wolfi npm 0 11.11.0-r1
Wolfi opensearch-dashboards-2 0 2.19.4-r15
Wolfi opensearch-dashboards-2-dashboards-reporting 0 2.19.4-r15
Wolfi opensearch-dashboards-3 0 3.5.0-r6
Wolfi opensearch-dashboards-3-dashboards-reporting 0 3.5.0-r6
Wolfi prism 0 5.14.3-r8
Wolfi pulumi-language-nodejs 0 3.224.0-r1
Wolfi renovate 0 43.49.0-r1
Wolfi serve 0 14.2.6-r0
Wolfi tileserver-gl 0 5.5.0-r6
Wolfi vitess-22 0 22.0.4-r4
Wolfi vitess-23 0 23.0.3-r5

Related vulnerabilities