Axios: ReDoS in fromDataURI data: URL parser freezes the Node event loop (DoS)
Collected exploitation and prediction evidence
Risk source coverageCISA KEV is observed exploitation evidence. FIRST EPSS is a dated prediction of exploitation in the next 30 days. Missing scores are unknown. This collector requests predictions only for explicit CVE aliases in the public NuGet archive; Microsoft release views retain their existing prediction scope.
No collected risk observation for these identifiers. This does not establish absence of exploitation or a zero probability.
cve-program · CVE-2026-101903
PublishedAxios is a promise-based HTTP client for the browser and Node.js. From 1.16.1 until 1.20.0, the RFC 2397 regular expression allows slash characters on both sides of the media-type separator. An application passes an attacker-controlled malformed data URL containing many slash characters and no comma. the JavaScript regular-expression engine explores many separator placements before rejecting the URL. Synchronous excessive backtracking can block the Node.js event loop and cause denial of service. The affected identifiers are fromDataURI, DATA_URL_PATTERN, data:. This issue is fixed in version 1.20.0.
- Source published
- 28 Sep 2026 17:25:04 UTC
- Source modified
- 28 Sep 2026 17:49:24 UTC
- Observed here
- 23 Oct 2026 15:48:27 UTC
- Source terms
- CVE Program Terms of Use
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: cve-program · CVE Program Terms of Use. Source text is retained; field grouping and change labels are provided by ChangeIntel.
CVSS 4.0 · 8.2 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
euvd · EUVD-2026-88378
PublishedAxios is a promise-based HTTP client for the browser and Node.js. From 1.16.1 until 1.20.0, the RFC 2397 regular expression allows slash characters on both sides of the media-type separator. An application passes an attacker-controlled malformed data URL containing many slash characters and no comma. the JavaScript regular-expression engine explores many separator placements before rejecting the URL. Synchronous excessive backtracking can block the Node.js event loop and cause denial of service. The affected identifiers are fromDataURI, DATA_URL_PATTERN, data:. This issue is fixed in version 1.20.0.
EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.
Original publisher date fields
datePublished: Sep 28, 2026, 5:25:04 PM
dateUpdated: Sep 28, 2026, 5:49:24 PM
5 related source bulletins · separate from aliases
RHSA-2026:74869: Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update
CVE-2026-93981 · CVE-2026-101898 · CVE-2026-101900 · CVE-2026-101901 · CVE-2026-101902 · CVE-2026-101903 · CVE-2026-101904 · CVE-2026-101905 · CVE-2026-101906 · CVE-2026-101907 · CVE-2026-101908 · CVE-2026-101909
RHSA-2026:74871: Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update
CVE-2026-93450 · CVE-2026-101898 · CVE-2026-101900 · CVE-2026-101901 · CVE-2026-101902 · CVE-2026-101903 · CVE-2026-101904 · CVE-2026-101905 · CVE-2026-101906 · CVE-2026-101907 · CVE-2026-101908 · CVE-2026-101909
RHSA-2026:74872: Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update
CVE-2026-101898 · CVE-2026-101900 · CVE-2026-101901 · CVE-2026-101902 · CVE-2026-101903 · CVE-2026-101904 · CVE-2026-101905 · CVE-2026-101906 · CVE-2026-101907 · CVE-2026-101908 · CVE-2026-101909
WID-SEC-W-2026-4410: IBM App Connect Enterprise: Mehrere Schwachstellen
CVE-2026-100699 · CVE-2026-100700 · CVE-2026-100701 · CVE-2026-100702 · CVE-2026-101898 · CVE-2026-101900 · CVE-2026-101901 · CVE-2026-101902 · CVE-2026-101903 · CVE-2026-101904 · CVE-2026-101905 · CVE-2026-101906 · CVE-2026-101907 · CVE-2026-101908 · CVE-2026-101909 · CVE-2026-101915 · CVE-2026-101916 · CVE-2026-104850 · CVE-2026-106444 · CVE-2026-106445 · CVE-2026-106446 · CVE-2026-110869 · CVE-2026-111767 · CVE-2026-15187 · CVE-2026-33937 · CVE-2026-83745 · CVE-2026-84003 · CVE-2026-86535 · CVE-2026-90776 · CVE-2026-91863 · CVE-2026-91864 · CVE-2026-91865 · CVE-2026-91866 · CVE-2026-91867 · CVE-2026-93687 · CVE-2026-93749 · CVE-2026-94645 · CVE-2026-94646 · CVE-2026-96294
WID-SEC-W-2026-4056: Atlassian Produkte (Bamboo, Bitbucket, Confluence, Crucible, Fisheye und Jira): Mehrere Schwachstellen
CVE-2026-101898 · CVE-2026-101901 · CVE-2026-101903 · CVE-2026-101905 · CVE-2026-101906 · CVE-2026-101907 · CVE-2026-101909 · CVE-2026-12185 · CVE-2026-12802 · CVE-2026-12860 · CVE-2026-13006 · CVE-2026-13676 · CVE-2026-14682 · CVE-2026-18036 · CVE-2026-19534 · CVE-2026-19693 · CVE-2026-41842 · CVE-2026-41845 · CVE-2026-41850 · CVE-2026-49434 · CVE-2026-50750 · CVE-2026-53404 · CVE-2026-54399 · CVE-2026-54428 · CVE-2026-54512 · CVE-2026-54513 · CVE-2026-55153 · CVE-2026-55831 · CVE-2026-55833 · CVE-2026-56624 · CVE-2026-56745 · CVE-2026-58061 · CVE-2026-58062 · CVE-2026-59641 · CVE-2026-59645 · CVE-2026-59651 · CVE-2026-59903 · CVE-2026-62243 · CVE-2026-65182 · CVE-2026-65183 · CVE-2026-65637 · CVE-2026-65927 · CVE-2026-66422 · CVE-2026-67213 · CVE-2026-67214 · CVE-2026-68494 · CVE-2026-68495 · CVE-2026-68497 · CVE-2026-68498 · CVE-2026-68525 · CVE-2026-68569 · CVE-2026-68763 · CVE-2026-71888 · CVE-2026-71889 · CVE-2026-71891 · CVE-2026-73086 · CVE-2026-73507 · CVE-2026-73508 · CVE-2026-73634 · CVE-2026-73635 · CVE-2026-73646 · CVE-2026-75140 · CVE-2026-75595 · CVE-2026-75596 · CVE-2026-75975 · CVE-2026-76172 · CVE-2026-77185 · CVE-2026-84292 · CVE-2026-84375 · CVE-2026-93488 · CVE-2026-93491 · CVE-2026-93558 · CVE-2026-93690 · CVE-2026-93748 · CVE-2026-93994
- Source published
- Sep 28, 2026, 5:25:04 PM (timezone not stated)
- Source modified
- Sep 28, 2026, 5:49:24 PM (timezone not stated)
- Observed here
- 11 Nov 2026 05:28:13 UTC
- Source terms
- ENISA EUVD · source terms and attribution apply
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: euvd · ENISA EUVD · source terms and attribution apply. Source text is retained; field grouping and change labels are provided by ChangeIntel.
EUVD CVSS 4.0 · 8.2 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
nvd · CVE-2026-101903
PublishedAxios is a promise-based HTTP client for the browser and Node.js. From 1.16.1 until 1.20.0, the RFC 2397 regular expression allows slash characters on both sides of the media-type separator. An application passes an attacker-controlled malformed data URL containing many slash characters and no comma. the JavaScript regular-expression engine explores many separator placements before rejecting the URL. Synchronous excessive backtracking can block the Node.js event loop and cause denial of service. The affected identifiers are fromDataURI, DATA_URL_PATTERN, data:. This issue is fixed in version 1.20.0.
NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.
Source analysis status: Awaiting Analysis
Weakness classifications: CWE-1333
Original publisher date fields
published: 2026-09-28T18:17:18.560
lastModified: 2026-09-30T19:38:27.293
- Source published
- 28 Sep 2026 18:17:18 UTC
- Source modified
- 30 Sep 2026 19:38:27 UTC
- Observed here
- 25 Oct 2026 04:17:26 UTC
- Source terms
- NIST NVD usage terms; underlying source attribution retained
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: nvd · NIST NVD usage terms; underlying source attribution retained. Source text is retained; field grouping and change labels are provided by ChangeIntel.
CVSS 4.0 · [email protected] · Secondary · 8.2 CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
osv · GHSA-c29m-xwm3-cm6r
Published## Summary Axios for Node.js parses `data:` URLs in `lib/helpers/fromDataURI.js`. The current RFC-2397 parser uses a regular expression whose media type groups allow `/` inside both sides of the `type/subtype` match. A malformed `data:` URL containing many slashes and no comma forces the JavaScript regex engine to try many possible placements for the separator before failing. Applications are affected when they pass untrusted URL strings to axios and do not reject or constrain `data:` URLs before axios parses them. ## Impact An attacker can make the Node.js event loop spend significant synchronous CPU time parsing a single malformed URL. In a server that accepts a URL from an HTTP request and calls `axios.get(url)`, this can block unrelated requests and health checks until parsing completes. The issue is availability-only. It does not disclose data or modify requests. ## Affected Functionality Affected: - Node.js HTTP adapter data URL handling. - `axios.get()` or equivalent calls where `config.url` has the `data:` protocol. Not affected: - Browser fetch/XHR URL handling. - Node requests where the application rejects `data:` URLs before calling axios. - Older checked `0.x` data URL parser shape unless separately proven vulnerable. ## Technical Details `lib/helpers/fromDataURI.js` contains: ```js const DATA_URL_PATTERN = /^([^,;]+\/[^,;]+)?((?:;[^,;=]+=[^,;]+)*)(;base64)?,([\s\S]*)$/; ``` The `[^,;]+` groups include `/`, so a long string of slashes without a comma can be partitioned around the required `\/` in many ways before the match fails. The match runs before axios can apply request timeout behavior, so `timeout` does not mitigate the parsing pause. Local timing on axios `1.18.1` with small payloads showed about 2.4 ms at 1000 slashes, 16.6 ms at 3000 slashes, and 71.5 ms at 6000 slashes, consistent with the submitted quadratic scaling while avoiding long-running payloads. ## Proof of Concept of Attack Constrained helper-level demonstration: ```js import axios from 'axios'; await axios.get('data:' + '/'.repeat(6000)); ``` The request fails after parsing, but the failure is delayed by synchronous regex work. Larger payloads increase the pause substantially. ## Workarounds Reject `data:` URLs before passing untrusted input to axios, or enforce a strict maximum URL length for URL-fetching endpoints. Applications that do not need `data:` URL support should deny that protocol explicitly. <details> <summary><h3>Original report</h3></summary> # ReDoS in `fromDataURI` data: URL parser freezes the event loop (DoS) ## Affected - Package: `axios` (Node.js http adapter) - Versions: 1.x (regex present on `v1.x`, current release line) - File: `lib/helpers/fromDataURI.js` - CWE-1333 (Inefficient Regular Expression Complexity) ## Issue `fromDataURI` parses `data:` URLs with this regex: ```js // lib/helpers/fromDataURI.js:9 const DATA_URL_PATTERN = /^([^,;]+\/[^,;]+)?((?:;[^,;=]+=[^,;]+)*)(;base64)?,([\s\S]*)$/; ``` The mediatype tokens `[^,;]+` include `/`, so they can span multiple slashes ambiguously. A `data:` URL made of many slashes with no comma forces the engine to try every way to place the single `\/` divider before failing — quadratic O(n²) backtracking. It runs synchronously on the main thread, so the whole Node event loop is frozen for the entire parse. Reachable through the public API on the Node http adapter (`axios.get(url)`); the browser fetch/xhr adapters are not affected because they do not call `fromDataURI`. A configured `timeout` does not help: the freeze happens during parsing, before any network timer can fire. ## PoC (minimal) ```js import axios from 'axios'; // ~256 KB data: URL of pure slashes, no comma await axios.get('data:' + '/'.repeat(262139)); // blocks the event loop ~6 min, then throws ``` ## Lab results Single-threaded "fetch a user-supplied URL" service (link-preview style) calling `axios.get` on a JSON body `{ "url": "..." }`, with `timeout: 1000` set. Scaling is clean O(n²) (constant k ≈ 5.6e-6 ms/byte², stable across sizes): | data: URL size | Event-loop freeze (one request) | | --- | --- | | 32 KB | 6.3 s (measured end-to-end; server logged `event loop BLOCKED for 6.30s`) | | 64 KB | ~24 s | | 128 KB | ~96 s | | 256 KB | ~385 s (~6.4 min) | | 1 MB | ~100 min | During the freeze the server answers nothing: a `/healthz` liveness probe times out for the whole window, and the server's own event-loop monitor cannot even log until the parse finishes. In a run through an intercepting proxy, the proxy hit its 120 s upstream timeout and gave up, while the origin stayed pegged at 100% CPU on one core past that — client/proxy timeouts do not mitigate it. The attacker controls only the URL string and needs no auth. ~256 KB every ~6 min (≈ 0.7 bytes/sec) keeps a server permanently unavailable. ## Impact Unauthenticated remote denial of service. One small request takes a Node service fully offline for minutes; a trickle keeps it down indefinitely. CVSS 3.1: 7.5 (High) — `AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H`. ## Fix RFC 2045 type/subtype tokens never contain `/`. Excluding `/` from those two character classes removes the ambiguity and the backtracking: ```js const DATA_URL_PATTERN = /^([^,;/]+\/[^,;/]+)?((?:;[^,;=]+=[^,;]+)*)(;base64)?,([\s\S]*)$/; ``` Worst-case parse drops from ~2600 ms to ~0.002 ms. All valid `data:` URLs, including slashes in the body, parse identically. </details> ---
- Source published
- 30 Sep 2026 15:03:21 UTC
- Source modified
- 30 Sep 2026 15:15:04 UTC
- Observed here
- 24 Oct 2026 13:17:17 UTC
- Source terms
- GitHub Advisory Database · CC-BY-4.0
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.
CVSS_V4 · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Publisher rating · HIGH