Funkcje klasyfikacji adresów IP w języku Go (m.in. IsPrivate, IsLoopback) niepoprawnie obsługiwały adresy IPv6 reprezentujące adresy IPv4 (IPv4-mapped IPv6), zwracając fałszywy wynik tam, gdzie powinny zwrócić prawdziwy. Może to prowadzić do obejścia mechanizmów kontroli dostępu opartych na weryfikacji typu adresu IP.
▸ Pokaż oryginał (EN)
The various Is methods (IsPrivate, IsLoopback, etc) did not work as expected for IPv4-mapped IPv6 addresses, returning false for addresses which would return true in their traditional IPv4 forms.
Adresy IPv4-mapped IPv6 to specjalny format pozwalający na reprezentację adresów IPv4 w przestrzeni adresowej IPv6 (np. ::ffff:127.0.0.1 odpowiada 127.0.0.1). Metody Is* w pakiecie net/netip nie traktowały tych adresów tak samo jak ich odpowiedników w czystym IPv4, przez co np. adres ::ffff:192.168.1.1 nie był rozpoznawany jako prywatny. Aplikacje polegające na tych funkcjach do podejmowania decyzji bezpieczeństwa mogły w efekcie błędnie zaklasyfikować adres i zezwolić na dostęp, który powinien być zablokowany.
Atakujący może ominąć filtry oparte na klasyfikacji adresów IP (np. blokadę adresów prywatnych, loopback lub link-local), co w zależności od aplikacji może skutkować nieautoryzowanym dostępem do zasobów, eskalacją uprawnień lub ujawnieniem wrażliwych danych.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (poprawka dostępna w go.dev/cl/590316). Zaleca się aktualizację do najnowszej łatanej wersji Go oraz przegląd kodu aplikacji korzystającego z metod Is* w kontekście adresów IPv4-mapped IPv6.
Golang Go — wersje wskazane w referencjach producenta (patrz go.dev/issue/67680 oraz lista golang-announce)
Podatność została zgłoszona na liście oss-security w dniu 2024-06-04, dzień przed oficjalną datą publikacji CVE.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HGolang Go
APPGolang< 1.21.111.22.0 – 1.22.4 (bez)
Powiązane podatności
Błąd arytmetyczny w kompilatorze Golang Go prowadzący do uszkodzenia pamięci
Przewidywalne UUID w Fiber v2 — podatność na generowanie słabych identyfikatorów
Golang crypto/tls: błędna walidacja certyfikatów przy wznawianiu sesji TLS
Nieautoryzowane wykonanie kodu przez dyrektywę toolchain w Go 1.21
RCE w Go — przemycanie flag linkera przez cgo LDFLAGS