Podatność w narzędziu go (kompilator gccgo) umożliwia wykonanie dowolnego kodu podczas budowania aplikacji korzystających z cgo. Atakujący może dostarczyć złośliwy moduł, który przy budowaniu projektu uruchomi niebezpieczny kod na maszynie dewelopera lub serwera CI/CD.
▸ Pokaż oryginał (EN)
The go command may execute arbitrary code at build time when using cgo. This may occur when running "go get" on a malicious module, or when running any other command which builds untrusted code. This is can by triggered by linker flags, specified via a "#cgo LDFLAGS" directive. Flags containing embedded spaces are mishandled, allowing disallowed flags to be smuggled through the LDFLAGS sanitization by including them in the argument of another flag. This only affects usage of the gccgo compiler.
Dyrektywa '#cgo LDFLAGS' pozwala na przekazywanie flag do linkera podczas kompilacji kodu C w projekcie Go. Mechanizm sanityzacji flag LDFLAGS zawiera błąd w obsłudze flag zawierających osadzone spacje — niedozwolone flagi mogą zostać przemycone jako argument innej, pozornie dozwolonej flagi. Dzięki temu atakujący, kontrolując kod źródłowy modułu (np. złośliwy pakiet pobrany przez 'go get'), może przekazać do linkera dowolne flagi i tym samym wywołać wykonanie arbitralnego kodu w czasie kompilacji. Podatność dotyczy wyłącznie kompilatora gccgo.
Atakujący może wykonać dowolny kod na maszynie, która buduje niezaufany kod — w szczególności podczas pobierania i kompilacji złośliwego modułu Go. Może to prowadzić do pełnego przejęcia kontroli nad środowiskiem deweloperskim lub pipeline'em CI/CD.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (m.in. https://go.dev/cl/501224). Zaleca się unikanie budowania niezaufanego kodu Go z użyciem kompilatora gccgo do czasu zastosowania poprawki. Należy monitorować komunikaty bezpieczeństwa projektu Go (golang-announce).
Golang Go (kompilator gccgo) oraz Fedoraproject Fedora — konkretne wersje wskazane w referencjach producenta
Podatność dotyczy wyłącznie kompilatora gccgo — standardowy kompilator gc (gc toolchain) nie jest podatny. Wektor ataku obejmuje typowe operacje deweloperskie takie jak 'go get', co zwiększa ryzyko nieświadomego uruchomienia złośliwego kodu.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HFedora Project Fedora
OSFedoraproject38Golang Go
APPGolang< 1.19.101.20.0 – 1.20.5 (bez)
Powiązane podatności
PHP CGI argument injection – RCE na Windows przez mechanizm Best-Fit
Type Confusion w V8 (Google Chrome) — RCE przez spreparowaną stronę HTML
Type Confusion w silniku V8 Chrome — zdalne wykonanie kodu (RCE)
Use-after-free w Google Chrome Visuals umożliwiający ucieczkę z sandbox
Integer overflow w Skia w Google Chrome — sandbox escape