Developeri OpenSSH objavili su hitno ažuriranje OpenSSH 10.6p2, koje dodaje zaštitu od kritične ranjivosti (CVE nije dodeljen), poznate pod kodnim imenom „SSHole“, koja omogućava zaobilaženje autentifikacije. U sistemima s Musl bibliotekom ranjivost omogućava povezivanje s korisnikom koji nema postavljenu lozinku, unoseći bilo koju lozinku koja sadrži više od 256 znakova. Problem pogađa Linux distribucije koje koriste standardnu Musl biblioteku, ali ne koriste PAM (Pluggable Authentication Modules), kao što su OpenWRT, Alpine, Buildroot i Yocto. Posebna opasnost leži u tome što je često pristup lozinkom blokiran za korisnika root, što omogućava svakome da se poveže s administratorskim pravima na daljinu.
Greška koja vodi do ranjivosti nije u kodu OpenSSH, ali se eksploatira kroz sshd. Kako bi se ublažila ozbiljnost problema, u verziji OpenSSH 10.6p2 predložen je zaobilazni način blokiranja ranjivosti. Vlasnicima pogođenih sistema preporučeno je da ne čekaju na ažuriranja, već odmah onemoguće autentifikaciju putem lozinke koristeći parametar „PasswordAuthentication no“ u /etc/ssh/sshd_config ili potpuno onemoguće SSH.
Problem se ne javlja u sistemima koji nisu Linux, niti u Linux okruženjima zasnovanim na glibc, kao i u sistemima koji koriste PAM za autentifikaciju lozinkom. Ispravka je već dostupna u Alpine i OpenWRT.
Ranjivost je povezana s neispravnom interakcijom OpenSSH-a i funkcije crypt() iz musl. Kako bi zaštitio od otkrivanja postojanja korisnika analizom vremenskih razlika u obradi zahteva, OpenSSH od 2016. godine prilikom provere naloga bez lozinke koristi standardnu proceduru provere lozinke: poziva funkciju „crypt(uručena lozinka, so)“ sa so druge korisnika koji ima važeći heš lozinke, a zatim upoređuje heš koji vraća funkcija crypt s vrednošću iz polja s hešem lozinke.
Međutim, u musl funkcija crypt() za heševe SHA-512 vraća simbol „*“, ako dužina prodate lozinke prelazi 256 bajtova (ograničenje je uvedeno 2012. godine radi zaštite od DoS napada, jer prilikom slanja velikih vrednosti nastaje velika opterećenost CPU-a). Isti simbol koristi se u polju s hešem lozinke u „/etc/shadow“ za označavanje naloga za koje je pristup lozinkom blokiran.
Kao rezultat, napadač koji je u mogućnosti spojiti se na SSH poslužitelj može se povezati s bilo kojim računom koji u "\/etc\/shadow" ima oznaku "*" u polju lozinke, šaljući niz dužine od 257 do 1024 bajta. Problem obuhvaća brojne postojeće Docker slike izgrađene na osnovi Alpine Linuxa, kao i standardne Alpine slike za cloud sustave AWS i Azure, gdje je oznaka "*" postavljena umjesto hashirane lozinke za korisnika root.
Zanimljivo je da su u službenim Docker slikama koje koriste Alpine od 2015. godine prvotno bile postavljene prazne lozinke za root, a nakon što je ovo otkriveno, oznaka "!" je stavljena umjesto hashirane lozinke. Međutim, njeno prisustvo je blokiralo prijavu putem SSH ključeva, pa je od 2022. godine oznaka za blokiranje prijave lozinkom promijenjena u "*".
Izvor: opennet.ru
