Moderate severityNVD Advisory· Published Mar 16, 2026· Updated Mar 16, 2026
SSRF bypass via IPv4-mapped IPv6 literals
CVE-2026-2455
Description
Mattermost versions 11.3.x <= 11.3.0, 11.2.x <= 11.2.2, 10.11.x <= 10.11.10 fail to canonicalize IPv4-mapped IPv6 addresses before reserved IP validation which allows an attacker to perform SSRF attacks against internal services via IPv4-mapped IPv6 literals (e.g., [::ffff:127.0.0.1]).. Mattermost Advisory ID: MMSA-2026-00585
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/mattermost/mattermost/server/v8Go | < 8.0.0-20260129133647-5d787969c2d5 | 8.0.0-20260129133647-5d787969c2d5 |
github.com/mattermost/mattermost-serverGo | < 5.3.2-0.20260129133647-5d787969c2d5 | 5.3.2-0.20260129133647-5d787969c2d5 |
github.com/mattermost/mattermost-serverGo | >= 10.11.0-rc1, < 10.11.11 | 10.11.11 |
github.com/mattermost/mattermost-serverGo | >= 11.2.0-rc1, < 11.2.3 | 11.2.3 |
github.com/mattermost/mattermost-serverGo | >= 11.3.0-rc1, < 11.3.1 | 11.3.1 |
Affected products
1- Range: 11.3.0
Patches
15d787969c2d5MM-67268: Fix SSRF bypass via IPv4-mapped IPv6 literals (#35097)
2 files changed · +16 −0
server/public/shared/httpservice/client.go+5 −0 modified@@ -28,6 +28,11 @@ var reservedIPRanges []*net.IPNet // IsReservedIP checks whether the target IP belongs to reserved IP address ranges to avoid SSRF attacks to the internal // network of the Mattermost server func IsReservedIP(ip net.IP) bool { + // Canonicalize IPv4-mapped IPv6 addresses (e.g., ::ffff:127.0.0.1) to their + // native IPv4 form so that IPv4 CIDR ranges match correctly. + if ip4 := ip.To4(); ip4 != nil { + ip = ip4 + } for _, ipRange := range reservedIPRanges { if ipRange.Contains(ip) { return true
server/public/shared/httpservice/client_test.go+11 −0 modified@@ -211,6 +211,17 @@ func TestIsReservedIP(t *testing.T) { {"127.120.6.3", net.IPv4(127, 120, 6, 3), true}, {"8.8.8.8", net.IPv4(8, 8, 8, 8), false}, {"9.9.9.9", net.IPv4(9, 9, 9, 8), false}, + // IPv4-mapped IPv6 addresses should be detected as reserved + {"::ffff:127.0.0.1", net.ParseIP("::ffff:127.0.0.1"), true}, + {"::ffff:192.168.1.1", net.ParseIP("::ffff:192.168.1.1"), true}, + {"::ffff:10.0.0.1", net.ParseIP("::ffff:10.0.0.1"), true}, + {"::ffff:169.254.169.254", net.ParseIP("::ffff:169.254.169.254"), true}, + {"::ffff:8.8.8.8", net.ParseIP("::ffff:8.8.8.8"), false}, + // Pure IPv6 reserved addresses + {"::1", net.ParseIP("::1"), true}, + {"fe80::1", net.ParseIP("fe80::1"), true}, + // Public IPv6 + {"2607:f8b0:4004:800::200e", net.ParseIP("2607:f8b0:4004:800::200e"), false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {
Vulnerability mechanics
Synthesis attempt was rejected by the grounding validator. Re-run pending.
References
4- github.com/advisories/GHSA-gqv7-j2j8-qmwqghsaADVISORY
- mattermost.com/security-updatesghsavendor-advisoryWEB
- nvd.nist.gov/vuln/detail/CVE-2026-2455ghsaADVISORY
- github.com/mattermost/mattermost/commit/5d787969c2d5ab591a9dcd61b0810475eed7a646ghsaWEB
News mentions
0No linked articles in our index yet.