Biblioteka libssh2 w wersjach do 1.11.1 włącznie zawiera podatność typu double-free w funkcji sftp_open(), która pozwala złośliwemu serwerowi SSH na uszkodzenie sterty (heap) uwierzytelnionego klienta. Podatność może zostać wykorzystana do przejęcia kontroli nad procesem klienta poprzez nadpisanie wskaźników funkcji.
▸ Pokaż oryginał (EN)
libssh2 through 1.11.1, fixed in commit 5e47761, contains a double-free vulnerability in the sftp_open() function in src/sftp.c that allows a malicious SSH server to corrupt the heap of any authenticated client opening an SFTP session. When a server responds to SSH_FXP_OPEN with SSH_FXP_STATUS containing FX_OK, the response data buffer is freed, and if a subsequent sftp_packet_require() call returns a specific error such as LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED, the same pointer is freed a second time, enabling tcache dup conditions on glibc systems that allow overlapping allocations and function pointer overwrites.
Podatność występuje w funkcji sftp_open() w pliku src/sftp.c. Gdy serwer SSH odpowiada na żądanie SSH_FXP_OPEN komunikatem SSH_FXP_STATUS zawierającym kod FX_OK, bufor danych odpowiedzi jest zwalniany. Jeśli następnie wywołanie sftp_packet_require() zwróci określony błąd, taki jak LIBSSH2_ERROR_CHANNEL_PACKET_EXCEEDED, ten sam wskaźnik jest zwalniany po raz drugi. Na systemach z glibc prowadzi to do warunków tcache dup, umożliwiając nakładające się alokacje (overlapping allocations) i nadpisanie wskaźników funkcji.
Atakujący kontrolujący złośliwy serwer SSH może spowodować uszkodzenie sterty procesu klienckiego, co w konsekwencji może doprowadzić do wykonania dowolnego kodu (RCE) w kontekście aplikacji korzystającej z biblioteki libssh2.
Należy zaktualizować libssh2 do wersji zawierającej poprawkę wprowadzoną w commicie 5e4776146552d898b9c0e1b313cd093fa8dc92d0. Szczegóły dostępne w referencjach producenta (GitHub PR #2180). Jako obejście tymczasowe należy unikać nawiązywania sesji SFTP z niezaufanymi serwerami SSH.
libssh2 w wersjach do 1.11.1 włącznie; błąd naprawiony w commicie 5e47761
Poprawka dostępna jako commit 5e4776146552d898b9c0e1b313cd093fa8dc92d0 w repozytorium libssh2 na GitHub. Podatność wymaga, aby atakujący kontrolował serwer SSH, z którym łączy się klient — nie jest możliwe jej wykorzystanie bez interakcji użytkownika (wymaga nawiązania sesji SFTP).
CVSS:4.0/AV:N/AC:L/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: heap out-of-bounds read i free niezainicjowanego wskaźnika w podsystemie publickey
Libssh2: integer underflow przed uwierzytelnieniem prowadzący do crash klienta
Libssh2 — pre-auth heap buffer overflow w negocjacji ETM