← All CVEs NewScan detects
high

CVE-2026-101904

axios 1.x before 1.20.0: ten advisories fixed by one release - inherited-prototype config reaching the request (prototype pollution), two quadratic regular expressions, unhandled HTTP/2 session errors, HTTP/2 ignoring proxy settings (SSRF), and the fetch adapter bypassing maxRedirects: 0

Severity
high
Affected product
axios
Affected versions
axios ≥ 1.0.0, < 1.20.0
Fixed in
axios 1.20.0
Detection basis
Component version range
Shipped rule
axios: axios 1.x before 1.20.0: ten advisories fixed by one release - inherited-prototype config reaching the request (prototype pollution), two quadratic regular expressions, unhandled HTTP/2 session errors, HTTP/2 ignoring proxy settings (SSRF), and the fetch adapter bypassing maxRedirects: 0
Added to NewScan
2026-09-29
Detected by
NewScan — free, self-hosted

How NewScan reports it

COMPONENT VERSION RANGE

NewScan fingerprints axios from its response and reports this CVE when the detected version falls inside the affected range below.

Added 2026-09-29 (/daily-cve). ONE row for the whole batch on the Open WebUI / Langflow / iTop precedent - ten ids, one fix release, and ten rows would be ten findings that all say 'upgrade axios to 1.20.0'. The row's OWN id is CVE-2026-101904 because it is the only one affected across the entire range this row matches (1.0.0 until 1.20.0): dispatchRequest normalises an inherited Object.prototype.headers from a replaced prototype. The nine in `cves` share the 1.20.0 fix but each has its own floor inside the range - 101900 from 1.12.0, 101901 and 101898 from 1.13.0, 101908 from 1.7.0, 101906 from 1.15.0, 101909 from 1.15.1, 101905 from 1.15.2, 101903 from 1.16.1, 101907 from 1.17.0 - which is exactly what `cves` is for: it names ids the row covers WITHOUT version-matching them (docs/signature-packs.md section 3), and the version-matched claim is the primary id alone. CVE-2026-101902 is deliberately NOT listed here: NVD's 1.x bound for it is ambiguous in the feed text, so it sits only on the 0.x row below, where its range is stated unambiguously. Recorded `high`, not critical: the two that matter most on a server - 101898 (HTTP/2 request setup does not consistently apply proxy settings or caller-supplied options, so an allow-listed egress proxy is silently bypassed) and 101907 (the fetch adapter ignores maxRedirects: 0) - turn axios into an SSRF primitive, but only in an application that already routes a semi-trusted URL through it; the prototype-pollution set needs an attacker-influenced config object. VERSION SOURCE, named because a row without one is dead data: the mined manifest route. `mine_versions` fetches /package.json, /package-lock.json and /yarn.lock and joins concretely-pinned deps through `version_tools._techdb_names`, whose alias map is DERIVED from this pack's keys - `axios` is already a key, so this row is live the moment it publishes, no code. The retire.js in-page route (`analyze_technologies`) is NOT a source for this range and that is measured, not assumed: retirejs.scan only yields a component when its own corpus carries an advisory below that version, and the bundled corpus's highest axios bound is `below 1.16.0`, so a 1.16.1-1.19.x bundle returns []. A version-match-only row - confirming any of these in-band means driving the customer's own outbound requests.

References

Scan for this yourself — local, in-band scanning is free.

Get NewScan (FREE) →

Review the measured benchmark, then use the verified remediation process.