Dyrektywa 'toolchain' w pliku go.mod, wprowadzona w Go 1.21, umożliwia wykonanie dowolnych skryptów i plików binarnych względem katalogu głównego modułu podczas uruchamiania polecenia 'go'. Podatność jest krytyczna, ponieważ może być wyzwolona przez pobranie złośliwego modułu z proxy lub bezpośrednio z systemu kontroli wersji.
▸ Pokaż oryginał (EN)
The go.mod toolchain directive, introduced in Go 1.21, can be leveraged to execute scripts and binaries relative to the root of the module when the "go" command was executed within the module. This applies to modules downloaded using the "go" command from the module proxy, as well as modules downloaded directly using VCS software.
Atakujący może umieścić w pliku go.mod złośliwą dyrektywę 'toolchain', która przy wykonaniu polecenia 'go' powoduje uruchomienie wskazanych skryptów lub plików binarnych względem katalogu głównego modułu. Podatność dotyczy zarówno modułów pobieranych za pośrednictwem module proxy, jak i modułów pobieranych bezpośrednio przy użyciu oprogramowania VCS (np. git). Nie jest wymagane żadne uwierzytelnienie ani interakcja użytkownika poza standardowym pobraniem modułu.
Atakujący może doprowadzić do wykonania dowolnego kodu (RCE) na maszynie ofiary w kontekście użytkownika uruchamiającego polecenie 'go', co może skutkować pełnym przejęciem systemu, ujawnieniem danych lub ich modyfikacją.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Szczegóły poprawki dostępne są pod adresem https://go.dev/cl/526158 oraz https://go.dev/issue/62198
Golang Go w wersji 1.21 oraz kolejnych wersjach wprowadzających obsługę dyrektywy 'toolchain' w pliku go.mod
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HGolang Go
APPGolang1.21.0 – 1.21.1 (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
Błędna klasyfikacja adresów IPv4-mapped IPv6 w bibliotece standardowej Go
RCE w Go — przemycanie flag linkera przez cgo LDFLAGS