CVE-2026-115700 PUBLISHED

SSRF allowlist bypass via percent-encoded bracketed IPv6 or trailing-dot IP literal in hackney

Assigner: EEF
Reserved: 25.10.2026 Published: 26.10.2026 Updated: 26.10.2026

Interpretation Conflict vulnerability in hackney_url in benoitc hackney allows Server Side Request Forgery via a percent-encoded bracketed IPv6 literal or an IP literal with a trailing dot. A host such as %5B%3A%3Affff%3A127%2E0%2E0%2E1%5D (decoding to [::ffff:127.0.0.1]) or 127.0.0.1. is not an IP address to a caller's allowlist built on uri_string:parse/1 and inet:parse_address/1, while hackney connects to the address it denotes. The same applies to a Location target when redirects are followed.

The IP-literal gate that hackney_url:normalize/2 applies to a percent-decoded host, added to close the percent-encoded IP bypass of CVE-2026-47076, passes the decoded value to inet_parse:address/1 as is. The connect path in hackney_happy:parse_address/1 drops a surrounding bracket pair, and the resolver ignores a trailing dot, so both forms pass the gate and still reach the literal address. Domain names with a trailing dot and unencoded IPv6 literals are not affected.

This issue affects hackney: from 4.0.1 before 4.9.0.

Metrics

CVSS Vector: CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
CVSS Score: 6.9

Product Status

Vendor benoitc
Product hackney
Versions Default: unaffected
  • affected from 4.0.1 to 4.9.0 (excl.)
Vendor benoitc
Product hackney
Versions Default: unaffected
  • affected from 452620a92ec1da2e6b4862a049a2a4f04b42068f to f19561a0b422376348c91537e51377ab7325f4ee (excl.)

Affected Configurations

The application passes URLs that an untrusted party can influence to hackney and relies on its own host allowlist, built on uri_string:parse/1 or inet:parse_address/1, to keep requests away from internal addresses.

Workarounds

Run the allowlist on the host that hackney_url:normalize/1 returns for the parsed URL, and strip a surrounding bracket pair and a trailing dot from it before the IP check, so the check sees the same address the connect path uses.

Credits

  • Eurico Nicacio finder
  • Eurico Nicacio reporter
  • Benoit Chesneau remediation developer
  • Jonatan Männchen / EEF coordinator

References

Problem Types

  • CWE-436 Interpretation Conflict CWE
  • CWE-918 Server-Side Request Forgery (SSRF) CWE

Impacts

  • An application that checks user-supplied URLs against an IP allowlist before handing them to hackney can be made to request loopback, link-local metadata and private-network addresses that the allowlist rejects when they are written plainly.