Podatność w Golang Go 1.0.2 polega na tworzeniu pliku tymczasowego o przewidywalnej nazwie podczas uruchamiania testów na maszynach współdzielonych. Umożliwia to atakującemu podłożenie złośliwego pliku w miejsce tymczasowego i jego wykonanie z uprawnieniami procesu testowego.
▸ Pokaż oryginał (EN)
golang/go in 1.0.2 fixes all.bash on shared machines. dotest() in src/pkg/debug/gosym/pclntab_test.go creates a temporary file with predicable name and executes it as shell script.
Funkcja dotest() w pliku src/pkg/debug/gosym/pclntab_test.go tworzy plik tymczasowy o przewidywalnej (możliwej do zgadnięcia) nazwie, a następnie wykonuje go jako skrypt powłoki. Na maszynach współdzielonych lokalny atakujący może wcześniej utworzyć plik o tej samej nazwie lub podstawić w jego miejsce własny złośliwy skrypt. Jest to klasyczny atak typu symlink/TOCTOU, sklasyfikowany jako CWE-377 (Insecure Temporary File).
Atakujący z dostępem do systemu współdzielonego może doprowadzić do wykonania dowolnego kodu z uprawnieniami procesu uruchamiającego testy, co może skutkować przejęciem kontroli nad systemem, ujawnieniem danych lub ich modyfikacją.
Należy zastosować patche dostępne u producenta zgodnie z referencjami — poprawka została wprowadzona w ramach commita dostępnego w repozytorium GitHub projektu golang/go (commit 8ac275bb01588a8c0e6c0fe2de7fd11f08feccdd). Zaleca się aktualizację do nowszej wersji Go zawierającej tę poprawkę.
Golang Go w wersji 1.0.2 (podatność dotyczy środowisk, w których uruchamiane są testy na maszynach współdzielonych)
Podatność została opublikowana w bazie CVE dopiero w 2021 roku, mimo że dotyczy kodu z wersji 1.0.2 Go i poprawka powstała znacznie wcześniej (widoczne w historii repozytorium). Podatność jest istotna wyłącznie w kontekście uruchamiania testów na maszynach współdzielonych.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HGolang Go
APPGolang1.0.2
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
Nieautoryzowane wykonanie kodu przez dyrektywę toolchain w Go 1.21