Dezvoltatorii OpenSSH au publicat o actualizare de urgență OpenSSH 10.6p2, care adaugă protecție împotriva unei vulnerabilități critice (CVE nu a fost alocat), denumită „SSHole”, care permite ocolirea autentificării. În sistemele cu biblioteca Musl, vulnerabilitatea permite conectarea la un utilizator pentru care nu este setat un 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 utilizează PAM (Pluggable Authentication Modules), cum ar fi OpenWRT, Alpine, Buildroot și Yocto. O importanță deosebită o prezintă faptul că, adesea, conectarea prin parolă este blocată pentru utilizatorul root, permițând oricui să se conecteze de la distanță cu drepturi de administrator.
Eroarea care duce la vulnerabilitate nu se află în codul OpenSSH, dar este exploatată prin sshd. Din cauza gravității 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ări, ci să dezactiveze imediat autentificarea prin parolă folosind parametru „PasswordAuthentication no” în /etc/ssh/sshd_config sau să dezactiveze complet SSH.
Problema nu se manifestă în sistemele diferite de Linux și în mediile Linux bazate pe glibc, precum și în sistemele care utilizează PAM pentru autentificarea prin parolă. Corectarea este deja disponibilă în Alpine și OpenWRT.
Vulnerabilitatea este legată de interacțiunea incorectă între OpenSSH și funcția crypt() din musl. Pentru a proteja împotriva determinării existenței utilizatorilor prin analiza diferențelor în timpul procesării cererilor, OpenSSH folosește din 2016 o procedură standard de verificare a parolei: apelează funcția „crypt(parola trimisă, sare)” cu sarea unui alt utilizator care are un hash de parolă valid, apoi 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 trimise depășește 256 de octeți (limita a fost introdusă în 2012 pentru a preveni atacurile DoS, deoarece transmiterea valorilor mari generează o sarcină mare pe CPU). Același simbol este folosit î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 are posibilitatea de a se conecta la un server SSH poate accesa orice cont ale cărui parole sunt indicate cu simbolul „*” în „/etc/shadow”, 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 oficiale Alpine pentru sistemele cloud AWS și Azure, în care utilizatorul root are în locul hash-ului de parolă simbolul „*”.
Este remarcabil că inițial în imaginile oficiale Docker care foloseau Alpine, încă din 2015, era setată o parolă goală pentru root, iar după ce acest fapt a fost constatat, în locul hash-ului de parolă a fost setat simbolul „!”. Dar, prezența sa bloca accesul prin cheile SSH, astfel că din 2022 simbolul pentru blocarea accesului pe bază de parolă a fost înlocuit cu „*”.
Sursa: opennet.ro
