Dezvoltatorii OpenSSH au publicat o actualizare de urgență pentru OpenSSH 10.6p2, care include protecție împotriva unei vulnerabilități critice (CVE încă neatribuit), denumită „SSHole”, care permite ocolirea autentificării. În sistemele cu biblioteca Musl, vulnerabilitatea permite conectarea la un utilizator care nu are parolă, introducând orice parolă care conține mai mult de 256 de caractere. Problema afectează distribuțiile Linux care folosesc biblioteca standard musl, dar nu utilizând PAM (Pluggable Authentication Modules), precum OpenWRT, Alpine, Buildroot și Yocto. O amenințare deosebită este faptul că, adesea, conectarea cu parolă este blocată pentru utilizatorul root, oferind posibilitatea oricui să se conecteze de la distanță cu drepturi de administrator.
Eroarea care duce la vulnerabilitate nu este în codul OpenSSH, dar este exploatată prin sshd. Având în vedere gravitatea problemei, în versiunea OpenSSH 10.6p2 a fost propusă o soluție de ocolire a vulnerabilității. Proprietarilor sistemelor afectate li se recomandă să nu aștepte actualizările, ci să dezactiveze imediat autentificarea prin parolă folosind parametrul „PasswordAuthentication no” în /etc/ssh/sshd_config sau să dezactiveze complet SSH.
Problema nu se manifestă în sisteme diferite de Linux și în medii Linux bazate pe glibc, precum și în sistemele care utilizează PAM pentru autentificarea prin parolă. O corectare este deja disponibilă în Alpine și OpenWRT.
Vulnerabilitatea este legată de interacțiunea necorespunzătoare între OpenSSH și funcția crypt() din musl. Pentru a preveni determinarea existenței utilizatorilor prin analiza diferențelor în timpul procesării cererilor, din 2016, OpenSSH folosește o procedură standard de verificare a parolei atunci când verifică conturile fără parolă: apelează funcția „crypt(parola transmisă, sare)” cu sarea unui alt utilizator, care are un hash de parolă valid, după care compară hash-ul returnat de funcția crypt cu valoarea din câmpul cu hash-ul parolei.
Cu toate acestea, în musl, funcția crypt() pentru hash-urile SHA-512 returnează caracterul „*” dacă lungimea parolei transmise depășește 256 de octeți (limită introdusă în 2012 pentru a proteja împotriva atacurilor DoS, deoarece la transmiterea valorilor mari apare o mare încărcare pe CPU). Același caracter este utilizat în câmpul cu hash-ul parolei din „/etc/shadow” pentru a indica conturile pentru care autentificarea prin parolă este blocată.
Ca urmare a atacului, un atacator care poate să se conecteze la serverul SSH, poate accesa orice cont pentru care în "/etc/shadow" în câmpul parolei este specificat simbolul "*", transmițând un șir de la 257 la 1024 de octeți. Problema afectează numeroase imagini Docker existente, construite folosind Alpine Linux, precum și imaginile standard Alpine pentru sistemele cloud AWS și Azure, în care utilizatorului root i-a fost alocat un simbol "*" în loc de hash-ul parolei.
Este remarcabil că inițial în imaginile oficiale Docker care utilizează Alpine, din 2015 a fost alocată o parolă goală pentru root, iar după descoperirea acestui fapt, în loc de hash-ul parolei a fost utilizat simbolul "!". Însă existenta acestuia bloca accesul prin cheile SSH, așa că din 2022 simbolul de blocare a accesului prin parolă a fost înlocuit cu "*".
Sursa: opennet.ro
