Biblioteka libssh2 do wersji 1.11.1 zawiera podatność heap buffer overflow, która może być wykorzystana przez złośliwy serwer SSH jeszcze przed uwierzytelnieniem klienta. Atakujący kontrolujący serwer SSH może doprowadzić do uszkodzenia pamięci sterty w procesie klienta i przejęcia nad nim kontroli.
▸ Pokaż oryginał (EN)
libssh2 through 1.11.1, fixed in commit 42e33d8, contains a pre-authentication heap buffer overflow vulnerability that allows a malicious SSH server to corrupt heap metadata in any connecting client by sending a packet with a packet_length smaller than the cipher's block size during Encrypt-then-MAC cipher negotiation. In the fullpacket() function in src/transport.c, the ETM path allocates a buffer of packet_length bytes but copies blocksize minus one bytes via memcpy, causing an overflow that on 32-bit glibc writes attacker-controlled bytes into an adjacent chunk's SIZE field, enabling tcache bin confusion, overlapping live objects, and function pointer overwrite during the session handshake before authentication.
Podczas negocjacji szyfru w trybie Encrypt-then-MAC (ETM) złośliwy serwer SSH wysyła pakiet, w którym pole packet_length jest mniejsze niż rozmiar bloku szyfru (blocksize). W funkcji fullpacket() w pliku src/transport.c ścieżka ETM alokuje bufor o rozmiarze packet_length bajtów, lecz następnie kopiuje przez memcpy wartość blocksize minus jeden bajtów — tym samym zapisując dane poza granicą bufora. Na systemach 32-bitowych z biblioteką glibc nadpisuje to pole SIZE sąsiedniego fragmentu sterty bajtami kontrolowanymi przez atakującego, co umożliwia manipulację strukturami tcache bin, nakładanie się aktywnych obiektów w pamięci oraz nadpisanie wskaźnika funkcji. Cały atak przebiega w fazie handshake, zanim dojdzie do uwierzytelnienia.
Atakujący kontrolujący serwer SSH może doprowadzić do wykonania dowolnego kodu (RCE) w procesie klienta łączącego się przez libssh2, potencjalnie uzyskując pełną kontrolę nad jego kontekstem wykonania.
Należy zaktualizować libssh2 do wersji zawierającej commit 42e33d81577ed4b95d4b4f6f845e5ee8efe5eeb4 (dostępny w repozytorium GitHub libssh2). Do czasu aktualizacji zaleca się ograniczenie łączenia się klientów opartych na libssh2 wyłącznie do zaufanych serwerów SSH.
Libssh2 we wszystkich wersjach do 1.11.1 włącznie; podatność naprawiona w commicie 42e33d8
Podatność dotyczy wyłącznie ścieżki Encrypt-then-MAC (ETM) podczas negocjacji szyfru. Szczególnie narażone są systemy 32-bitowe z glibc, gdzie mechanizm tcache bin confusion umożliwia zapis atakujących bajtów do metadanych sterty.
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XLibssh2
APPLibssh2≤ 1.11.1
Powiązane podatności
Zapis poza granicami bufora w libssh2 — RCE przez SSH
Out-of-bounds read w libssh2 — DoS i wyciek pamięci klienta
Libssh2: integer underflow przed uwierzytelnieniem prowadzący do crash klienta
Double-free w libssh2 sftp_open() umożliwia uszkodzenie sterty klienta
Libssh2: heap out-of-bounds read i free niezainicjowanego wskaźnika w podsystemie publickey