Skip to content

Commit c478aca

Browse files
1 parent 95b7dd4 commit c478aca

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

advisories/github-reviewed/2026/04/GHSA-3p68-rc4w-qgx5/GHSA-3p68-rc4w-qgx5.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-3p68-rc4w-qgx5",
4-
"modified": "2026-04-15T20:27:55Z",
4+
"modified": "2026-04-16T18:44:31Z",
55
"published": "2026-04-09T17:32:19Z",
66
"aliases": [
77
"CVE-2025-62718"
88
],
9-
"summary": "Axios has a NO_PROXY Hostname Normalization Bypass Leads to SSRF",
9+
"summary": "Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF",
1010
"details": "Axios does not correctly handle hostname normalization when checking `NO_PROXY` rules.\nRequests to loopback addresses like `localhost.` (with a trailing dot) or `[::1]` (IPv6 literal) skip `NO_PROXY` matching and go through the configured proxy.\n\nThis goes against what developers expect and lets attackers force requests through a proxy, even if `NO_PROXY` is set up to protect loopback or internal services.\n\nAccording to [RFC 1034 §3.1](https://datatracker.ietf.org/doc/html/rfc1034#section-3.1) and [RFC 3986 §3.2.2](https://datatracker.ietf.org/doc/html/rfc3986#section-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 as `localhost`. \nHowever, Axios does a literal string comparison instead of normalizing hostnames before checking `NO_PROXY`. This causes requests like `http://localhost.:8080/` and `http://[::1]:8080/` to be incorrectly proxied.\n\nThis issue leads to the possibility of proxy bypass and SSRF vulnerabilities allowing attackers to reach sensitive loopback or internal services despite the configured protections.\n\n---\n\n**PoC**\n\n```js\nimport http from \"http\";\nimport axios from \"axios\";\n\nconst proxyPort = 5300;\n\nhttp.createServer((req, res) => {\n console.log(\"[PROXY] Got:\", req.method, req.url, \"Host:\", req.headers.host);\n res.writeHead(200, { \"Content-Type\": \"text/plain\" });\n res.end(\"proxied\");\n}).listen(proxyPort, () => console.log(\"Proxy\", proxyPort));\n\nprocess.env.HTTP_PROXY = `http://127.0.0.1:${proxyPort}`;\nprocess.env.NO_PROXY = \"localhost,127.0.0.1,::1\";\n\nasync function test(url) {\n try {\n await axios.get(url, { timeout: 2000 });\n } catch {}\n}\n\nsetTimeout(async () => {\n console.log(\"\\n[*] Testing http://localhost.:8080/\");\n await test(\"http://localhost.:8080/\"); // goes through proxy\n\n console.log(\"\\n[*] Testing http://[::1]:8080/\");\n await test(\"http://[::1]:8080/\"); // goes through proxy\n}, 500);\n```\n\n**Expected:** Requests bypass the proxy (direct to loopback).\n**Actual:** Proxy logs requests for `localhost.` and `[::1]`.\n\n---\n\n**Impact**\n\n* Applications that rely on `NO_PROXY=localhost,127.0.0.1,::1` for protecting loopback/internal access are vulnerable.\n* Attackers controlling request URLs can:\n\n * Force Axios to send local traffic through an attacker-controlled proxy.\n * Bypass SSRF mitigations relying on NO\\_PROXY rules.\n * Potentially exfiltrate sensitive responses from internal services via the proxy.\n \n \n---\n\n**Affected Versions**\n\n* Confirmed on Axios **1.12.2** (latest at time of testing).\n* affects all versions that rely on Axios’ current `NO_PROXY` evaluation.\n\n---\n\n**Remediation**\nAxios should normalize hostnames before evaluating `NO_PROXY`, including:\n\n* Strip trailing dots from hostnames (per RFC 3986).\n* Normalize IPv6 literals by removing brackets for matching.",
1111
"severity": [
1212
{
1313
"type": "CVSS_V3",
14-
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:L"
14+
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
1515
},
1616
{
1717
"type": "CVSS_V4",
18-
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:L/SC:H/SI:L/SA:L"
18+
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N"
1919
}
2020
],
2121
"affected": [
@@ -109,7 +109,7 @@
109109
"CWE-441",
110110
"CWE-918"
111111
],
112-
"severity": "CRITICAL",
112+
"severity": "MODERATE",
113113
"github_reviewed": true,
114114
"github_reviewed_at": "2026-04-09T17:32:19Z",
115115
"nvd_published_at": "2026-04-09T15:16:08Z"

advisories/github-reviewed/2026/04/GHSA-fvcv-3m26-pcqx/GHSA-fvcv-3m26-pcqx.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-fvcv-3m26-pcqx",
4-
"modified": "2026-04-14T15:20:19Z",
4+
"modified": "2026-04-16T18:45:23Z",
55
"published": "2026-04-10T19:47:16Z",
66
"aliases": [
77
"CVE-2026-40175"
@@ -11,7 +11,7 @@
1111
"severity": [
1212
{
1313
"type": "CVSS_V3",
14-
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
14+
"score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N"
1515
}
1616
],
1717
"affected": [
@@ -102,7 +102,7 @@
102102
"CWE-444",
103103
"CWE-918"
104104
],
105-
"severity": "CRITICAL",
105+
"severity": "MODERATE",
106106
"github_reviewed": true,
107107
"github_reviewed_at": "2026-04-10T19:47:16Z",
108108
"nvd_published_at": "2026-04-10T20:16:22Z"

0 commit comments

Comments
 (0)