Nezha versions 2.0.10 through 2.3.2 use a restricted HTTP client to validate user-configurable notification and DDNS webhook URLs, but the denylist did not cover IPv6 transition ranges — specifically the 6to4 prefix 2002::/16 and the local-use IPv4/IPv6 translation prefix 64:ff9b:1::/48. Because such addresses satisfy Go's netip.Addr.IsGlobalUnicast check, the URL validator accepted them. An authenticated user able to configure a webhook may be able to cause the dashboard to issue requests to an otherwise restricted IPv6 endpoint, but only where the dashboard's network provides unusual or non-standards-compliant routing for these transition ranges; no direct path to an IPv4 metadata, loopback, or private-network HTTP request has been demonstrated. The issue is fixed in version 2.3.3 (commit d1fcde8e), which blocks both prefixes.
Nezha 2.0.10 through 2.3.2 SSRF Denylist Bypass IPv6
Problem type
Affected products
nezhahq
< 2.3.3 - AFFECTED
2.3.3 - UNAFFECTED
References
https://github.com/nezhahq/nezha/security/advisories/GHSA-jr2j-7hvh-h4q9
https://github.com/nezhahq/nezha/commit/d1fcde8e
https://www.vulncheck.com/advisories/nezha-2.0.10-through-2.3.2-ssrf-denylist-bypass-ipv6
GitHub Security Advisories
GHSA-qvpf-fj3j-7cw6
Nezha versions 2.0.10 through 2.3.2 use a restricted HTTP client to validate user-configurable...
https://github.com/advisories/GHSA-qvpf-fj3j-7cw6Nezha versions 2.0.10 through 2.3.2 use a restricted HTTP client to validate user-configurable notification and DDNS webhook URLs, but the denylist did not cover IPv6 transition ranges — specifically the 6to4 prefix 2002::/16 and the local-use IPv4/IPv6 translation prefix 64:ff9b:1::/48. Because such addresses satisfy Go's netip.Addr.IsGlobalUnicast check, the URL validator accepted them. An authenticated user able to configure a webhook may be able to cause the dashboard to issue requests to an otherwise restricted IPv6 endpoint, but only where the dashboard's network provides unusual or non-standards-compliant routing for these transition ranges; no direct path to an IPv4 metadata, loopback, or private-network HTTP request has been demonstrated. The issue is fixed in version 2.3.3 (commit d1fcde8e), which blocks both prefixes.
https://github.com/nezhahq/nezha/security/advisories/GHSA-jr2j-7hvh-h4q9
https://nvd.nist.gov/vuln/detail/CVE-2026-101087
https://github.com/nezhahq/nezha/commit/d1fcde8e
https://www.vulncheck.com/advisories/nezha-2.0.10-through-2.3.2-ssrf-denylist-bypass-ipv6
https://github.com/advisories/GHSA-qvpf-fj3j-7cw6
JSON source
https://cveawg.mitre.org/api/cve/CVE-2026-101087Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-101087",
"assignerOrgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
"assignerShortName": "VulnCheck",
"dateUpdated": "2026-09-27T20:49:58.749Z",
"dateReserved": "2026-09-27T20:29:07.432Z",
"datePublished": "2026-09-27T20:49:58.749Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
"shortName": "VulnCheck",
"dateUpdated": "2026-09-27T20:49:58.749Z"
},
"datePublic": "2026-08-11T00:00:00.000Z",
"title": "Nezha 2.0.10 through 2.3.2 SSRF Denylist Bypass IPv6",
"descriptions": [
{
"lang": "en",
"value": "Nezha versions 2.0.10 through 2.3.2 use a restricted HTTP client to validate user-configurable notification and DDNS webhook URLs, but the denylist did not cover IPv6 transition ranges — specifically the 6to4 prefix 2002::/16 and the local-use IPv4/IPv6 translation prefix 64:ff9b:1::/48. Because such addresses satisfy Go's netip.Addr.IsGlobalUnicast check, the URL validator accepted them. An authenticated user able to configure a webhook may be able to cause the dashboard to issue requests to an otherwise restricted IPv6 endpoint, but only where the dashboard's network provides unusual or non-standards-compliant routing for these transition ranges; no direct path to an IPv4 metadata, loopback, or private-network HTTP request has been demonstrated. The issue is fixed in version 2.3.3 (commit d1fcde8e), which blocks both prefixes."
}
],
"affected": [
{
"vendor": "nezhahq",
"product": "nezha",
"defaultStatus": "unaffected",
"versions": [
{
"version": "2.0.10",
"status": "affected",
"versionType": "semver",
"lessThan": "2.3.3"
},
{
"version": "2.3.3",
"status": "unaffected",
"versionType": "semver"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "Server-Side Request Forgery (SSRF)",
"cweId": "CWE-918",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://github.com/nezhahq/nezha/security/advisories/GHSA-jr2j-7hvh-h4q9",
"name": "GitHub Security Advisory (GHSA-jr2j-7hvh-h4q9)",
"tags": [
"vendor-advisory"
]
},
{
"url": "https://github.com/nezhahq/nezha/commit/d1fcde8e",
"name": "Patch Commit",
"tags": [
"patch"
]
},
{
"url": "https://www.vulncheck.com/advisories/nezha-2.0.10-through-2.3.2-ssrf-denylist-bypass-ipv6",
"name": "VulnCheck Advisory: Nezha 2.0.10 through 2.3.2 SSRF Denylist Bypass IPv6",
"tags": [
"third-party-advisory"
]
}
],
"metrics": [
{
"format": "CVSS"
},
{
"format": "CVSS",
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "LOW",
"availabilityImpact": "NONE",
"baseScore": 4.3,
"baseSeverity": "MEDIUM"
}
}
]
}
}
}