Podatność w bibliotece Golang Crypto powoduje integer overflow podczas zapisu danych większych niż 4GB przez kanał SSH, co skutkuje nieskończoną pętlą wysyłającą puste pakiety. Prowadzi to do trwałego zablokowania dostępności usługi (DoS) oraz naruszenia integralności danych.
▸ Pokaż oryginał (EN)
When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.
Podczas wywołania metody Write na kanale SSH z danymi przekraczającymi 4GB, wewnętrzne obliczenie rozmiaru ładunku (payload) dokonywane jest na zmiennej podatnej na przepełnienie całkowite (integer overflow, CWE-190). Przepełnienie powoduje, że pętla zapisu traci zdolność do postępu i kręci się w nieskończoność, nieprzerwanie wysyłając puste pakiety. Przyczyną jest użycie zbyt wąskiego typu całkowitego, który ulega truncation przy wartościach powyżej 2^32 bajtów. Poprawka polega na zastąpieniu porównania rozmiaru typem int64, eliminując możliwość przepełnienia.
Atakujący lub niesprawne oprogramowanie mogą doprowadzić do trwałego zablokowania procesu obsługującego kanał SSH (Denial of Service), uniemożliwiając jego dalsze działanie. Ponadto wysyłanie pustych pakietów zamiast właściwych danych narusza integralność przesyłanych informacji.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Poprawka została wprowadzona w changelist https://go.dev/cl/781663 — zaleca się aktualizację biblioteki golang.org/x/crypto do wersji zawierającej tę zmianę. Należy monitorować ogłoszenia projektu Go pod adresem https://groups.google.com/g/golang-announce.
Biblioteka Golang Crypto (golang.org/x/crypto) — wersje wskazane w referencjach producenta (patrz: https://pkg.go.dev/vuln/GO-2026-5020)
Podatność jest śledzona jako GO-2026-5020 w bazie podatności Go. Zgłoszenie błędu dostępne pod numerem https://go.dev/issue/79567.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:HGolang Crypto
APPGolang< 0.52.0
Powiązane podatności
Golang Crypto: pominięcie ograniczeń przy przekazywaniu kluczy do zdalnego agenta SSH
Golang Crypto: brak wymuszenia ograniczenia ConfirmBeforeUse w NewKeyring()
Brak weryfikacji flagi User Presence w FIDO/U2F w Golang Crypto
Golang Crypto: resource leak przez niezamawiane odpowiedzi SSH global request
Nieprawidłowa weryfikacja unieważnionych kluczy CA w Golang Crypto