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
The go.mod toolchain directive, introduced in Go 1.21, can be leveraged to execute scripts and binaries relati...
The go command may execute arbitrary code at build time when using cgo. This may occur when running "go get" o...