Biblioteka libssh2 w wersjach do 1.11.1 włącznie zawiera podatność braku weryfikacji granic bufora w podsystemie publickey, umożliwiającą złośliwemu serwerowi SSH wywołanie odczytu sterty poza zakresem o dowolnej długości oraz zwolnienia niezainicjowanego wskaźnika. Podatność jest groźna, ponieważ pozwala na obejście mechanizmu ASLR oraz na uszkodzenie stanu alokatora sterty po stronie klienta.
▸ Pokaż oryginał (EN)
libssh2 through 1.11.1, fixed in commit a13bb6c, contains a missing bounds check vulnerability that allows a malicious SSH server to trigger an arbitrary-length heap out-of-bounds read and a free of an uninitialized pointer via the publickey subsystem. In libssh2_publickey_list_fetch(), the version 1 response parser reads a server-controlled comment_len value and advances the parse pointer without verifying sufficient bytes remain in the buffer, causing the out-of-bounds read to leak heap pointers from adjacent allocations defeating ASLR, followed by heap allocator state corruption when the error cleanup path frees an uninitialized pointer from a non-zeroed realloc() region.
W funkcji `libssh2_publickey_list_fetch()` parser odpowiedzi w wersji 1 protokołu odczytuje kontrolowaną przez serwer wartość `comment_len`, a następnie przesuwa wskaźnik parsowania bez sprawdzenia, czy w buforze pozostaje wystarczająca liczba bajtów. Powoduje to heap out-of-bounds read, który może ujawnić wskaźniki sterty z sąsiednich alokacji, skutecznie omijając ASLR. W ścieżce obsługi błędu dochodzi następnie do wywołania free() na niezainicjowanym wskaźniku pochodzącym z regionu przydzielonego przez `realloc()` bez wyzerowania pamięci (CWE-125, CWE-908), co prowadzi do uszkodzenia wewnętrznego stanu alokatora sterty.
Atakujący kontrolujący złośliwy serwer SSH może doprowadzić do wycieku zawartości sterty klienta (w tym wskaźników umożliwiających obejście ASLR) oraz do uszkodzenia stanu alokatora sterty, co może skutkować destabilizacją lub przejęciem kontroli nad procesem klienta.
Należy zaktualizować libssh2 do wersji zawierającej commit a13bb6c (https://github.com/libssh2/libssh2/commit/a13bb6c773f0d55ad1628cede57e99803cd898d9) lub zastosować patche dostępne u producenta zgodnie z referencjami. Do czasu aktualizacji należy unikać łączenia się z niezaufanymi serwerami SSH przy użyciu funkcjonalności podsystemu publickey.
Libssh2 w wersjach do 1.11.1 włącznie; problem naprawiony w commicie a13bb6c.
Podatność dotyczy wyłącznie scenariusza, w którym klient libssh2 łączy się ze złośliwym serwerem SSH korzystającym z podsystemu publickey. Poprawka dostępna jest w repozytorium GitHub projektu libssh2 (commit a13bb6c).
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 — pre-auth heap buffer overflow w negocjacji ETM