fix(deps): update dependency axios to v1.20.0 #1
No reviewers
Labels
No labels
bug
dependencies
documentation
duplicate
enhancement
good first issue
help wanted
invalid
javascript
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Griefed/serverpackcreator-de!1
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/axios-1.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
1.3.4→1.20.0Axios Cross-Site Request Forgery Vulnerability
CVE-2023-45857 / GHSA-wf5p-g6vw-rhxx
More information
Details
An issue discovered in Axios 0.8.1 through 1.5.1 inadvertently reveals the confidential XSRF-TOKEN stored in cookies by including it in the HTTP header X-XSRF-TOKEN for every request made to any host allowing attackers to view sensitive information.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Server-Side Request Forgery in axios
CVE-2024-39338 / GHSA-8hc4-vh64-cxmj
More information
Details
axios 1.7.2 allows SSRF via unexpected behavior where requests for path relative URLs get processed as protocol relative URLs.
Severity
High
References
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL
CVE-2025-27152 / GHSA-jr5f-v2jv-69x6
More information
Details
Summary
A previously reported issue in axios demonstrated that using protocol-relative URLs could lead to SSRF (Server-Side Request Forgery). Reference: axios/axios#6463
A similar problem that occurs when passing absolute URLs rather than protocol-relative URLs to axios has been identified. Even if
baseURLis set, axios sends the request to the specified absolute URL, potentially causing SSRF and credential leakage. This issue impacts both server-side and client-side usage of axios.Details
Consider the following code snippet:
In this example, the request is sent to
http://attacker.test/instead of thebaseURL. As a result, the domain owner ofattacker.testwould receive theX-API-KEYincluded in the request headers.It is recommended that:
baseURLis set, passing an absolute URL such ashttp://attacker.test/toget()should not ignorebaseURL.baseURLwith the user-provided parameter), axios should verify that the resulting URL still begins with the expectedbaseURL.PoC
Follow the steps below to reproduce the issue:
Even though
baseURLis set tohttp://localhost:10001/, axios sends the request tohttp://localhost:10002/.Impact
baseURLand does not validate path parameters is affected by this issue.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:PReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios is vulnerable to DoS attack through lack of data size check
CVE-2025-58754 / GHSA-4hjh-wcwx-xvwj
More information
Details
Summary
When Axios runs on Node.js and is given a URL with the
data:scheme, it does not perform HTTP. Instead, its Node http adapter decodes the entire payload into memory (Buffer/Blob) and returns a synthetic 200 response.This path ignores
maxContentLength/maxBodyLength(which only protect HTTP responses), so an attacker can supply a very largedata:URI and cause the process to allocate unbounded memory and crash (DoS), even if the caller requestedresponseType: 'stream'.Details
The Node adapter (
lib/adapters/http.js) supports thedata:scheme. Whenaxiosencounters a request whose URL starts withdata:, it does not perform an HTTP request. Instead, it callsfromDataURI()to decode the Base64 payload into a Buffer or Blob.Relevant code from
[httpAdapter](https://github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/adapters/http.js#L231):The decoder is in
[lib/helpers/fromDataURI.js](https://github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/helpers/fromDataURI.js#L27):config.maxContentLengthorconfig.maxBodyLength, which only apply to HTTP streams.data:URI of arbitrary size can cause the Node process to allocate the entire content into memory.In comparison, normal HTTP responses are monitored for size, the HTTP adapter accumulates the response into a buffer and will reject when
totalResponseBytesexceeds[maxContentLength](https://github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/adapters/http.js#L550). No such check occurs fordata:URIs.PoC
Run with limited heap to force a crash:
Since Node heap is capped at 100 MB, the process terminates with an out-of-memory error:
Mini Real App PoC:
A small link-preview service that uses axios streaming, keep-alive agents, timeouts, and a JSON body. It allows data: URLs which axios fully ignore
maxContentLength,maxBodyLengthand decodes into memory on Node before streaming enabling DoS.Run this app and send 3 post requests:
Suggestions
Enforce size limits
For
protocol === 'data:', inspect the length of the Base64 payload before decoding. Ifconfig.maxContentLengthorconfig.maxBodyLengthis set, reject URIs whose payload exceeds the limit.Stream decoding
Instead of decoding the entire payload in one
Buffer.fromcall, decode the Base64 string in chunks using a streaming Base64 decoder. This would allow the application to process the data incrementally and abort if it grows too large.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios is Vulnerable to Denial of Service via proto Key in mergeConfig
CVE-2026-25639 / GHSA-43fc-jf86-j433
More information
Details
Denial of Service via proto Key in mergeConfig
Summary
The
mergeConfigfunction in axios crashes with a TypeError when processing configuration objects containing__proto__as an own property. An attacker can trigger this by providing a malicious configuration object created viaJSON.parse(), causing complete denial of service.Details
The vulnerability exists in
lib/core/mergeConfig.jsat lines 98-101:When
propis'__proto__':JSON.parse('{"__proto__": {...}}')creates an object with__proto__as an own enumerable propertyObject.keys()includes'__proto__'in the iterationmergeMap['__proto__']performs prototype chain lookup, returningObject.prototype(truthy object)mergeMap[prop] || mergeDeepPropertiesevaluates toObject.prototypeObject.prototype(...)throwsTypeError: merge is not a functionThe
mergeConfigfunction is called by:Axios._request()atlib/core/Axios.js:75Axios.getUri()atlib/core/Axios.js:201get,post, etc.) atlib/core/Axios.js:211,224PoC
Reproduction steps:
npm install axiospoc.mjswith the code abovenode poc.mjsVerified output (axios 1.13.4):
Control tests performed:
{"timeout": 5000}JSON.parse('{"__proto__": {"x": 1}}'){"headers": {"X-Test": "value"}}Attack scenario:
An application that accepts user input, parses it with
JSON.parse(), and passes it to axios configuration will crash when receiving the payload{"__proto__": {"x": 1}}.Impact
Denial of Service - Any application using axios that processes user-controlled JSON and passes it to axios configuration methods is vulnerable. The application will crash when processing the malicious payload.
Affected environments:
This is NOT prototype pollution - the application crashes before any assignment occurs.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF
CVE-2025-62718 / GHSA-3p68-rc4w-qgx5
More information
Details
Axios does not correctly handle hostname normalization when checking
NO_PROXYrules.Requests to loopback addresses like
localhost.(with a trailing dot) or[::1](IPv6 literal) skipNO_PROXYmatching and go through the configured proxy.This goes against what developers expect and lets attackers force requests through a proxy, even if
NO_PROXYis set up to protect loopback or internal services.According to RFC 1034 §3.1 and RFC 3986 §3.2.2, a hostname can have a trailing dot to show it is a fully qualified domain name (FQDN). At the DNS level,
localhost.is the same aslocalhost.However, Axios does a literal string comparison instead of normalizing hostnames before checking
NO_PROXY. This causes requests likehttp://localhost.:8080/andhttp://[::1]:8080/to be incorrectly proxied.This issue leads to the possibility of proxy bypass and SSRF vulnerabilities allowing attackers to reach sensitive loopback or internal services despite the configured protections.
PoC
Expected: Requests bypass the proxy (direct to loopback).
Actual: Proxy logs requests for
localhost.and[::1].Impact
Applications that rely on
NO_PROXY=localhost,127.0.0.1,::1for protecting loopback/internal access are vulnerable.Attackers controlling request URLs can:
Affected Versions
NO_PROXYevaluation.Remediation
Axios should normalize hostnames before evaluating
NO_PROXY, including:Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios has Unrestricted Cloud Metadata Exfiltration via Header Injection Chain
CVE-2026-40175 / GHSA-fvcv-3m26-pcqx
More information
Details
Vulnerability Disclosure: Unrestricted Cloud Metadata Exfiltration via Header Injection Chain
Summary
The Axios library is vulnerable to a specific gadget-style attack chain in which prototype pollution in a third-party dependency may be leveraged to inject unsanitized header values into outbound requests.
Axios can be used as a gadget after pollution occurs elsewhere because header values merged from attacker-controlled prototype properties are not sanitized for CRLF (
\r\n) characters before being written to the request. In affected deployments, this may enable limited request manipulation or metadata access as part of a higher-complexity exploit chain.Severity: Moderate (CVSS 3.1 Base Score: 4.8)
Affected Versions: All versions (v0.x - v1.x)
Vulnerable Component:
lib/adapters/http.js(Header Processing)Usage of "Helper" Vulnerabilities
This issue requires a separate prototype pollution vulnerability in another library in the application stack (for example,
qs,minimist,ini, orbody-parser). If an attacker can polluteObject.prototype, Axios may pick up the polluted properties during config merge.Because Axios does not sanitise these merged header values for CRLF (
\r\n) characters, the polluted property can alter the structure of an outbound HTTP request.Proof of Concept
1. The Setup (Simulated Pollution)
Imagine a scenario where a known vulnerability exists in a query parser. The attacker sends a payload that sets:
2. The Gadget Trigger (Safe Code)
The application makes a completely safe, hardcoded request:
3. The Execution
Axios merges the prototype property
x-amz-targetinto the request headers. It then writes the header value directly to the socket without validation.Resulting HTTP traffic:
4. The Impact
In environments where requests can reach cloud metadata endpoints or sensitive internal services, the injected header content may help bypass expected request constraints and expose limited credentials or modify request semantics. This impact depends on application context and a separate prototype-pollution primitive.
Impact Analysis
Recommended Fix
Validate all header values in
lib/adapters/http.jsandxhr.jsbefore passing them to the underlying request function.Patch Suggestion:
References
This report was generated as part of a security audit of the Axios library.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: CRLF Injection in multipart/form-data body via unsanitized blob.type in formDataToStream
CVE-2026-42037 / GHSA-445q-vr5w-6q77
More information
Details
Summary
The
FormDataPartconstructor inlib/helpers/formDataToStream.jsinterpolatesvalue.typedirectly into theContent-Typeheader of each multipart part without sanitizing CRLF (\r\n) sequences. An attacker who controls the.typeproperty of a Blob/File-like object (e.g., via a user-uploaded file in a Node.js proxy service) can inject arbitrary MIME part headers into the multipart form-data body. This bypasses Node.js v18+ built-in header protections because the injection targets the multipart body structure, not HTTP request headers.Details
In
lib/helpers/formDataToStream.jsat line 27, when processing a Blob/File-like value, the code builds per-part headers by directly embedding value.type:Note that the string path (line above) explicitly sanitizes CRLF, but the binary/blob path does not. This inconsistency confirms the sanitization was intended but missed for
value.type.Attack chain:
\r\nsequencesaxios.post(url, formData)formDataToStream(), which passesvalue.typeunsanitized into the multipart bodyThis is reachable via the fully public axios API (
axios.post(url, formData)) with no special configuration.Additionally,
value.nameused in theContent-Dispositionconstruction nearby likely has the same issue and should be audited.PoC
Prerequisites: Node.js 18+, axios (tested on 1.14.0)
Steps to reproduce:
Expected behavior: value.type should be sanitized to strip \r\n before interpolation, consistent with the string value path.
Actual behavior: CRLF sequences in value.type are preserved, allowing arbitrary header injection in multipart parts.
Impact
Any Node.js application that accepts user-provided files (with attacker-controlled MIME types) and re-posts them via axios FormData is affected. This is a common pattern in proxy services, file upload relays, and API gateways.
Consequences include: bypassing server-side Content-Type-based upload filters, confusing multipart parsers into misrouting data, injecting phantom form fields if the boundary is known, and exploiting downstream server vulnerabilities that trust per-part headers.
axios is one of the most downloaded npm packages, significantly increasing the blast radius of this issue.
Suggested fix
In formDataToStream.js, sanitize value.type before interpolating it into the per-part Content-Type header. Apply the same strategy used for string values (strip/replace \r\n) or use the same escapeName logic.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios' HTTP adapter-streamed uploads bypass maxBodyLength when maxRedirects: 0
CVE-2026-42034 / GHSA-5c9x-8gcm-mpgx
More information
Details
Summary
For stream request bodies, maxBodyLength is bypassed when maxRedirects is set to 0 (native http/https transport path). Oversized streamed uploads are sent fully even when the caller sets strict body limits.
Details
Relevant flow in lib/adapters/http.js:
This creates a path-specific bypass for streamed uploads.
PoC
Environment:
Steps:
Observed:
Control checks:
Impact
Type: DoS / uncontrolled upstream upload / resource exhaustion.
Impacted: Node.js services using streamed request bodies with maxBodyLength expecting hard enforcement, especially when following Axios guidance to use maxRedirects: 0 for streams.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: unbounded recursion in toFormData causes DoS via deeply nested request data
CVE-2026-42039 / GHSA-62hf-57xw-28j9
More information
Details
Summary
toFormData recursively walks nested objects with no depth limit, so a deeply nested value passed as request data crashes the Node.js process with a RangeError.
Details
lib/helpers/toFormData.js:210 defines an inner
build(value, path)that recurses into every object/array child (line 225:build(el, path ? path.concat(key) : [key])). The only safeguard is astackarray used to detect circular references; there is no maximum depth and no try/catch around the recursion. Becausebuildcalls itself once per nesting level, a payload nested roughly 2000+ levels deep exhausts V8's call stack.toFormDatais the serializer behindFormDatarequest bodies andAxiosURLSearchParams(used bybuildURLwhenparamsis an object withURLSearchParamsunavailable, seelib/helpers/buildURL.js:53andlib/helpers/AxiosURLSearchParams.js:36). Any server-side code that forwards a client-supplied object intoaxios({ data, params })therefore reaches the recursive walker with attacker-controlled depth.The RangeError is thrown synchronously from inside
forEach, escapestoFormData, and propagates out of the axios request call. In typical Express/Fastify request handlers this terminates the running request; in synchronous startup paths or worker threads it can crash the whole process.PoC
Server-side reachability example:
Verified on axios 1.15.0 (latest, 2026-04-10), Node.js 20, 3/3 PoC runs reproduce the RangeError at depth 2500.
Impact
A remote, unauthenticated attacker who can influence an object passed to axios as request
dataorparamstriggers an uncaught RangeError inside the synchronous recursive walker. In server-side applications that proxy or re-send client JSON through axios this crashes the request handler and, in worker/cluster setups, the process. Fix by bounding recursion depth intoFormData'sbuildfunction (reject or throw on depths beyond a configurable limit, e.g. 100) or rewriting the walker iteratively.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Header Injection via Prototype Pollution
CVE-2026-42035 / GHSA-6chq-wfr3-2hj9
More information
Details
Summary
A prototype pollution gadget exists in the Axios HTTP adapter (lib/adapters/http.js) that allows an attacker to inject arbitrary HTTP headers into outgoing requests. The vulnerability exploits duck-type checking of the data payload, where if Object.prototype is polluted with getHeaders, append, pipe, on, once, and Symbol.toStringTag, Axios misidentifies any plain object payload as a FormData instance and calls the attacker-controlled getHeaders() function, merging the returned headers into the outgoing request.
The vulnerable code resides exclusively in lib/adapters/http.js. The prototype pollution source does not need to originate from Axios itself — any prototype pollution primitive in any dependency in the application's dependency tree is sufficient to trigger this gadget.
Prerequisites:
A prototype pollution primitive must exist somewhere in the application's dependency chain (e.g., via lodash.merge, qs, JSON5, or any deep-merge utility processing attacker-controlled input). The pollution source is not required to be in Axios.
The application must use Axios to make HTTP requests with a data payload (POST, PUT, PATCH).
Details
The vulnerability is in
lib/adapters/http.js, in the data serialization pipeline:Axios uses two sequential duck-type checks, both of which can be satisfied via prototype pollution:
1.
utils.isFormData(data)—lib/utils.js2.
utils.isFunction(data.getHeaders)— Duck-type forform-datanpm packagePoC
Impact
Note on Scope: There is an argument to promote this from S:U to S:C (Scope: Changed), which would raise the score to 10.0. In some architectures, Axios is commonly used for service to service communication where downstream services trust identity headers (
Authorization,X-Role,X-User-ID,X-Tenant-ID) forwarded from upstream API gateways. In this scenario, the vulnerable component (Axios in Service A) and the impacted component (Service B, which acts on the injected identity) are under different security authorities. The injected headers cross a trust boundary, meaning the impact extends beyond the security scope of the vulnerable component, the CVSS v3.1 definition of a Scope Change. We conservatively score S:U here, but maintainers should evaluate which one applies better here.Recommended Fix
Add an explicit own-property check in
lib/adapters/http.js:Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: no_proxy bypass via IP alias allows SSRF
CVE-2026-42038 / GHSA-m7pr-hjqh-92cm
More information
Details
The fix for no_proxy hostname normalization bypass (#10661) is incomplete.When no_proxy=localhost is set, requests to 127.0.0.1 and [::1] still route through the proxy instead of bypassing it.
The shouldBypassProxy() function does pure string matching — it does not
resolve IP aliases or loopback equivalents. As a result:
POC :
process.env.no_proxy = 'localhost';
process.env.http_proxy = 'http://attacker-proxy:8888';
Inside
mergeConfig, the merged config is built as a plain{}object (lib/core/mergeConfig.js#L20):A plain
{}inherits fromObject.prototype.mergeConfigonly iteratesObject.keys({ ...config1, ...config2 })(line 99), which is a spread of own properties. Any key that is absent from boththis.defaultsand the per-request config will never be set as an own property on the merged config. Reading that key later on the merged config falls through toObject.prototype. That is the root mechanism behind all gadgets below.Gadget 1: parseReviver -- response tampering and exfiltration
Introduced in: v1.12.0 (commit 2a97634, PR #5926)
Affected range: >= 1.12.0, <= 1.13.6
Root cause
The default
transformResponsefunction callsJSON.parse(data, this.parseReviver):thisis the merged config.parseReviveris not present indefaultsand is not in themergeMapinsidemergeConfig. It is never set as an own property on the merged config. Accessingthis.parseRevivertherefore walks the prototype chain.The call fires by default on every string response body because
lib/defaults/transitional.js#L5sets:which activates the JSON parse path unconditionally when
responseTypeis unset.JSON.parse(text, reviver)calls the reviver for every key-value pair in the parsed result, bottom-up. The reviver's return value is what the caller receives. An attacker-controlled reviver can both observe every key-value pair and silently replace values.There is no interaction with
assertOptionshere. TheassertOptionscall inAxios._request(line 119) iteratesObject.keys(config), and sinceparseReviverwas never set as an own property, it is not in that list. Nothing validates or invokes the polluted function beforetransformResponsedoes.Verification: own-property check
Proof of concept
Two terminals. The server simulates a legitimate API endpoint. The client simulates a Node.js application whose process has been affected by prototype pollution from a co-dependency.
Terminal 1 -- server (
server_gadget1.mjs):Terminal 2 -- client (
poc_parsereviver.mjs):The server sent
role: user. The application receivedrole: admin. The response is silently modified in place; no error is thrown, no log entry is produced.Gadget 2: transport -- full HTTP request hijacking with credentials
Introduced in: early adapter refactor, present across 0.x and 1.x
Affected range: >= 0.19.0, <= 1.13.6 (Node.js http adapter only)
Root cause
Inside the Node.js http adapter at
lib/adapters/http.js#L676:transportis listed inmergeMapinsidemergeConfig(line 88):but it is not present in
lib/defaults/index.jsat all.mergeConfigiteratesObject.keys({ ...config1, ...config2 })(line 99). Sinceconfig1(the defaults) has notransportkey and a typical per-request config has none either, the key never enters the loop. It is never set as an own property on the merged config. The read at line 676 falls through toObject.prototype.The fix in v1.13.5 (PR #7369) added a
hasOwnPropcheck formergeMapaccess, but the iteration set itself is the issue --transportsimply never enters it. The fix does not address this.The transport interface is
{ request(options, handleResponseCallback) }. The options object passed totransport.requestat adapter runtime contains:options.hostname,options.port,options.path-- full target URLoptions.auth-- basic auth credentials in"username:password"form (set at line 606)options.headers-- all request headers as a plain objectProof of concept
Two terminals. The server is a legitimate API endpoint that processes the request normally. The client's process has been affected by prototype pollution.
Terminal 1 -- server (
server_gadget2.mjs):Terminal 2 -- client (
poc_transport.mjs):The basic auth credentials are fully visible to the attacker's transport function. The request completes normally from the caller's perspective.
Additional gadget: transformRequest / transformResponse
Separately,
mergeConfigreadsconfig2[prop]at line 102 without ahasOwnPropertyguard. For keys liketransformRequestandtransformResponsethat are present indefaults(and therefore processed by the mergeMap loop), ifObject.prototype.transformRequestis polluted before the request,config2["transformRequest"]inherits the polluted value anddefaultToConfig2replaces the safe default transforms with the attacker's function.This one requires a discriminator because
assertOptionsinAxios._request(line 119) readsschema[opt]for every key in the merged config's own keys, andschema["transformRequest"]also inherits fromObject.prototype, causing it to call the polluted value as a validator. The gadget function needs to returntruewhen its first argument is a function (the assertOptions call) and perform the attack when its first argument is data (thetransformDatacall).Both
transformRequest(fires with request body) andtransformResponse(fires with response body) are confirmed affected. Range: >= 0.19.0, <= 1.13.6.Why the existing fix does not cover these
PR #7369 / CVE-2026-25639 (fixed in v1.13.5) addressed a separate class: passing
{"__proto__": {"x": 1}}as the config object, which causedmergeMap['__proto__']to resolve toObject.prototype(a non-function), crashing axios. The fix added an explicit block on__proto__,constructor, andprototypeas config keys, and changedmergeMap[prop]toutils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : ....That fix only addresses config keys that are explicitly set to
__proto__(or similar) by the caller. It does not addhasOwnPropertyguards on the value reads (config2[prop]at line 102,this.parseReviver,config.transport). An application using a PP-vulnerable co-dependency and making axios requests is still fully exposed after upgrading to 1.13.5 or 1.13.6.Suggested fixes
For
parseReviver(lib/defaults/index.js#L124):For
mergeConfigvalue reads (lib/core/mergeConfig.js#L102):For
transportand other adapter reads from config (lib/adapters/http.js#L676):The same
hasOwnProppattern applies tolookup,httpVersion,http2Options,family, andformSerializerreads in the adapter.Environment
Disclosure
Reported via GitHub Security Advisories at https://github.com/axios/axios/security/advisories/new per the axios security policy.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Incomplete Fix for CVE-2025-62718 — NO_PROXY Protection Bypassed via RFC 1122 Loopback Subnet (127.0.0.0/8) in Axios 1.15.0
CVE-2026-42043 / GHSA-pmwg-cvhr-8vh7
More information
Details
1. Executive Summary
This report documents an incomplete security patch for the previously disclosed vulnerability GHSA-3p68-rc4w-qgx5 (CVE-2025-62718), which affects the
NO_PROXYhostname resolution logic in the Axios HTTP library.Background — The Original Vulnerability
The original vulnerability (GHSA-3p68-rc4w-qgx5) disclosed that Axios did not normalize hostnames before comparing them against
NO_PROXYrules. Specifically, a request tohttp://localhost./(with a trailing dot) orhttp://[::1]/(with IPv6 bracket notation) would bypass NO_PROXY matching entirely and be forwarded to the configured HTTP proxy — even whenNO_PROXY=localhost,127.0.0.1,::1was explicitly set by the developer to protect loopback services.The Axios maintainers addressed this in version 1.15.0 by introducing a
normalizeNoProxyHost()function inlib/helpers/shouldBypassProxy.js, which strips trailing dots from hostnames and removes brackets from IPv6 literals before performing the NO_PROXY comparison.The Incomplete Patch — This Finding
While the patch correctly addresses the specific cases reported (trailing dot normalization and IPv6 bracket removal), the fix is architecturally incomplete.
The patch introduced a hardcoded set of recognized loopback addresses:
However, RFC 1122 §3.2.1.3 explicitly defines the entire 127.0.0.0/8 subnet as the IPv4 loopback address block not just the single address
127.0.0.1. On all major operating systems (Linux, macOS, Windows with WSL), any IP address in the range127.0.0.2through127.255.255.254is a valid, functional loopback address that routes to the local machine.As a result, an attacker who can influence the target URL of an Axios request can substitute 127.0.0.1 with any other address in the
127.0.0.0/8range (e.g.,127.0.0.2,127.0.0.100,127.1.2.3) to completely bypass theNO_PROXYprotection even in the fully patched Axios 1.15.0 release.Verification
This bypass has been independently verified on:
The Proof-of-Concept demonstrates that while
localhost,localhost., and[::1]are correctly blocked by the patched version, requests to127.0.0.2,127.0.0.100, and127.1.2.3are transparently forwarded to the attacker-controlled proxy server, confirming that the patch does not cover the full RFC-defined loopback address space.2. Deep-Dive: Technical Root Cause Analysis
2.1 Vulnerable File & Location
2.2 How Axios Routes HTTP Requests The Call Chain
When Axios dispatches any HTTP request,
lib/adapters/http.jscallssetProxy(), which invokesshouldBypassProxy()to decide whether to honour a configured proxy:shouldBypassProxy()is the single gatekeeper for NO_PROXY enforcement. A bypass here means all proxy protection fails silently.2.3 The Original Vulnerability (GHSA-3p68-rc4w-qgx5)
Before Axios 1.15.0, hostnames were compared against
NO_PROXYusing a raw literal string match with no normalization:Both
localhost.(FQDN trailing dot, RFC 1034 §3.1) and[::1](bracketed IPv6 literal, RFC 3986 §3.2.2) are canonical representations of loopback addresses, but Axios treated them as unknown hosts.2.4 What the Patch Fixed (Axios 1.15.0)
The patch introduced three changes inside
lib/helpers/shouldBypassProxy.js:Fix A
normalizeNoProxyHost()(Lines 47–57)Strips alternate representations before comparison:
Fix B Cross-Loopback Equivalence (Lines 1–3 & 108)
Allows
127.0.0.1andlocalhostto match each other interchangeably:Fix C Normalization Applied on Both Sides (Lines 81 & 90)
2.5 The Incomplete Patch Exact Root Cause
The fundamental flaw resides in Line 1:
*RFC 1122 §3.2.1.3 is unambiguous:
This means all addresses from
127.0.0.1through127.255.255.254are valid loopback addresses on any RFC-compliant operating system. On Linux, the entire/8block is routed to thelointerface by default. The patch recognises only127.0.0.1, leaving16,777,213valid loopback addresses unprotected.2.6 Step-by-Step Bypass Execution Trace
Environment:
Annotated execution of shouldBypassProxy("http://127.0.0.2:9191/internal-api"):
2.7 Why the Patch Design Is Flawed
The patch addresses the symptom (two specific alternate representations) rather than the root cause (an incomplete definition of what constitutes a loopback address).
Real-world services that commonly bind to non-standard loopback addresses include:
3. Comprehensive Attack Vector & Proof of Concept
3.1 Reproduction Steps
Step 1 — Create a fresh project directory
Step 2 — Initialize the project with the patched Axios version
Create
package.json:Install dependencies:
Verify the installed version:
Step 3 — Create the PoC file (
poc.js)Step 4 — Execute the PoC
3.2 Observed Output
The following output was captured during testing on Kali Linux with Axios 1.15.0:
3.3 Analysis of Results
The output conclusively demonstrates the following:
Patched cases behave correctly: Requests to
localhost,localhost.(trailing dot), and[::1](bracketed IPv6) all result in a direct connection, confirming that the existing patch in Axios 1.15.0 correctly handles the cases reported in GHSA-3p68-rc4w-qgx5.Bypass cases confirm the incomplete patch: Requests to
127.0.0.2,127.0.0.100, and127.1.2.3all of which are valid loopback addresses within the127.0.0.0/8subnet as defined byRFC 1122 §3.2.1.3are transparently forwarded to the attacker-controlled proxy server. The proxy receives the full request including the HTTP method, target URL, andHostheader, demonstrating that any response from an internal service bound to these addresses would be fully intercepted.This confirms that the
NO_PROXYprotection configured by the developer (localhost,127.0.0.1,::1) fails silently for the entire127.0.0.0/8address range beyond127.0.0.1, providing a reproducible and reliable bypass of the security control introduced by the patch.4. Impact Assessment
This vulnerability is a security control bypass specifically an incomplete patch that allows an attacker to circumvent the
NO_PROXYprotection mechanism in Axios by using any loopback addresses within the127.0.0.0/8subnet other than127.0.0.1. The result is that traffic intended to remain private and direct is silently intercepted by a configured proxy server.4.1 Who Is Impacted?
Primary Target — Node.js Backend Applications
Any Node.js application that meets all three of the following conditions is vulnerable:
Affected Deployment Environments
Scale of Exposure
Axios is one of the most widely used HTTP client libraries in the JavaScript ecosystem, with over 500 million weekly downloads on npm. Any application in the above categories using Axios 1.15.0 is affected, regardless of whether the developer is aware of the underlying proxy routing logic.
4.3 Impact Details
Impact 1 Silent Interception of Internal Service Traffic
When an application makes a request to an internal loopback service using a non-standard loopback address (e.g.,
http://127.0.0.2/admin), Axios silently routes the request through the configured proxy instead of connecting directly.The developer receives no error or warning. From the application's perspective, the request succeeds normally.
Impact 2 — SSRF Mitigation Bypass
Many applications implement SSRF protections by configuring
NO_PROXYto prevent requests to loopback addresses from being forwarded externally. This bypass defeats that protection entirely for any loopback address beyond127.0.0.1.An attacker who can influence the target URL of an Axios request through user-supplied input, redirect chains, or other SSRF vectors can exploit this gap to reach internal services that the developer explicitly intended to protect.
Impact 3 — Cloud Metadata Service Exposure
In cloud environments (AWS, GCP, Azure), SSRF vulnerabilities are particularly severe because they can be used to access the instance metadata service and retrieve IAM credentials, enabling full cloud account compromise.
While the AWS IMDSv2 service is reachable at
169.254.169.254(not a loopback address), many cloud deployments run internal metadata proxies, credential servers, or service discovery endpoints bound to non-standard loopback addresses within the127.0.0.0/8range. An attacker reaching any of these services through the bypass could:Impact 4 — Confidential Data Exfiltration
Any internal service binding to a
127.x.x.xaddress other than127.0.0.1is fully exposed. This includes:Impact 5 — No Indication of Compromise
A particularly dangerous characteristic of this vulnerability is that it is completely silent neither the application nor the developer receives any indication that requests are being routed incorrectly. There are no error messages, no exceptions thrown, and no changes in application behaviour. The proxy interception is entirely transparent from the application's perspective, making detection extremely difficult without active network monitoring.
4.4 Comparison with Original Vulnerability
The severity of this finding is equivalent to the original vulnerability because the attack conditions, exploitation technique, and resulting impact are identical. The only difference is the specific input used to trigger the bypass, which the existing patch completely fails to address.
5. Technical Remediation & Proposed Fix
5.1 Vulnerable Code Block
The vulnerability resides in
lib/helpers/shouldBypassProxy.jsat lines 1–3. The following is the exact code extracted from Axios 1.15.0:This hardcoded
Setis subsequently used at line 108 during the final NO_PROXY match evaluation:Why this is dangerous: The
Setperforms a strict membership check. Any IPv4 loopback address outside the three hardcoded entries returnsfalse, causingshouldBypassProxy()to returnfalseand silently route the request through the configured proxy.5.2 Proposed Patched Code
Replace lines 1–3 in
lib/helpers/shouldBypassProxy.jswith the following RFC-compliant implementation:5.3 Diff View — Before vs After
All other code in
shouldBypassProxy.jsremains unchanged. No other files require modification.5.4 Why This Fix Must Be Applied
Reason 1 — RFC 1122 Compliance
The current implementation violates RFC 1122 §3.2.1.3, which defines the entire
127.0.0.0/8block as the IPv4 loopback address range not just the single address127.0.0.1. The proposed fix aligns Axios with the standard, ensuring that all valid loopback addresses are recognised and handled consistently.Reason 2 — The Existing Patch Has Already Failed Once
The patch for GHSA-3p68-rc4w-qgx5 was released with the explicit intent of securing NO_PROXY hostname matching for loopback addresses. Within the same release (1.15.0), the protection can be bypassed by substituting
127.0.0.1with any other address in the127.0.0.0/8range. Leaving this gap unaddressed means that the patch creates a false sense of security developers believe their loopback traffic is protected when it is not.Reason 3 — Real Operating System Behaviour
On Linux the dominant platform for Node.js server deployments the kernel routes the entire
127.0.0.0/8subnet to the loopback interfaceloby default. This means any address in that range functions identically to127.0.0.1at the networking level.Axios's current implementation does not reflect this operating system behaviour, resulting in an inconsistency between what the OS considers loopback and what Axios treats as loopback.
Reason 4 — The Proposed Fix Has Zero Performance Impact
The existing solution uses a
Set.has()lookup an O(1) operation. The proposed fix replaces this with:'localhost','::1') — O(1)split('.')and array validation — O(1) with a fixed-length array of 4 elementsThe computational cost is equivalent or lower than the current approach, and the fix introduces no new external dependencies.
Reason 5 — The Fix Is Minimal and Surgical
The proposed change modifies only 3 lines of a single file. It does not alter:
parseNoProxyEntry()functionnormalizeNoProxyHost()functionshouldBypassProxy()main function logicThis minimises regression risk and makes the fix straightforward to review, test, and backport to older supported branches.
Reason 6 — Resilient to Alternative IP Encodings
Because Axios normalises the request URL using Node's native
new URL()parser before passing it toshouldBypassProxy(), alternative IP encodings (such as octal0177.0.0.1, hex0x7f.0.0.1, or integer2130706433) are already resolved into their standard IPv4 dotted-decimal format. This means the proposed.split('.')validation logic is completely robust and cannot be bypassed using URL-encoded IP obfuscation techniques.5.5 Additional Recommendation — IPv6 Loopback Range
While the primary bypass demonstrated in this report targets the IPv4
127.0.0.0/8range, the Axios team should also consider validating the full IPv6 loopback representation. The current implementation recognises only::1. A more complete check would also handle the full-form notation:Normalising these representations before comparison would make the NO_PROXY implementation comprehensively RFC-compliant across both IPv4 and IPv6 address families.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: HTTP adapter streamed responses bypass maxContentLength
CVE-2026-42036 / GHSA-vf2m-468p-8v99
More information
Details
Summary
When responseType: 'stream' is used, Axios returns the response stream without enforcing maxContentLength. This bypasses configured response-size limits and allows unbounded downstream consumption.
Details
In lib/adapters/http.js:
So callers may set maxContentLength and still receive/read arbitrarily large streamed responses.
PoC
Environment:
Steps:
Observed:
Control check:
Impact
Type: DoS / unbounded response processing.
Impacted: Node.js applications relying on maxContentLength as a safety boundary while using streamed Axios responses.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Authentication Bypass via Prototype Pollution Gadget in
validateStatusMerge StrategyCVE-2026-42041 / GHSA-w9j2-pvgh-6h63
More information
Details
Vulnerability Disclosure: Authentication Bypass via Prototype Pollution Gadget in
validateStatusMerge StrategySummary
The Axios library is vulnerable to a Prototype Pollution "Gadget" attack that allows any
Object.prototypepollution to silently suppress all HTTP error responses (401, 403, 500, etc.), causing them to be treated as successful responses. This completely bypasses application-level authentication and error handling.The root cause is that
validateStatusis the only config property using themergeDirectKeysmerge strategy, which uses JavaScript'sinoperator — an operator that inherently traverses the prototype chain. WhenObject.prototype.validateStatusis polluted with() => true, all HTTP status codes are accepted as success.Severity: High (CVSS 8.2)
Affected Versions: All versions (v0.x - v1.x including v1.15.0)
Vulnerable Component:
lib/core/mergeConfig.js(mergeDirectKeysstrategy) +lib/core/settle.jsCWE
CVSS 3.1
Score: 8.2 (High)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:NUsage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input.
If an attacker can pollute
Object.prototypevia any other library in the stack, Axios will automatically inherit the pollutedvalidateStatusfunction during config merge. Theinoperator inmergeDirectKeysmakes this property uniquely susceptible to prototype pollution compared to all other config properties.Why
validateStatusIs Uniquely VulnerableAll other config properties use
defaultToConfig2, which readsconfig2[prop](traverses prototype). ButvalidateStatususesmergeDirectKeys, which uses theinoperator:The
inoperator is a more aggressive prototype traversal than property access. Whileconfig2['validateStatus']also traverses the prototype, the explicitincheck makes the intent clearer and the vulnerability more direct.Proof of Concept
1. The Setup (Simulated Pollution)
2. The Gadget Trigger (Safe Code)
3. The Execution
4. The Impact
Verified PoC Output
Impact Analysis
Recommended Fix
Replace the
inoperator withhasOwnPropertyinmergeDirectKeys:Resources
inoperatorTimeline
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams
CVE-2026-42040 / GHSA-xhjh-pmcv-23jw
More information
Details
Vulnerability Disclosure: Null Byte Injection via Reverse-Encoding in AxiosURLSearchParams
Summary
The
encode()function inlib/helpers/AxiosURLSearchParams.jscontains a character mapping (charMap) at line 21 that reverses the safe percent-encoding of null bytes. AfterencodeURIComponent('\x00')correctly produces the safe sequence%00, the charMap entry'%00': '\x00'converts it back to a raw null byte.This is a clear encoding defect: every other charMap entry encodes in the safe direction (literal → percent-encoded), while this single entry decodes in the opposite (dangerous) direction.
Severity: Low (CVSS 3.7)
Affected Versions: All versions containing this charMap entry
Vulnerable Component:
lib/helpers/AxiosURLSearchParams.js:21CWE
CVSS 3.1
Score: 3.7 (Low)
Vector:
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:NbuildURL) uses its ownencodefunction which does NOT have this bug. Only triggered via directAxiosURLSearchParams.toString()without an encoder, or via customparamsSerializerdelegationVulnerable Code
File:
lib/helpers/AxiosURLSearchParams.js, lines 13-26Why the Standard Flow Is NOT Affected
Proof of Concept
Verified PoC Output
Impact Analysis
Primary impact is limited because the standard axios request flow is not affected. However:
AxiosURLSearchParamsdirectly for custom serialization are affectedparamsSerializer.encodethat delegates to the internal encoder triggers the bugIf null bytes reach a downstream C-based parser, impacts include URL truncation, WAF bypass, and log injection.
Recommended Fix
Remove the
%00entry from charMap and update the regex:Resources
Timeline
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in
withXSRFTokenBoolean CoercionCVE-2026-42042 / GHSA-xx6v-rp6x-q39c
More information
Details
Vulnerability Disclosure: XSRF Token Cross-Origin Leakage via Prototype Pollution Gadget in
withXSRFTokenBoolean CoercionSummary
The Axios library's XSRF token protection logic uses JavaScript truthy/falsy semantics instead of strict boolean comparison for the
withXSRFTokenconfig property. When this property is set to any truthy non-boolean value (via prototype pollution or misconfiguration), the same-origin check (isURLSameOrigin) is short-circuited, causing XSRF tokens to be sent to all request targets including cross-origin servers controlled by an attacker.Severity: Medium (CVSS 5.4)
Affected Versions: All versions since
withXSRFTokenwas introducedVulnerable Component:
lib/helpers/resolveConfig.js:59Environment: Browser-only (XSRF logic only runs when
hasStandardBrowserEnvis true)CWE
CVSS 3.1
Score: 5.4 (Medium)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:NUsage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input when triggered via prototype pollution.
If an attacker can pollute
Object.prototype.withXSRFTokenwith any truthy value (e.g.,1,"true",{}), Axios will automatically inherit this value during config merge. The truthy value short-circuits the same-origin check, causing the XSRF cookie value to be sent as a request header to every destination.Vulnerable Code
File:
lib/helpers/resolveConfig.js, lines 57-66Designed behavior:
true→ always send token (explicit cross-origin opt-in)false→ never send tokenundefined→ send only for same-origin requestsActual behavior for non-boolean truthy values (
1,"false",{},[]):Proof of Concept
Verified PoC Output
Impact Analysis
Object.prototype.withXSRFToken = 1affects every axios request in the applicationwithXSRFToken: "false"(string) instead offalse(boolean) triggers the same issue without PPLimitations:
hasStandardBrowserEnv)Recommended Fix
Use strict boolean comparison:
Resources
Timeline
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollution Gadget in Config Merge
CVE-2026-44495 / GHSA-3g43-6gmg-66jw
More information
Details
Summary
Axios versions before the fixed releases contain prototype-pollution gadgets in request config processing. If another vulnerability in the same JavaScript process has already polluted
Object.prototype.transformResponse, affected Axios versions may treat that inherited value as request configuration or as an option validator.Axios does not itself create the prototype pollution. Exploitability requires a separate prototype-pollution vulnerability or equivalent attacker control over
Object.prototypebefore Axios creates a request.Impact
For ordinary prototype-pollution primitives that can only assign JSON-like values, this issue primarily results in request failures or denial-of-service attacks.
If the attacker can pollute
Object.prototype.transformResponsewith a function, affected versions of Axios may execute it. In fully affected versions, the function can observe response data and request config, including URL, headers, andauth, and can change the response data returned to application code.This function-valued condition is important. Most query-string or JSON parser prototype-pollution bugs cannot create JavaScript functions on their own, so credential exposure and response tampering are conditional rather than automatic consequences of such bugs.
Affected Functionality
The affected functionality is Axios request config processing and response transformation.
Affected use requires all of the following:
Object.prototypein the same process or browser context.transformResponse.This is not specific to the Node HTTP adapter. Browser and Node usage can both pass through the shared config/transform pipeline, though real-world exploitability depends on the surrounding application and any helper vulnerabilities.
Technical Details
In affected versions,
mergeConfig()reads config values through normal property access. For config keys present in Axios defaults, includingtransformResponse, a missing own property on the request config can fall through toObject.prototype.In the fully affected path, this means
Object.prototype.transformResponsecan replace Axios's default response transform. The selected transform is later executed bytransformData()with the request config asthis.Some later affected v1 releases guarded the merge path but still used inherited properties while looking up validators in
validator.assertOptions(). In that narrower case, a polluted function can still run during config validation and inspect the config argument, but it does not replace the response transform.Fixed versions use own-property checks and null-prototype config objects, so inherited
Object.prototypevalues are not treated as Axios config or validator schema entries.Proof of Concept of Attack
Expected result on fully affected versions: the polluted transform runs, captures request config and response data, and replaces the response returned to the caller.
Expected result on fixed versions: the polluted transform is ignored, and the original response is returned.
Original source report
Summary
The Axios library is vulnerable to a Prototype Pollution "Gadget" attack that allows any
Object.prototypepollution in the application's dependency tree to be escalated into credential theft and response hijacking across all Axios requests.The
mergeConfig()function reads config properties via standard property access (config2[prop]), which traverses the JavaScript prototype chain. WhenObject.prototype.transformResponseis polluted with a function, it overrides the default JSON response parser for every request. The injected function executes withthis = config, exposingauth.username,auth.password, request URL, and all headers.Severity: High (CVSS 8.2)
Affected Versions: All versions (v0.x - v1.x including v1.15.0)
Vulnerable Component:
lib/core/mergeConfig.js(Config Merge) +lib/core/transformData.js(Transform Execution)CWE
CVSS 3.1
Score: 9.4 (High)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:Hthis.auth.password,this.url, original response data all exfiltratedtrue— attacker cannot return arbitrary data due toassertOptionsconstraint (see below)TypeError: validator is not a functioncrash (DoS) on every requestRelationship to GHSA-fvcv-3m26-pcqx
This vulnerability is in the same class as GHSA-fvcv-3m26-pcqx ("Unrestricted Cloud Metadata Exfiltration via Header Injection Chain"), which was also a PP gadget in axios rated Critical. Both require zero direct user input and exploit
mergeConfig's prototype chain traversal.Usage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input.
If an attacker can pollute
Object.prototypevia any other library in the stack (e.g.,qs,minimist,lodash,body-parser), Axios will automatically pick up the pollutedtransformResponseproperty during its config merge.The critical difference from GHSA-fvcv-3m26-pcqx: this vector was NOT fixed by the header sanitization patch in v1.15.0, because it does not use headers at all — it injects a function into the response processing pipeline.
Proof of Concept
1. The Setup (Simulated Pollution)
Imagine a scenario where a known vulnerability exists in a query parser. The attacker sends a payload that sets:
Important constraint: The polluted value must be a function returning
true, not an array. If an array is used,assertOptions()atvalidator.js:89-92crashes withTypeError: validator is not a function(which is still a DoS vector). The function must returntruebecausevalidator.js:93checksresult !== true.2. The Gadget Trigger (Safe Code)
The application makes a completely safe, hardcoded request:
3. The Execution
Axios's
mergeConfig()atmergeConfig.js:99-103iterates config keys:The polluted function then executes at
transformData.js:21:4. The Impact
The response data seen by the application is
true(the required return value), which will likely cause the application to malfunction but will not reveal the theft.5. DoS Variant
Verified PoC Output
Impact Analysis
this.auth.username,this.auth.password,this.headers.Authorization, and all other config properties are accessible to the injected function. The attacker can exfiltrate them to an external server.dataparameter) is available to the injected function before being replaced.Limitations (Honest Assessment)
trueto passassertOptionsRecommended Fix
Use
hasOwnPropertychecks indefaultToConfig2to prevent prototype chain traversal:Additionally, validate that
transformResponsecontains only functions before execution:Resources
Timeline
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Invisible JSON Response Tampering via Prototype Pollution Gadget in
parseReviverCVE-2026-42044 / GHSA-3w6x-2g7m-8v23
More information
Details
Vulnerability Disclosure: Invisible JSON Response Tampering via Prototype Pollution Gadget in
parseReviverSummary
The Axios library is vulnerable to a Prototype Pollution "Gadget" attack that allows any
Object.prototypepollution in the application's dependency tree to be escalated into surgical, invisible modification of all JSON API responses — including privilege escalation, balance manipulation, and authorization bypass.The default
transformResponsefunction atlib/defaults/index.js:124callsJSON.parse(data, this.parseReviver), wherethisis the merged config object. BecauseparseReviveris not present in Axios defaults, not validated byassertOptions, and not subject to any constraints, a pollutedObject.prototype.parseReviverfunction is called for every key-value pair in every JSON response, allowing the attacker to selectively modify individual values while leaving the rest of the response intact.This is strictly more powerful than the
transformResponsegadget because:Severity: Critical (CVSS 9.1)
Affected Versions: All versions (v0.x - v1.x including v1.15.0)
Vulnerable Component:
lib/defaults/index.js:124(JSON.parse with prototype-inherited reviver)CWE
CVSS 3.1
Score: 9.1 (Critical)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NapiKey: "sk-secret-internal-key"is capturedisAdmin: false → true,role: "viewer" → "admin",balance: 100 → 999999. The response looks completely normal except for the surgically altered valuesComparison with All Known Axios PP Gadgets
Object.prototype['header']Object.prototype.transformResponseObject.prototype.proxyObject.prototype.parseRevivertruetruetrue(obvious)this.auth+ raw responseassertOptionsvalidatesUsage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input.
If an attacker can pollute
Object.prototypevia any other library in the stack (e.g.,qs,minimist,lodash,body-parser), the pollutedparseReviverfunction is automatically used by every Axios request that receives a JSON response. The developer's code is completely safe — no configuration errors needed.Root Cause Analysis
The Attack Path
Why
parseReviverBypasses ALL Existing ProtectionsNot in defaults (
lib/defaults/index.js):parseReviveris not defined in the defaults object, somergeConfig'sObject.keys({...defaults, ...userConfig})iteration never encounters it. The merged config has no ownparseReviverproperty.Not in assertOptions schema (
lib/core/Axios.js:135-142): The schema only contains{baseUrl, withXsrfToken}.parseReviveris not validated.No type check: The
JSON.parseAPI accepts any function as a reviver. There is no check thatthis.parseReviveris intentionally set.Works INSIDE the default transform: Unlike
transformResponsepollution (which replaces the entire transform and is caught byassertOptions),parseReviverpollution injects into the DEFAULTtransformResponsefunction'sJSON.parsecall. The default function itself is not replaced, soassertOptionshas nothing to catch.Vulnerable Code
File:
lib/defaults/index.js, line 124Proof of Concept
Verified PoC Output
Impact Analysis
1. Authorization / Privilege Escalation
2. Financial Manipulation
3. Security Control Bypass
4. Silent Data Exfiltration
The reviver function receives the original value before modification. The attacker can silently capture all API keys, tokens, internal data, and PII from every JSON response while the application continues to function normally.
5. Universal and Invisible
Recommended Fix
Fix 1: Use
hasOwnPropertycheck before usingparseReviverFix 2: Use null-prototype config object
Fix 3: Validate
parseRevivertype and sourceRelationship to Other Reported Gadgets
This vulnerability shares the same root cause class — unsafe prototype chain traversal on the merged config object — with two other reported gadgets:
transformResponsemergeConfig.js:49(defaultToConfig2)mergeConfig.jstrueproxyhttp.js:670(direct property access)http.jsparseReviverdefaults/index.js:124(this.parseReviver)defaults/index.jsWhy These Are Distinct Vulnerabilities
Object.prototypekey.transformResponseenters viamergeConfig;proxyis read directly byhttp.js;parseReviveris read inside the defaulttransformResponsefunction'sJSON.parsecall.mergeConfig.js(axios_26) does NOT fixdefaults/index.js:124(this vulnerability). Fixinghttp.js:670(axios_30) does NOT fix this either. Each requires a separate patch.transformResponseis constrained to returntrue;proxyrequires a proxy server;parseReviverenables constraint-free selective value modification.Comprehensive Fix
While each vulnerability requires a location-specific patch, the comprehensive fix is to use null-prototype objects (
Object.create(null)) for the merged config inmergeConfig.js, which would eliminate prototype chain traversal for all config property accesses and address all three gadgets at once. The maintainer may choose to assign a single CVE covering the root cause or separate CVEs for each distinct exploitation path — we defer to the maintainer's judgment on this.Resources
Timeline
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios has prototype pollution read-side gadgets in HTTP adapter that allow credential injection and request hijacking
CVE-2026-42264 / GHSA-q8qp-cvcw-x6jj
More information
Details
Summary
Five config properties in the HTTP adapter are read via direct property access without
hasOwnPropertyguards, making them exploitable as prototype pollution gadgets. WhenObject.prototypeis polluted by another dependency in the same process, axios silently picks up these polluted values on every outbound HTTP request.Affected Properties
config.auth(lib/adapters/http.jsline 617) Injects attacker-controlledAuthorizationheader on all requests.config.baseURL(lib/helpers/resolveConfig.jsline 18) Redirects all requests using relative URLs to an attacker-controlled server.config.socketPath(lib/adapters/http.jsline 669) Redirects requests to internal Unix sockets (e.g. Docker daemon).config.beforeRedirect(lib/adapters/http.jsline 698) Executes attacker-supplied callback during HTTP redirects.config.insecureHTTPParser(lib/adapters/http.jsline 712) Enables Node.js insecure HTTP parser on all requests.Proof of Concept
Impact
Authorizationheader, leaking request contents to any server that logs auth headers.Root Cause
mergeConfig()iteratesObject.keys({...config1, ...config2}), which only returns own properties. When neither the defaults nor the user config sets these properties, they are absent from the merged config. The HTTP adapter then reads them via direct property access (config.auth,config.socketPath, etc.), which traverses the prototype chain and picks up polluted values.The
own()helper atlib/adapters/http.jsline 336 exists and guards 8 other properties (data,lookup,family,httpVersion,http2Options,responseType,responseEncoding,transport) from this exact attack. The 5 properties listed above are not included in this protection.Suggested Fix
Apply the existing
own()helper to all affected properties:Same pattern for
socketPath,beforeRedirect,insecureHTTPParser, and ahasOwnPropertycheck forbaseURLinresolveConfig.js.Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in
config.proxyCVE-2026-44494 / GHSA-35jp-ww65-95wh
More information
Details
Vulnerability Disclosure: Full Man-in-the-Middle via Prototype Pollution Gadget in
config.proxySummary
The Axios library is vulnerable to a Prototype Pollution "Gadget" attack that allows any
Object.prototypepollution in the application's dependency tree to be escalated into a full Man-in-the-Middle (MITM) attack — intercepting, reading, and modifying all HTTP traffic including authentication credentials.The HTTP adapter at
lib/adapters/http.js:670readsconfig.proxyvia standard property access, which traverses the prototype chain. Becauseproxyis not present in Axios defaults, the merged config object has no ownproxyproperty, making it trivially injectable via prototype pollution. Once injected,setProxy()routes all HTTP requests through the attacker's proxy server.Unlike the
transformResponsegadget (which is constrained byassertOptionsto returntrue), the proxy gadget has zero constraints — the attacker gets a full MITM position with the ability to read all credentials and tamper with all responses.Severity: Critical (CVSS 9.4)
Affected Versions: All versions (v0.x - v1.x including v1.15.0)
Vulnerable Component:
lib/adapters/http.js(config property access on merged object)CWE
CVSS 3.1
Score: 9.4 (Critical)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:LObject.prototype.proxy = {host:'attacker', port:8080}. Consistent with GHSA-fvcv-3m26-pcqx scoring methodologytransformResponsewhich must returntrueWhy This Bypasses mergeConfig
The critical difference from
transformResponse: theproxyproperty is not in defaults (lib/defaults/index.jsdoes not setproxy). This means:mergeConfigiteratesObject.keys({...defaults, ...userConfig})—proxyis NOT in this setdefaultToConfig2forproxyis never calledproxypropertyhttp.js:670readsconfig.proxy, JavaScript traverses the prototype chainObject.prototype.proxyis found → used bysetProxy()This is a more direct attack path than
transformResponsebecause it doesn't even go throughmergeConfig's merge logic — it completely bypasses it.Usage of "Helper" Vulnerabilities
This vulnerability requires Zero Direct User Input.
If an attacker can pollute
Object.prototypevia any other library in the stack (e.g.,qs,minimist,lodash,body-parser), Axios will automatically use the pollutedproxyvalue when making HTTP requests. The developer's code is completely safe — no configuration errors needed.Proof of Concept
1. The Setup (Simulated Pollution)
Imagine a scenario where a known prototype pollution vulnerability exists in a query parser. The attacker sends a payload that sets:
2. The Gadget Trigger (Safe Code)
The application makes a completely safe, hardcoded request:
3. The Execution
At
http.js:668-670:setProxy()athttp.js:191-239then:4. The Impact (Full MITM)
The attacker's proxy server receives:
The
Authorizationheader containssvc-account:prod-key-abc123!in Base64. The attacker:5. Verified PoC Code
Verified PoC Output
Impact Analysis
Authorizationheader, cookies, API keys, and request bodies are visible to the attacker's proxy in plaintext.transformResponse's "must return true".Why This Is More Severe Than transformResponse (axios_26)
this.auth+ response datatruetrue(suspicious)Recommended Fix
Fix 1: Use
hasOwnPropertywhen reading security-sensitive config propertiesFix 2: Enumerate all properties not in defaults and apply
hasOwnPropertyProperties not in defaults that are read by http.js and have security impact:
config.proxy— MITMconfig.socketPath— Unix socket SSRFconfig.transport— request hijackconfig.lookup— DNS hijackconfig.beforeRedirect— redirect manipulationconfig.httpAgent/config.httpsAgent— agent injectionAll should use
hasOwnPropertychecks.Fix 3: Use null-prototype object for merged config
Resources
Timeline
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
axios has DoS & Header Injection via Prototype Pollution Read-Side Gadgets in axios merge functions
CVE-2026-44490 / GHSA-898c-q2cr-xwhg
More information
Details
Summary
axios
1.15.2exposes two read-side prototype-pollution gadgets. WhenObject.prototypeis polluted by an upstream dependency in the same process (e.g. lodash_.merge/ CVE-2018-16487), axios silently picks up the polluted values:lib/utils.jsline 406 buildsmerge()'s accumulator asresult = {}, soresult[targetKey](line 414) walksObject.prototypeand the polluted bucket's own keys are copied into the merged headers and ride out on the wire.lib/core/mergeConfig.jsline 26 builds thehasOwnPropertydescriptor as a plain-object literal.Object.definePropertyreadsdescriptor.get/descriptor.setvia the prototype chain, so a pollutedObject.prototype.getorObject.prototype.setmakes the call throwTypeErrorsynchronously on every axios request.Affected Properties
Object.prototype.commonObject.prototype.delete/.head/.post/.put/.patch/.queryObject.prototype.getTypeError: Getter must be a functionfrommergeConfig.js:26Object.prototype.setTypeError: Setter must be a functionfrommergeConfig.js:26Per-request headers (
axios.request(url, { headers: {...} })) overwrite polluted entries. PollutingObject.prototype.gettriggers the crash before any header is built.Proof of Concept
Impact
Content-Length: 99999): receiver waits for a body that never arrives. Affects requests with a body.Transfer-Encoding: chunkedrides alongside axios's autoContent-Length): receiver rejects with400 Bad Request. Affects requests with a body.If-None-Match: *): receiver returns empty304 Not Modified. Affects GET / HEAD.Object.prototype.get/.set): every axios request fails synchronously withTypeError, notAxiosError, so handlers filtering onerror.isAxiosErrormishandle the failure.Attack Flow
Root Cause
Finding A.
lib/utils.js:404-429'smerge()createsresult = {}at line 406. The dangerous-keys filter on lines 408-411 blocks the write side, but the read at line 414 (isPlainObject(result[targetKey])) still walks the prototype chain. WhentargetKeymatches a polluted slot,result[targetKey]returns the polluted nested object, and the recursivemerge(result[targetKey], val)on line 415 iterates that object's own keys viaforEachand copies them as own properties into the new accumulator. Those keys flow throughmergeConfig.js:35→Axios.js:148(utils.merge(headers.common, headers[config.method])) →Axios.js:155(AxiosHeaders.concat(...)) → onto the wire viahttp.js:677(headers: headers.toJSON()) →http.js:767(transport.request(options, ...)).Finding B.
lib/core/mergeConfig.js:25correctly makesconfig = Object.create(null), but the descriptor passed on line 26 is a plain-object literal - itsget/setlookups walkObject.prototype. A polluted non-functionObject.prototype.getor.setmakesObject.definePropertythrowTypeError: Getter must be a function(orSetter must be a function) before the call returns. The descriptor is built unconditionally on everymergeConfiginvocation, so every axios request throws - POST, PUT, DELETE, PATCH, HEAD, QUERY, not only GET.Suggested Fix
Use null-prototype objects in place of the plain-object literals at
lib/utils.js:406andlib/core/mergeConfig.js:26-31. The same descriptor pattern recurs atlib/core/AxiosError.js:37,lib/core/AxiosHeaders.js:100,lib/utils.js:447/454/492/498, andlib/adapters/adapters.js:28/32.Resources
lodash.mergeprototype pollution inlodash <= 4.17.10Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Regular Expression Denial of Service (ReDoS) via Cookie Name Injection
CVE-2026-44496 / GHSA-hfxv-24rg-xrqf
More information
Details
Summary
Axios versions before
0.32.0on the0.xline and before1.16.0on the1.xline build a regular expression from the configured XSRF cookie name without escaping regex metacharacters. In standard browser environments, an attacker who can influence the cookie name passed to axios can cause expensive regex backtracking while axios readsdocument.cookie.The practical impact is client-side availability degradation, such as freezing the affected browser tab while axios prepares a request. The issue does not affect ordinary Node.js HTTP adapter usage, React Native, or web workers, where axios does not read
document.cookie.Impact
Applications are affected only when attacker-controlled data can reach the XSRF cookie name configuration or a direct/unsafe call to the internal cookie helper.
This does not expose credentials, modify requests, or affect response integrity. The impact is availability only.
Affected Functionality
Affected code paths:
lib/helpers/cookies.jsread(name)in standard browser environments.lib/helpers/resolveConfig.jsin1.x, when browser XHR/fetch adapters resolve XSRF config.lib/adapters/xhr.jsin0.x, when the XHR adapter reads the configured XSRF cookie.axios/unsafe/helpers/cookies.jsin1.x, if callers pass attacker-controlled names.Unaffected code paths:
xsrfCookieName: 'XSRF-TOKEN'when not attacker-controlled.xsrfCookieName: null.document.cookie.Technical Details
Affected versions interpolate the cookie name into a regex.
Because
nameis not escaped, regex metacharacters in the cookie name are interpreted as regex syntax. A payload such as(.+)+$can force catastrophic backtracking againstdocument.cookie.The fix avoids dynamic regex construction and parses
document.cookieby splitting on;, trimming leading whitespace, and comparing cookie names with exact string equality.Proof of Concept of Attack
Expected result: timings grow rapidly as the cookie string length increases.
Workarounds
Set
xsrfCookieName: nullif the application does not need axios to read an XSRF cookie.Do not derive
xsrfCookieNamefrom untrusted input. If a dynamic cookie name is unavoidable, validate it against a strict cookie-name allowlist before passing it to axios.Avoid calling
axios/unsafe/helpers/cookies.jsdirectly with untrusted namesOriginal Source
Regular Expression Denial of Service (ReDoS) via Cookie Name Injection
1. Title
ReDoS via Unsanitized Cookie Name in Dynamic Regular Expression Construction
2. Affected Software and Version
lib/helpers/cookies.js3. Vulnerability Type / CWE
4. CVSS 3.1 Score
Score: 7.5 (High)
Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H5. Description
The
cookies.read()function inlib/helpers/cookies.jsconstructs a regular expression dynamically using thenameparameter without any sanitization or escaping of special regex characters. At line 33, the code passes the rawnamevalue directly intonew RegExp():An attacker who can control or influence the cookie name parameter (e.g., via XSRF cookie name configuration, prototype pollution of
xsrfCookieName, or any code path where user input reachescookies.read()) can inject a malicious regex pattern that causes catastrophic backtracking, leading to a Denial of Service condition.With a crafted input of approximately 20-30 characters, the regex engine can be forced to consume several seconds to minutes of CPU time, effectively freezing the JavaScript event loop.
6. Root Cause Analysis
File:
lib/helpers/cookies.jsLine: 33
The vulnerability exists because:
nameparameter is concatenated directly into a regex pattern without escaping special regex metacharacters.(?:^|; )prefix combined with an injected pattern like((((.*)*)*)*)*creates nested quantifiers that cause catastrophic backtracking when the regex engine attempts to match againstdocument.cookie.The
cookies.read()function is called fromlib/helpers/resolveConfig.jsat line 61:The
xsrfCookieNamevalue comes from the Axios configuration, which can be influenced by prototype pollution or direct configuration injection.7. Proof of Concept
8. PoC Output
The exponential growth pattern is clearly visible: each additional 2 characters approximately quadruples the execution time.
9. Impact
10. Remediation / Suggested Fix
Escape all regex metacharacters in the
nameparameter before constructing the regular expression.Alternatively, avoid dynamic regex construction entirely and use string-based parsing:
11. References
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Proxy-Authorization header leaks to redirect target when proxy is re-evaluated to direct connection
CVE-2026-44486 / GHSA-j5f8-grm9-p9fc
More information
Details
Summary
Axios’ Node.js HTTP adapter can leak proxy credentials to a redirect target in affected versions. When a request is sent through an authenticated proxy, Axios may add a
Proxy-Authorizationheader. If Axios then follows a redirect and the redirected request is no longer sent through that proxy, the staleProxy-Authorizationheader can remain on the redirected request and be sent to the redirect target.This affects Node.js's use of Axios with automatic redirects enabled and an authenticated proxy configuration. Browser adapters are not affected.
Impact
An attacker who controls a server that the victim application requests can redirect the request so that the attacker-controlled redirect target receives the victim’s proxy credentials.
The most relevant case is a Node.js application using an authenticated
HTTP_PROXYfor an initialhttp://request, with redirects enabled, where the redirect target resolves to no proxy, such as anhttps://URL whenHTTPS_PROXYis unset.This does not affect browser, XHR, or fetch adapter behaviour. It also does not affect requests with
maxRedirects: 0.Affected Functionality
Affected functionality is limited to the Node.js HTTP adapter in
lib/adapters/http.js.Relevant inputs and settings include:
HTTP_PROXY,HTTPS_PROXY, andNO_PROXY.http://user:pass@proxy.example:8080.follow-redirects.setProxy().beforeRedirects.proxy.Technical Details
In affected v1 releases,
setProxy()addsProxy-Authorizationwhen a proxy with credentials is selected, but redirect handling callssetProxy()again without first clearing any existing proxy authorization header.If the redirected URL resolves to no proxy,
setProxy()does not add a new proxy configuration and also does not remove the old header. The redirected request can therefore carry the staleProxy-Authorizationheader to the final origin.The v1 fix in
afca61aadds anisRedirectpath that deletes any case variant ofProxy-Authorizationbefore proxy settings are re-applied on redirect. The v0 backport in2af6116fixed the 0.x line for0.32.0.Proof of Concept of Attack
Attacker-controlled HTTP endpoint:
Expected result on affected versions:
Expected result on fixed versions:
Workarounds
Set
maxRedirects: 0and handle redirects manually.Avoid using authenticated proxy environment variables for requests to untrusted HTTP origins unless redirect behaviour is controlled.
Ensure proxy environment variables are configured consistently across protocols so redirects do not unexpectedly change from proxied to direct connections.
Original Source
Summary
Axios' Node.js HTTP adapter can leak proxy credentials to a redirect target origin. When an initial request is sent through an authenticated HTTP proxy, Axios adds a
Proxy-Authorizationheader. On redirect, Axios re-evaluates proxy settings, but if the redirected request no longer uses a proxy, the staleProxy-Authorizationheader is not cleared. As a result, the redirect target can receive the proxy credential directly.This issue affects the Node.js HTTP adapter and can be reproduced when the initial request uses
HTTP_PROXYwith authentication, redirects are enabled, and the redirected request is resolved to no proxy, such as whenHTTPS_PROXYis unset or the redirect target is excluded byNO_PROXY.Details
In the current implementation:
setProxy()addsProxy-Authorizationwhen a proxy with credentials is in use.setProxy()for the redirected request.setProxy()does not clear the previously addedProxy-Authorizationheader.Relevant code locations:
lib/adapters/http.jssetProxy()addsProxy-AuthorizationbeforeRedirects.proxyPoC
GET http://<attacker-site>/startcorp proxy302 Location: https://<attacker-site>/finalProxy-AuthorizationheaderObserved output:
This demonstrates that the proxy credential is exposed to the redirect target origin.
Impact
Exposes authenticated proxy credentials to an attacker-controlled origin.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Proxy-Authorization Credential Leak to Origin Server Across HTTP-to-HTTPS Redirect in Axios Node.js HTTP Adapter
CVE-2026-44487 / GHSA-p92q-9vqr-4j8v
More information
Details
Summary
Axios’s Node.js HTTP adapter may forward a
Proxy-Authorizationheader to a redirected origin during specific proxy-to-direct redirect flows.This affects Node.js usage, where an initial HTTP request is sent through an authenticated HTTP proxy, redirects are followed, and the redirected URL is no longer proxied. Under affected redirect shapes, the final origin can receive the proxy credential that was intended only for the outbound proxy.
Impact
A malicious or attacker-controlled origin can cause an axios client to disclose its configured proxy credentials if all required conditions are present.
The leak is limited to Node.js HTTP adapter requests. Browser, XHR, fetch, and React Native adapter paths are not affected by this Node-specific proxy handling path.
The practical impact depends on the leaked credentials. If the credential is reusable and the proxy is reachable by the attacker, the attacker may be able to authenticate to that proxy, subject to the proxy’s own network exposure, authorisation policy, and credential scope.
Affected Functionality
Affected functionality requires all of the following:
http://request using an authenticated proxy fromconfig.proxyor proxy environment variables.HTTPS_PROXYor a matchingNO_PROXY.Unaffected functionality includes browser adapters, requests with
maxRedirects: 0, requests without proxy credentials, and redirect flows where the redirect layer stripsProxy-Authorizationbefore axios reconfigures the redirected request.Technical Details
In affected versions,
lib/adapters/http.jsaddsProxy-AuthorizationinsetProxy()when a proxy with credentials is used.Axios also installs redirect proxy handling so redirected requests can re-run proxy resolution. Before the fix, when the redirected request no longer resolved to a proxy,
setProxy()did not clear aProxy-Authorizationheader inherited from the previous request options. Iffollow-redirectsdid not remove that header for the specific redirect shape, the redirected direct request carried the stale proxy credential to the origin.The
1.xfix in commitafca61achangessetProxy(options, configProxy, location, isRedirect)so redirect re-invocation removes every case variant ofProxy-Authorizationbefore applying proxy settings for the next hop. Regression tests intests/unit/adapters/http.test.jscover no-proxy redirects,NO_PROXY, different proxy targets, casing variants, and an end-to-end redirect flow.The
0.xfixed release0.32.0includes a backport-styleremoveProxyAuthorization()guard inlib/adapters/http.js.Proof of Concept of Attack
Safe local outline using dummy credentials:
Expected vulnerable behaviour:
Expected fixed behaviour:
Workarounds
Set
maxRedirects: 0and handle redirects manually, ensuringProxy-Authorizationis not copied to requests that are not sent through the proxy.Avoid using reusable authenticated HTTP proxy credentials for requests to untrusted origins. If exposure is suspected, rotate the proxy credential.
Original Source
Summary
Axios’s Node.js
httpadapter can incorrectly forward a retainedProxy-Authorizationheader to the final HTTPS origin during certain HTTP-to-HTTPS redirect flows.When an initial HTTP request is sent through an authenticated
HTTP_PROXY, and the redirected HTTPS request is sent directly because no proxy applies to the redirected HTTPS URL, Axios retains the staleProxy-Authorizationheader and forwards it to the final origin.Details
The issue occurs during a proxy-to-direct transition across redirects.
When Axios sends an initial HTTP request through an authenticated
HTTP_PROXY, it correctly includesProxy-Authorizationfor the proxy hop. If that response redirects to an HTTPS URL on the same hostname, and no proxy applies to the redirected HTTPS URL, the redirected request is sent directly to the final origin instead of through the proxy.In the affected flow, the final HTTPS origin receives a
Proxy-Authorizationheader value that was intended only for the outbound proxy.Whether the issue is observable depends on how the redirect layer compares the host and port across the redirect. In the affected redirect shape, confidential-header handling does not remove the retained
Proxy-Authorizationheader before the redirected request is sent.Root Cause Analysis
Based on code review, Axios appears to create the stale header condition in its Node.js
httpadapter.In lib/adapters/http.js:
Proxy-Authorizationin setProxy().As a result, Axios correctly adds proxy credentials for the first proxied request, but does not clear them when a later redirected request becomes direct.
A dependent factor is the behavior of the redirect layer. In the affected redirect shape, confidential-header handling does not remove the retained
Proxy-Authorizationheader before the redirected request is sent. This appears to be why the issue is observable only for certain redirect shapes.Client Conditions
HTTP_PROXYHTTPS_PROXYis configured)Under that redirect shape, the retained
Proxy-Authorizationheader is not removed before the redirected request is sent to the final HTTPS origin.Reproduction Outline
Detailed reproduction instructions were shared with the maintainers during coordinated disclosure. The public outline below preserves the validated configuration and observable behavior needed to assess exposure, while omitting environment-specific test-harness details.
The issue was reproduced only in a researcher-controlled local test environment using dummy proxy credentials.
The issue was confirmed under the following conditions:
Observed behavior
Proxy-Authorization.Proxy-Authorizationheader.Proxy-Authorizationheader value that was intended only for the proxy.Expected behavior
Axios should not send the
Proxy-Authorizationheader on a redirected request that is no longer sent through a proxy.Impact
Under the affected redirect and proxy configuration, the final HTTPS origin may receive a retained
Proxy-Authorizationheader value that was intended only for the outbound proxy.If that credential is valid and reusable, and the outbound proxy is reachable by the attacker, the attacker may be able to authenticate to that proxy with the affected environment’s proxy credential, subject to the credential’s scope and the proxy’s access controls.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Excessive recursion in formDataToJSON can cause denial of service
CVE-2026-67313 / GHSA-42h9-826w-cgv3
More information
Details
Summary
Axios versions
0.28.0and later contain uncontrolled recursion informDataToJSON, the helper behind the publicaxios.formToJSON()/ namedformToJSONAPI and the default request transform used when FormData is sent with anapplication/jsoncontent type.Applications are affected when they pass attacker-controlled
FormDatafield names into this functionality. A field name with thousands of nested bracket segments can exhaust the JavaScript call stack and throwRangeError: Maximum call stack size exceeded, causing request failure and, in applications that do not handle the exception or rejected promise, possible process termination.Impact
The impact is denial of service against applications that process untrusted
FormDatafield names through axios' FormData-to-JSON conversion.The vulnerable path is not reached by merely installing axios, by normal multipart
FormDatapass-through, or by ordinary axios requests that do not request JSON serialisation ofFormData. In the default axios request, the error is produced before network I/O and returned as a rejected Promise. Direct use offormToJSON()throws synchronously.Server-side applications are the primary risk when remote users can submit arbitrary form field names, and the application converts those fields with
formToJSON()or sends them through axios as JSON.Affected Functionality
Affected APIs and paths:
axios.formToJSON(formData)import { formToJSON } from "axios"lib/helpers/formDataToJSON.jstransformRequestwhendataisFormDataandContent-Typecontainsapplication/jsonUnaffected or lower-risk paths:
FormDatarequests withoutJSON Content-TypetoFormData()object-to-FormData serialisation, which already has amaxDepthguardTechnical Details
lib/helpers/formDataToJSON.jsparses a form field name into path segments withparsePropPath(). For a key such asa[x][x][x], each bracketed segment becomes another path element.formDataToJSON()then calls the nestedbuildPath(path, value, target, index)function.buildPath()recursively calls itself once for each path segment and does not enforce a maximum depth:const result = buildPath(path, value, target[name], index);A key containing thousands of bracket segments, therefore, creates thousands of recursive calls. At sufficient depth, V8 throws
RangeError: Maximum call stack size exceeded.Axios already applies a depth guard to the inverse serializer in
lib/helpers/toFormData.js, wheremaxDepthdefaults to 100 and exceeding it throwsAxiosErrorwith codeERR_FORM_DATA_DEPTH_EXCEEDED.formDataToJSON()does not currently have equivalent protection.Proof of Concept of Attack
Expected vulnerable result:
RangeError: Maximum call stack size exceeded
The axios request transform path can also be reached before network I/O:
Expected vulnerable result:
RangeError: Maximum call stack size exceeded
Workarounds
Applications can avoid the vulnerable path by not converting attacker-controlled
FormDatato JSON with axios.If conversion is required before a fixed axios release is available, validate
FormDatafield names before callingformToJSON()or before sendingFormDatawithContent-Type: application/json. Reject keys whose parsed nesting depth exceeds the application's expected schema.For axios requests carrying untrusted
FormData, avoid settingContent-Type: application/json; leaving the data as multipart FormData bypassesformDataToJSON().Catching the resulting error can prevent process termination, but it does not remove the uncontrolled-recursion behaviour and should not be treated as the primary mitigation.
Original Report
Axios SSRF via Incomplete Loopback Detection
CWE-918 | CVSS 7.5 (HIGH) | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
1. Classification
2. Description
Summary
The
shouldBypassProxy()function in Axios fails to recognise0.0.0.0,::, and::ffff:0.0.0.0as loopback addresses. WhenNO_PROXY=localhostis configured, requests to these addresses are incorrectly forwarded through the proxy instead of being sent directly, enabling an SSRF attack against internal services reachable via the proxy's loopback interface.Root Cause
File:
lib/helpers/shouldBypassProxy.jsisIPv4Loopback(lines 3-8): Only checks for127.x.x.xaddresses by inspectingparts[0] !== '127'. The0.0.0.0address hasparts[0] === '0', so it falls through as non-loopback, even though on Linux0.0.0.0routes to the loopback interface.isIPv6Loopback(lines 10-38): Only checkshost === '::1'. The::address (unspecified IPv6) also routes to the loopback, but is not recognised.Attack Flow:
Attack Vector
3. Proof of Concept
Phase 1: Logic Verification
Phase 2: Docker E2E Reproduction
A full 3-container Docker reproduction was created and tested:
Reproduction steps:
Results:
127.0.0.1 + NO_PROXY=localhost→ BYPASS (correct)0.0.0.0 + NO_PROXY=localhost→ VIA_PROXY (SSRF)[::] + NO_PROXY=localhost→ VIA_PROXY (SSRF)[::ffff:0.0.0.0] + NO_PROXY=localhost→ VIA_PROXY (SSRF)Phase 3: Actual Axios Client
The real Axios HTTP client (v1.16.1, source tree) was tested through proxy configuration:
proxy: { host: 'proxy', port: 8888 }NO_PROXY=localhostand requestinghttp://0.0.0.0:9999/4. Impact
Attack Scenario
NO_PROXY=localhostto protect internal serviceshttp://0.0.0.0:8080/adminas the target URL0.0.0.0→ the proxy's own loopback → reaches the internal admin service on port 8080Potential Consequences
Likelihood
5. Remediation
Code Fix
File:
lib/helpers/shouldBypassProxy.jsWorkarounds
0.0.0.0and::to theNO_PROXYenvironment variable explicitly127.0.0.1instead of0.0.0.0in all internal service URLs0.0.0.0and::before passing to AxiosSeverity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Nested axios option objects can consume polluted prototype values
CVE-2026-67319 / GHSA-7q8q-rj6j-mhjq
More information
Details
Summary
Axios can consume inherited properties from nested request option objects when the JavaScript process already has a polluted
Object.prototype.The top-level merged config is protected with a null prototype, but nested plain objects such as
authandparamsSerializerare cloned into ordinary objects. If application code passes placeholders such asauth: {}orparamsSerializer: {}, inheritedusername,password,encode, orserializeproperties can influence outbound requests.Impact
This is reachable only when another component has already polluted
Object.prototypeand the application passes an affected nested axios option object.Confirmed impacts include silent injection of an
Authorization: Basic ...header from inheritedusernameandpasswordvalues, and query-string tampering when inheritedparamsSerializerfields are function-valued.The
authcase requires only string-valued pollution. Full query-string replacement throughparamsSerializer.serializerequires a function-valued pollution primitive; string-only pollution may still cause request failures or encoding changes throughencode.This does not mean every axios request is affected. Requests that do not pass
auth, do not passparamsSerializer, or provide explicit own properties for the relevant nested fields are not affected by this specific gadget.Affected Functionality
Affected runtime functionality:
lib/adapters/http.js.lib/helpers/resolveConfig.js.lib/helpers/buildURL.js.axios.getUri()when called with an affectedparamsSerializerobject.Affected config shapes:
auth: {}or anauthobject missing ownusernameand/orpassword.paramsSerializer: {}or aparamsSerializerobject missing ownencodeand/orserialize.Unaffected by this specific issue:
authproperty.paramsSerializerproperty.authorparamsSerializervalues in current hardened versions.Technical Details
lib/core/mergeConfig.jscreates the top-level merged config withObject.create(null), but nested object cloning still uses ordinary{}containers:Downstream code then reads nested fields without own-property checks.
In
lib/helpers/resolveConfig.js:In
lib/adapters/http.js:In
lib/helpers/buildURL.js:Proof of Concept of Attack
Observed result:
Workarounds
If upgrading is not yet possible, avoid passing placeholder nested option objects.
Remove
authentirely when Basic auth is not intended. ForparamsSerializerobjects, provide explicit ownencodeandserializeproperties or removeparamsSerializerwhen custom serialization is not required.These workarounds only address this axios gadget. They do not remediate the separate prototype-pollution primitive that must already exist in the application process.
Original Report
Summary
axios 1.16.1 mitigates prototype-pollution gadgets on the top-level request config but not on nested option objects. When a caller passes a partial nested option object such as auth: {} or paramsSerializer: {}, axios reads inner fields (username, password, encode, serialize) through the prototype chain. If Object.prototype has been polluted by another component in the same Node.js process, those inherited values are silently injected into the outbound request, including the Authorization header and the serialized query string.
Details
mergeConfig (lib/core/mergeConfig.js) was hardened to use a null-prototype container for the top-level config, but its nested-clone helper still produces ordinary {} containers:
mergeConfig.js Lines 36-45
The cloned nested objects therefore inherit from Object.prototype. Downstream consumers read sensitive fields via plain dotted access, with no own-property guard:
Browser / fetch Basic auth — lib/helpers/resolveConfig.js:
resolveConfig.js Lines 64-70
Node HTTP adapter Basic auth — lib/adapters/http.js:
http.js Lines 829-836
paramsSerializer reads — lib/helpers/buildURL.js:
buildURL.js Lines 31-54
Because auth.username, auth.password, options.encode, and options.serialize are accessed without hasOwnProperty checks, a polluted Object.prototype.username / Object.prototype.password / Object.prototype.serialize flows directly into the outgoing request.
The auth sink is the primary impact (silent Basic-auth injection); paramsSerializer.serialize is a secondary but powerful sink because it can fully replace the query string.
PoC
Impact
Concrete consequences:
Severity
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Prototype pollution gadgets can alter axios request construction
CVE-2026-67316 / GHSA-mmx7-hfxf-jppx
More information
Details
Summary
axios is vulnerable to read-side prototype-pollution gadgets when
Object.prototypehas already been polluted by another vulnerability or dependency. The most broadly reachable issue is in the bodyless method aliases:axios.get(),axios.delete(),axios.head(), andaxios.options()read inheriteddatabefore config normalization, causing attacker-controlled body data to be sent on requests that did not explicitly set a body.Additional low-level paths affect consumers that call exported adapters/helpers directly with plain config objects. In those cases, inherited
proxyorparamsSerializervalues can influence request routing or URL serialization. These low-level paths are not reproduced through normalaxios.get()usage on1.15.2+.Impact
An attacker who can first pollute
Object.prototypecan cause axios to send attacker-controlled request bodies on bodyless method aliases. This can corrupt request semantics where the receiving service processes bodies onGET,DELETE,HEAD, orOPTIONS.For direct low-level Node HTTP adapter usage, inherited
proxycan route requests through an attacker-controlled proxy. Depending on axios version, target scheme, and proxy behavior, this can expose request URLs, headers, and bodies or allow traffic modification.For direct
resolveConfigor browser-adapter helper usage, inheritedparamsSerializercan be invoked with request params, allowing attacker-controlled URL serialization. This was not reproduced through normal high-level axios calls on1.15.2+.Affected Functionality
Affected normal API:
axios.get(url[, config])axios.delete(url[, config])axios.head(url[, config])axios.options(url[, config])Affected low-level usage:
axios/lib/adapters/http.jsoraxios/unsafe/adapters/http.jswith plain configs and no ownproxy.axios/unsafe/helpers/resolveConfig.jsor direct browser adapter/helper paths with plain configs and no ownparamsSerializer.Unaffected or corrected scope:
axios.get()calls on1.15.2+did not reproduce theproxyorparamsSerializergadgets becausemergeConfig()returns a null-prototype config and uses own-property reads.Technical Details
lib/core/Axios.jsconstructs aliases for bodyless methods and copiesdatawith(config || {}).databefore config normalization. IfObject.prototype.datais polluted, this inherited value becomes an owndataproperty in the merged request config and is sent by the adapter.lib/core/mergeConfig.jsin1.15.2+returns a null-prototype config and useshasOwnPropguards, which prevents normal high-level requests from inheriting pollutedproxyandparamsSerializervalues after merge. This is why those two reporter claims do not reproduce through normalaxios.get()on1.15.2or1.16.1.The low-level adapter/helper paths can still receive plain configs directly. In that usage, direct reads of
config.proxyin the Node HTTP adapter andconfig.paramsSerializerin affectedresolveConfig()versions can consume inherited polluted values.Proof of Concept of Attack
Expected result: a request body is sent even though the caller did not explicitly set
config.data.Workarounds
Avoid processing untrusted input with libraries or code paths that can pollute
Object.prototype. As a defense-in-depth mitigation before an axios fix is available, explicitly passdata: undefinedon bodyless method aliases when running in a process where prototype pollution is a concern.Original Report
Summary
Three prototype pollution read-side gadgets in axios bypass the
own()hasOwnProp guard pattern, allowing a pollutedObject.prototypeto hijack outbound requests.Details
The
own()helper was introduced after GHSA-q8qp-cvcw-x6jj to prevent polluted prototype properties from reaching security-sensitive config reads. Three paths were missed:config.proxyat http.js:715 goes straight intosetProxy(). A pollutedObject.prototype.proxyreroutes outbound requests through an attacker-controlled proxy, exposing Authorization headers and full request URLs.(config || {}).dataat Axios.js:248 covers GET, HEAD, DELETE, OPTIONS. Even without explicit body, polluted value becomes the body. I got injected payloads on 3 of 4 method types in testing.config.paramsSerializerat resolveConfig.js:32 is three lines below theown()definition that was supposed to protect it. A polluted function ontoObject.prototype.paramsSerializergets called with the request params on every request that has query strings.I read up on the threat model and I believe T-R4b identifies this exact class and notes that config-read paths must use
hasOwnPropguards. These three seem to predate or were missed by that coverage.PoC
Ran against
axios@1.15.2onnode:22-slimin Docker. Clean install, no other deps.Impact
Any app with a polluted prototype (common via transitive deps like lodash, qs, minimist) should be affected. Gadget 1 steals credentials and redirects traffic. Gadget 2 corrupts request semantics. Gadget 3 gives the attacker arbitrary control over URL construction and a data exfiltration channel. All three fire silently on normal application code that never touches proxy, data, or
paramsSerializerdirectly.Severity
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Deep formToJSON Key Recursion Can Cause Denial of Service
CVE-2026-67312 / GHSA-pmv8-rq9r-6j72
More information
Details
Summary
Axios versions starting with
0.28.0contain uncontrolled recursion informDataToJSON, which is exposed asaxios.formToJSON()and used internally when axios serialisesFormDatawithContent-Type: application/json.If an application passes attacker-controlled
FormDatafield names to this functionality, a field name with thousands of nested bracket segments can exhaust the JavaScript call stack and cause denial of service for that request or, in applications without appropriate error handling, process termination.Impact
Applications are affected only when untrusted users can control
FormDatakey names that are converted through axios.Affected paths include direct use of
axios.formToJSON()on untrustedFormDataand axios requests in which attacker-controlledFormDatais sent withContent-Type: application/json.The observed failure is
RangeError: Maximum call stack size exceeded. In local testing, this error is catchable, so process-wide crash depends on the consuming application's error handling and runtime behaviour.Affected Functionality
Affected functionality:
axios.formToJSON(formData)formToJSONtransformRequestbehaviour forFormDatawhenContent-Typecontainsapplication/jsonUnaffected functionality:
FormDatasubmission without JSON serialisationtoFormData, which already enforces amaxDepthguard<=0.27.2, whereformDataToJSONwas not presentTechnical Details
The vulnerable code is in
lib/helpers/formDataToJSON.js.parsePropPath()splits a field name such asa[x][x][x]into path segments.buildPath()then recursively processes one segment per call without enforcing a maximum depth:A key with thousands of bracket-delimited segments causes thousands of recursive calls and can exceed the JavaScript engine's call stack limit.
Relevant source locations:
lib/helpers/formDataToJSON.jscontains the unbounded recursivebuildPath().lib/axios.jsexposes the helper asaxios.formToJSON.index.jsexposesformToJSONas a named export.index.d.tsandindex.d.ctsdeclare the public API.lib/defaults/index.jscallsformDataToJSON(data)when JSON-serializingFormData.The inverse helper,
toFormData, already enforcesmaxDepthand throwsAxiosErrorwithERR_FORM_DATA_DEPTH_EXCEEDED, butformDataToJSONdoes not have an equivalent guard.Proof of Concept of Attack
Expected result on affected versions:
RangeError: Maximum call stack size exceeded
The same condition can be reached via an axios request transformation when attacker-controlled
FormDatais sent withContent-Type: application/json.Workarounds
Applications can reject or normalise untrusted form field names before calling
axios.formToJSON().Applications can avoid sending untrusted
FormDatathrough axios as JSON unless JSON conversion is required.Applications should catch errors around
formToJSON()or axios requests that transform untrustedFormData.Original Source
Summary
An uncontrolled recursion vulnerability in
formDataToJSONallows any user who controls FormData input to crash a Node.js process with a single request. The function recurses once per bracket-delimited segment in a FormData key name with no depth limit, so a key likea[x][x][x]...with 15,000+ segments exhausts the call stack. This is a denial-of-service that kills the process via an unrecoverableRangeError. The inverse functiontoFormDataalready enforces amaxDepthlimit (default 100) for exactly this reason —formDataToJSONlacks the equivalent guard.Details
Vulnerable function:
buildPathinlib/helpers/formDataToJSON.js, lines 50–82.buildPath(path, value, target, index)is called recursively — once per segment in the parsed property path — with no depth check:The key is first split into segments by
parsePropPath(line 17), which extracts every[segment]via regex. A key with 15,000 bracket pairs produces a 15,001-element array, causing 15,001 recursive calls — well beyond the V8 default stack limit (~10,000–15,000 frames).formDataToJSONis a public API consumed two ways:Directly by consumers — exported as
axios.formToJSON()(lib/axios.js:80), with TypeScript declarations in bothindex.d.ts:699andindex.d.cts:708, and documented in the API reference in four languages (docs/pages/advanced/api-reference.md).Internally by
transformRequest— called atlib/defaults/index.js:56when the request body isFormDataandContent-Typecontainsapplication/json:Contrast with
toFormData: The inverse function (lib/helpers/toFormData.js:118) enforcesmaxDepth(default 100) and throwsAxiosErrorwith codeERR_FORM_DATA_DEPTH_EXCEEDEDwhen exceeded.formDataToJSONhas no equivalent protection.PoC
Requires only Node.js and an unmodified axios v1.x install:
Verified output on Node.js 22.22.3 against axios v1.16.1 (current
v1.xHEAD):The process crashes. In a server context (e.g., Express middleware calling
axios.formToJSON()on an uploaded form), a single crafted request terminates the process.Impact
Denial of Service (process crash). Any unauthenticated user who can submit FormData to a Node.js application that passes it through
axios.formToJSON()— or that sends it as a JSON-serialized FormData body via axios — can crash the server process with a single request. TheRangeErrorfrom stack exhaustion is unrecoverable in many contexts (it cannot be reliably caught when the stack is already full). No authentication or special privileges are required; the attacker only needs to control a FormData key name.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Prototype-Pollution Gadget in the Default Instance Allows Inherited Object.prototype.method to Override HTTP Method
CVE-2026-101902 / GHSA-9fr6-4gfg-395g
More information
Details
Summary
Axios default-instance requests that omit an explicit method can read an inherited
methodvalue fromObject.prototype. If another vulnerability in the same process pollutesObject.prototype.method, calls such asaxios.request({ url })andaxios({ url })can send a state-changing HTTP method instead of the expected defaultGET.Axios does not create the prototype pollution source. This is a read-side gadget in axios request dispatch.
Impact
In an affected application with a separate prototype-pollution primitive, an attacker can change axios default-instance requests that omit
methodfromGETto methods such asDELETE,POST,PUT, orPATCH. The practical impact depends on the target endpoint and can include unintended writes, deletion, or other state changes.Method aliases such as
axios.get(url)and requests with an explicit ownmethodare not affected by the confirmed method path.Affected Functionality
Affected:
axios.request({ url }).axios({ url }).config.methodis provided.Not affected in the confirmed method PoC:
axios.get(url)and other method aliases.axios.request({ url, method: 'GET' }).axios.create().request({ url })when the created instance defaults are produced by currentmergeConfig()and do not inherit fromObject.prototype.Technical Details
lib/core/Axios.jssets the request method with:mergeConfig()now returns a null-prototype request config, soconfig.methodis safe fromObject.prototype. However, the default axios instance stores the module defaults object asthis.defaults, and that defaults object is a normal object. IfObject.prototype.methodexists,this.defaults.methodresolves to the polluted inherited value.Local verification on axios
1.18.1showed a default-instanceaxios.request({ url })request reaching a loopback server asDELETEafterObject.prototype.method = 'DELETE'.Proof of Concept of Attack
Constrained local demonstration:
Expected safe behavior is a
GETrequest. Current affected behavior sendsDELETEon the default instance when no method is provided.Workarounds
Use explicit method aliases such as
axios.get()or set an ownmethodon request configs. Avoid default-instance shorthand for requests in processes where prototype pollution is suspected or possible.Original report
Summary
Axios
1.17.0contains a read-side prototype-pollution gadget in the default Axios instance. If another vulnerability in the same Node.js process pollutesObject.prototype.method, default-instance calls such asaxios.request({ url })andaxios({ url })can be forced to use an attacker-controlled HTTP method, such asDELETE, instead of the expected defaultGET.Axios does not create the prototype pollution by itself. The issue is that Axios reads fallback values from
this.defaultswithout an own-property guard, allowing inherited values fromObject.prototypeto influence request behavior.This should be treated as a prototype-pollution gadget, not as a standalone prototype-pollution source. In other words, Axios is not the component that lets the attacker write to
Object.prototype; Axios is the component that becomes dangerous afterObject.prototypehas already been polluted by another bug in the same process.Details
The vulnerable fallback read is in
lib/core/Axios.js:The merged request
configis created as a null-prototype object inlib/core/mergeConfig.js:Therefore, when the caller does not provide
config.method, the fallback becomes:The default Axios instance uses the module defaults object. In the tested version, that defaults object is affected by inherited properties from
Object.prototype. IfObject.prototype.methodis polluted,this.defaults.methodresolves to that inherited value and Axios uses it as the request method.The same unsafe inherited-property pattern also affects
this.defaults.allowAbsoluteUrls, which can change how absolute URLs are combined withbaseURL.Proof of Concept
Access and Attack Conditions
No admin access is required for Axios itself. This is a library-level gadget.
The attacker must have an existing way to pollute
Object.prototypein the same Node.js process, for example through a separate prototype-pollution vulnerability in another dependency or application input path. Axios is the gadget that turns that pollution into dangerous HTTP request behavior.Required condition:
What Axios contributes:
What Axios does not do:
Affected usage:
Not affected in the confirmed PoC:
Reproduction Steps
1.17.0:Object.prototype.method = "DELETE", default-instance calls that omit an explicit method are sent asDELETE.What the Method PoC Script Does
The PoC starts a temporary local HTTP server for each Axios call and records the HTTP method received by that server. It then simulates an already-existing prototype-pollution condition by setting:
While that pollution is active, the script sends five Axios requests:
The script then deletes the polluted property:
Finally, it prints the method observed by the local server for each request. The vulnerable behavior is confirmed when the default Axios instance sends
DELETEforaxios.request({ url })andaxios({ url }), while the safe comparison paths still sendGET.Method Override PoC
Create
validate-prototype-method-gadget.mjs:Run:
Observed result:
The local server received:
This confirms that inherited
Object.prototype.methodcontrols the default method for vulnerable default-instance request paths.Supporting
allowAbsoluteUrlsGadget EvidenceThe same inherited-property issue affects
allowAbsoluteUrls.Create
validate-prototype-allowabsoluteurls-gadget.mjs:Observed result:
Without pollution, Axios sends the request to the absolute URL. After
Object.prototype.allowAbsoluteUrls = false, the default Axios instance combines the absolute URL withbaseURLand sends the request to the base server instead. An instance created withaxios.create()remains unaffected.Impact
This is a prototype-pollution gadget. It becomes exploitable when an application has any separate prototype-pollution primitive that allows an attacker to set properties on
Object.prototypein the same Node.js process.If such pollution is possible, an attacker can influence Axios default-instance requests that omit an explicit method:
axios.request({ url })axios({ url })This can turn an expected safe default
GETrequest into a state-changing method such as:DELETEPOSTPUTPATCHPotential impact includes unauthorized state-changing requests, deletion of resources, unintended writes, data corruption, or denial of service when the target endpoint treats the HTTP method as security-relevant.
The issue does not require admin access to Axios itself, but it does require an existing prototype-pollution path in the application. Applications that always use explicit methods, method aliases such as
axios.get(), or isolated instances created throughaxios.create()are not affected by the confirmed method-override path.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Axios: Header Injection via Inherited headers After Minimal Interceptor
CVE-2026-101904 / GHSA-j8rh-479h-cp32
More information
Details
Summary
Axios request interceptors may return a replacement config object. If an interceptor returns a plain object without an own
headersproperty,dispatchRequest()later evaluatesconfig.headersand can resolve an inheritedObject.prototype.headersvalue. In a process where another vulnerability has pollutedObject.prototype.headers, axios can send attacker-controlled headers.Axios does not create the prototype pollution source, and the interceptor itself is trusted caller code. The vulnerable behavior is the post-interceptor axios config read that reopens a prototype-pollution gadget after earlier null-prototype config hardening.
Impact
An attacker with a prior same-process prototype-pollution primitive can inject headers into affected axios requests when the application uses an interceptor that rebuilds config and omits headers. Depending on the target service, injected headers can affect cache behavior, conditional requests, metadata services, or application-specific authorization and routing logic.
The issue is conditional and should not be described as affecting every interceptor or every request.
Affected Functionality
Affected:
headersproperty.dispatchRequest()header normalization throughAxiosHeaders.from(config.headers).Not affected:
headersproperty.Technical Details
lib/core/dispatchRequest.jscontains:The initial merged config is null-prototype, but an interceptor can replace it with a normal object. If that object has no own
headers, the read can resolveObject.prototype.headers.Local verification on axios
1.18.1pollutedObject.prototype.headers = { 'X-Poisoned': 'yes' }, installed an interceptor that returned{ url, method, timeout, proxy: false }, and sent a request. The loopback server receivedX-Poisoned: yes.Proof of Concept of Attack
Constrained local demonstration:
Expected safe behavior is that missing headers normalize to an empty header set. Current affected behavior reads inherited
Object.prototype.headers.Workarounds
Interceptors that rebuild config should always set an own
headersproperty, for example by preservingconfig.headersor settingheaders: {}. Mutating and returning the existing merged config also avoids replacing the null-prototype object.Original report
Summary
Axios 1.17.0 blocks the old
Object.prototype.commonheader bucket gadget. However, if a request interceptor rebuilds a minimal config object and omitsheaders,dispatchRequest()reads inheritedObject.prototype.headers.This allows attacker-controlled headers to be placed on the wire.
Affected Version
Validated on:
1.17.04306df2v24.15.0Preconditions
Object.prototype.headers.headers.Root Cause
dispatchRequest()uses:If
configis a normal object returned by an interceptor and lacks ownheaders, this readsObject.prototype.headers.Impact
An attacker can inject request headers. Depending on the target service, this can cause cache manipulation, conditional-response suppression, request smuggling preconditions, metadata-service header injection, or application-specific authorization bypass.
Proof of Concept
Observed wire headers:
References
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
axios/axios (axios)
v1.20.0Compare Source
v1.20.0 — August 19, 2026
This release hardens runtime option handling, adds RFC 9110 status-code aliases, fixes Node.js and XHR reliability issues, and refreshes project tooling and documentation.
⚠️ Breaking Changes & Deprecations
🔒 Security Fixes
🐛 Bug Fixes
🔧 Maintenance & Chores
🌟 New Contributors
We are thrilled to welcome our new contributors. Thank you for helping improve axios:
Full Changelog (https://github.com/axios/axios/compare/v1.19.0...v1.20.0)
v1.19.0Compare Source
This release raises the form-data security floor, adds configuration and type-system capabilities, and fixes NO_PROXY matching, interceptor errors, progress reporting, and serialization edge cases.
v1.18.1Compare Source
v1.18.1 — June 21, 2026
This release focuses on Node HTTP adapter fixes, safer AxiosError serialisation, runtime/type correctness fixes, documentation updates, and dependency maintenance.
🐛 Bug Fixes
encoder.call(this)receives theAxiosURLSearchParamsinstance correctly. (#11019)🔧 Maintenance & Chores
Documentation: Documented sensitive headers and status transition behaviour, prepared cleaned-up docs, added Deno install instructions, and clarified that request data is request-specific (#11007, #11010, #11023, #11025)
Dependencies: Bumped vite, rollup, form-data, js-yaml, and multer across the root project, docs, smoke tests, and module test workspaces. (#11011, #11012, #11013, #11014, #11015, #11016, #11017, #11026)
🌟 New Contributors
We are thrilled to welcome our new contributors. Thank you for helping improve axios:
Full Changelog
v1.18.0Compare Source
This release hardens redirect and URL handling, improves the validateStatus configuration semantics, and includes updates to documentation, dependencies, and release metadata.
v1.17.0Compare Source
This release adds Node HTTP zstd decompression, hardens config and release workflows, and fixes authentication, header, proxy, and type-handling regressions.
v1.16.1Compare Source
This release ships a defence-in-depth fix for prototype pollution in
formDataToJSON, hardens proxy and CI workflows, restores Webpack 4 compatibility for the fetch adapter, and includes several small bug fixes and maintenance improvements.v1.16.0Compare Source
This release adds support for the QUERY HTTP method and a new
ECONNREFUSEDerror constant, lands a substantial wave of HTTP, fetch, and XHR adapter bug fixes around redirects, aborts, headers, and timeouts, and welcomes 23 new contributors.v1.15.2Compare Source
This release delivers prototype-pollution hardening for the Node HTTP adapter, adds an opt-in
allowedSocketPathsallowlist to mitigate SSRF via Unix domain sockets, fixes a keep-alive socket memory leak, and ships supply-chain hardening across CI and security docs.v1.15.1Compare Source
This release ships a coordinated set of security hardening fixes across headers, body/redirect limits, multipart handling, and XSRF/prototype-pollution vectors, alongside a broad sweep of bug fixes, test migrations, and threat-model documentation updates.
v1.15.0Compare Source
Bug Fixes
Features
Contributors to this release
PRs
1.2.6 (2023-01-28)
Bug Fixes
CommonRequestHeadersList&CommonResponseHeadersListtypes to be private in commonJS; (#5503) (5a3d0a3)Contributors to this release
PRs
1.2.5 (2023-01-26)
Bug Fixes
Contributors to this release
PRs
1.2.4 (2023-01-22)
Bug Fixes
RawAxiosRequestConfigback toAxiosRequestConfig; (#5486) (2a71f49)AxiosRequestConfiggeneric; (#5478) (9bce81b)Contributors to this release
PRs
1.2.3 (2023-01-10)
Bug Fixes
Contributors to this release
PRs
[1.2.2] - 2022-12-29
Fixed
Chores
Contributors to this release
[1.2.1] - 2022-12-05
Changed
Fixed
Refactors
Chores
Contributors to this release
PRs
[1.2.0] - 2022-11-10
Changed
Fixed
Refactors
Chores
Contributors to this release
PRs
[1.1.3] - 2022-10-15
Added
Fixed
Chores
Contributors to this release
PRs
[1.1.2] - 2022-10-07
Fixed
Contributors to this release
PRs
[1.1.1] - 2022-10-07
Fixed
Contributors to this release
PRs
[1.1.0] - 2022-10-06
Fixed
Contributors to this release
PRs
[1.0.0] - 2022-10-04
Added
Changed
Deprecated
Removed
Fixed
Chores
Security
Contributors to this release
Bertrand Marron
Dmitriy Mozgovoy
Dan Mooney
Michael Li
aong
Des Preston
Ted Robertson
zhoulixiang
Arthur Fiorette
Kumar Shanu
JALAL
Jingyi Lin
Philipp Loose
Alexander Shchukin
Dave Cardwell
Cat Scarlet
Luca Pizzini
Kai
Maxime Bargiel
Brian Helba
reslear
Jamie Slome
Landro3
rafw87
Afzal Sayed
Koki Oyatsu
Dave
暴走老七
Spencer
Adrian Wieprzkowicz
Jamie Telin
毛呆
Kirill Shakirov
Rraji Abdelbari
Jelle Schutter
Tom Ceuppens
Johann Cooper
Dimitris Halatsis
chenjigeng
João Gabriel Quaresma
Victor Augusto
neilnaveen
Pavlos
Kiryl Valkovich
Naveen
wenzheng
hcwhan
Bassel Rachid
Grégoire Pineau
felipedamin
Karl Horky
Yue JIN
Usman Ali Siddiqui
WD
Günther Foidl
Stephen Jennings
C.T.Lin
mia-z
Parth Banathia
parth0105pluang
Marco Weber
Luca Pizzini
Willian Agostini
Huyen Nguyen
v1.14.0Compare Source
This release fixes a security vulnerability in the
formidabledependency, resolves a CommonJS compatibility regression, hardens proxy and HTTP/2 handling, and modernises the build and test toolchain.v1.13.6Compare Source
This release adds React Native Blob support, fixes several enumeration and export regressions, and patches FormData detection for WeChat Mini Program environments.
v1.13.5Compare Source
This release patches a prototype pollution denial-of-service vulnerability, fixes a missing
statusfield regression inAxiosError, adds interceptor ordering control, and introduces URL validation forisAbsoluteURL.v1.13.4Compare Source
Patch release fixing regressions introduced in v1.13.3, including TypeScript export compatibility and CI/build stability.
v1.13.3Compare Source
Bug Fixes
Features
undefinedas a value in AxiosRequestConfig (#5560) (095033c)Reverts
Contributors to this release
v1.13.2Compare Source
Bug Fixes
Performance Improvements
Contributors to this release
v1.13.1Compare Source
Bug Fixes
Contributors to this release
v1.13.0Compare Source
Bug Fixes
Features
Contributors to this release
1.12.2 (2025-09-14)
Bug Fixes
Contributors to this release
1.12.1 (2025-09-12)
Bug Fixes
Contributors to this release
v1.12.2Compare Source
Bug Fixes
Features
Contributors to this release
1.12.2 (2025-09-14)
Bug Fixes
Contributors to this release
1.12.1 (2025-09-12)
Bug Fixes
Contributors to this release
v1.12.1Compare Source
Bug Fixes
Features
Contributors to this release
1.12.2 (2025-09-14)
Bug Fixes
Contributors to this release
1.12.1 (2025-09-12)
Bug Fixes
Contributors to this release
v1.12.0Compare Source
Bug Fixes
Features
Contributors to this release
1.12.2 (2025-09-14)
Bug Fixes
Contributors to this release
1.12.1 (2025-09-12)
Bug Fixes
Contributors to this release
v1.11.0Compare Source
Bug Fixes
Contributors to this release
v1.10.0Compare Source
Bug Fixes
Features
Contributors to this release
v1.9.0Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.8.4Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.8.3Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.8.2Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.8.1Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.8.0Compare Source
Bug Fixes
getSetCookieby using 'get' method for caseless access; (#6874) (d4f7df4)Features
Contributors to this release
1.8.4 (2025-03-19)
Bug Fixes
allowAbsoluteUrls: falsewithoutbaseURL(#6833) (f10c2e0)Contributors to this release
1.8.3 (2025-03-10)
Bug Fixes
allowAbsoluteUrlstobuildFullPathinxhrandfetchadapters (#6814) (ec159e5)Contributors to this release
1.8.2 (2025-03-07)
Bug Fixes
Contributors to this release
1.8.1 (2025-02-26)
Bug Fixes
generateStringto platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)Contributors to this release
v1.7.9Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.8Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.7Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.6Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.5Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.4Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.3Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.2Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.1Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.7.0Compare Source
Bug Fixes
Features
Reverts
BREAKING CHANGES
code relying on the above will now combine the URLs instead of prefer request URL
feat: add config option for allowing absolute URLs
fix: add default value for allowAbsoluteUrls in buildFullPath
fix: typo in flow control when setting allowAbsoluteUrls
Contributors to this release
1.7.9 (2024-12-04)
Reverts
Contributors to this release
1.7.8 (2024-11-25)
Bug Fixes
globalThis.TextEncoderwhen available (#6634) (df956d1)Contributors to this release
1.7.7 (2024-08-31)
Bug Fixes
Contributors to this release
1.7.6 (2024-08-30)
Bug Fixes
Contributors to this release
1.7.5 (2024-08-23)
Bug Fixes
ReferenceError: navigator is not definedfor custom environments; (#6567) (fed1a4b)Contributors to this release
1.7.4 (2024-08-13)
Bug Fixes
Contributors to this release
1.7.3 (2024-08-01)
Bug Fixes
Contributors to this release
1.7.2 (2024-05-21)
Bug Fixes
Contributors to this release
1.7.1 (2024-05-20)
Bug Fixes
Contributors to this release
v1.6.8Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.7Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.6Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.5Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.4Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.3Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.2Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.1Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.6.0Compare Source
Features
Contributors to this release
1.6.8 (2024-03-15)
Bug Fixes
Contributors to this release
1.6.7 (2024-01-25)
Bug Fixes
Contributors to this release
1.6.6 (2024-01-24)
Bug Fixes
Contributors to this release
1.6.5 (2024-01-05)
Bug Fixes
Contributors to this release
1.6.4 (2024-01-03)
Bug Fixes
Contributors to this release
1.6.3 (2023-12-26)
Bug Fixes
Contributors to this release
1.6.2 (2023-11-14)
Features
withCredentialsbehavior; (#6046) (cff9967)PRs
Contributors to this release
1.6.1 (2023-11-08)
Bug Fixes
Contributors to this release
PRs
v1.5.1Compare Source
Bug Fixes
PRs
Contributors to this release
1.5.1 (2023-09-26)
Bug Fixes
Content-Typeheader for FormData in non-browser environments; (#5917) (bc9af51)content-encodingheader to handle case-insensitive values (#5890) (#5892) (4c89f25)Contributors to this release
PRs
v1.5.0Compare Source
Bug Fixes
PRs
Contributors to this release
1.5.1 (2023-09-26)
Bug Fixes
Content-Typeheader for FormData in non-browser environments; (#5917) (bc9af51)content-encodingheader to handle case-insensitive values (#5890) (#5892) (4c89f25)Contributors to this release
PRs
v1.4.0Compare Source
Bug Fixes
multipart/form-datacontent type for FormData payload on custom client environments; (#5678) (bbb61e7)Features
AxiosHeaderValuetype. (#5525) (726f1c8)Performance Improvements
Contributors to this release
PRs
1.3.6 (2023-04-19)
Bug Fixes
toStringmethod on the target; (#5661) (aa372f7)Contributors to this release
PRs
1.3.5 (2023-04-05)
Bug Fixes
paramsSerializerconfig; (#5633) (a56c866)Contributors to this release
PRs
1.3.4 (2023-02-22)
Bug Fixes
Contributors to this release
PRs
1.3.3 (2023-02-13)
Bug Fixes
Contributors to this release
PRs
1.3.2 (2023-02-03)
Bug Fixes
ERR_INVALID_URLerror; (#5528) (128d56f)Contributors to this release
PRs
1.3.1 (2023-02-01)
Bug Fixes
Contributors to this release
PRs
v1.3.6Compare Source
Bug Fixes
multipart/form-datacontent type for FormData payload on custom client environments; (#5678) (bbb61e7)Features
AxiosHeaderValuetype. (#5525) (726f1c8)Performance Improvements
Contributors to this release
PRs
1.3.6 (2023-04-19)
Bug Fixes
toStringmethod on the target; (#5661) (aa372f7)Contributors to this release
PRs
1.3.5 (2023-04-05)
Bug Fixes
paramsSerializerconfig; (#5633) (a56c866)Contributors to this release
PRs
1.3.4 (2023-02-22)
Bug Fixes
Contributors to this release
PRs
1.3.3 (2023-02-13)
Bug Fixes
Contributors to this release
PRs
1.3.2 (2023-02-03)
Bug Fixes
ERR_INVALID_URLerror; (#5528) (128d56f)Contributors to this release
PRs
1.3.1 (2023-02-01)
Bug Fixes
Contributors to this release
PRs
v1.3.5Compare Source
Bug Fixes
multipart/form-datacontent type for FormData payload on custom client environments; (#5678) (bbb61e7)Features
AxiosHeaderValuetype. (#5525) (726f1c8)Performance Improvements
Contributors to this release
PRs
1.3.6 (2023-04-19)
Bug Fixes
toStringmethod on the target; (#5661) (aa372f7)Contributors to this release
PRs
1.3.5 (2023-04-05)
Bug Fixes
paramsSerializerconfig; (#5633) (a56c866)Contributors to this release
PRs
1.3.4 (2023-02-22)
Bug Fixes
Contributors to this release
PRs
1.3.3 (2023-02-13)
Bug Fixes
Contributors to this release
PRs
1.3.2 (2023-02-03)
Bug Fixes
ERR_INVALID_URLerror; (#5528) (128d56f)Contributors to this release
PRs
1.3.1 (2023-02-01)
Bug Fixes
Contributors to this release
PRs
Configuration
📅 Schedule: (in timezone Europe/Berlin)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.