Razvijalci OpenSSH so objavili nujno posodobitev OpenSSH 10.6p2, ki vključuje zaščito pred kritično ranljivostjo (CVE še ni dodeljen), znano pod kodnim imenom „SSHole“, ki omogoča obhod avtentikacije. V sistemih z knjižnico Musl ranljivost omogoča povezavo z uporabnikom, za katerega ni nastavljenega gesla, z vnosom katerega koli gesla, ki vsebuje več kot 256 znakov. Težava zadeva distribucije Linux, ki uporabljajo standardno knjižnico musl, a ne uporabljajo PAM (Pluggable Authentication Modules), kot so OpenWRT, Alpine, Buildroot in Yocto. Posebno nevarnost predstavlja to, da je pogosto dostop do gesla blokiran za uporabnika root, kar omogoča vsakomur, da se na daljavo poveže s pravicami skrbnika.
Napaka, ki povzroča ranljivost, ni v kodi OpenSSH, temveč se izkorišča prek sshd. Na podlagi resnosti težave je v različici OpenSSH 10.6p2 predlagana obhodna pot za zajezitev ranljivosti. Lastnikom prizadetih sistemov se priporoča, da ne čakajo na posodobitve, temveč takoj onemogočijo avtentikacijo z geslom preko parametra „PasswordAuthentication no“ v /etc/ssh/sshd_config ali pa popolnoma onemogočijo SSH.
Težava se ne pojavlja v sistemih, ki niso Linux, in v linuxovih okoljih, temelječih na glibc, prav tako pa ne v sistemih, ki uporabljajo PAM pri avtentikaciji z geslom. Popravilo je že na voljo v Alpine in OpenWRT.
Ranljivost je povezana z nepravilen interakcijo OpenSSH in funkcije crypt() iz musl. Za zaščito pred ugotavljanjem obstoja uporabnikov preko analize razlik v času obdelave zahtevkov je OpenSSH od leta 2016 pri preverjanju brezgeselnih uporabniških računov začel uporabljati standardno proceduro preverjanja gesla: pokliče funkcijo „crypt(vneseno geslo, sol)“ s soljo drugega uporabnika, ki ima veljaven hash gesla, nato pa primerja vrnjeni hash funkcije crypt s vrednostjo iz polja s hashom gesla.
Vendar pa v musl funkcija crypt() za hashe SHA-512 vrne znak „*“, če dolžina vnesenega gesla presega 256 bajtov (omejitev je bila uvedena leta 2012 za zaščito pred DoS-napadi, saj prenos velikih vrednosti povzroča veliko obremenitev CPU). Enak znak se uporablja v polju s hashom gesla v „/etc/shadow“ za označevanje računov, za katere je avtentikacija z geslom onemogočena.
Kot rezultat, napadalec, ki se lahko poveže s SSH strežnikom, lahko dostopi do katerega koli računa, pri katerem je v "/etc/shadow" v polju za geslo naveden znak "*", tako da posreduje niz dolžine od 257 do 1024 bajtov. Težava zajema številne obstoječe Docker slike, zgrajene z uporabo Alpine Linux ter privzete Alpine slike za oblačne sisteme AWS in Azure, pri katerih je uporabniku root namesto hasha gesla dodeljen znak "*".
Zanimivo je, da so v uradnih Docker slikah, ki uporabljajo Alpine, od leta 2015 nastavili prazno geslo za root, po odkritju te dejstva pa je namesto hasha gesla bil nastavljen znak "!". Vendar je njegova prisotnost blokirala dostop s SSH ključi, zato so leta 2022 simbol za blokado dostopa z geslom zamenjali z "*".
Izvor: opennet.ru
