Scenariul de coșmar perfect pentru un server Linux este atunci când tot ce trebuie să facă un atacator este să ajungă la portul Secure Shell (SSH) al serverului, să intre ca la el acasă și să îl preia. Asta s-a întâmplat cu Alpine Linux, popularul server Linux ușor. Ca o ironie a sorții, acest lucru s-a întâmplat la doar câteva zile după ce Alpine Linux a scăpat ca prin urechile acului de o gaură de securitate de dimensiunea unei gropi în implementarea sa GitLab.
După cum a explicat inginerul de securitate Gregory Bryant în postarea sa pe LinkedIn: „Majoritatea ocolirilor autentificării provin din lanțuri logice complexe, dar vulnerabilitatea OpenSSH de ieri din Alpine Linux (CVE-2026-123158) se reduce la un singur caracter: *.”
Dacă rulați Alpine Linux (sau o altă distribuție bazată pe musl) cu pachetul implicit openssh-server (fără Pluggable Authentication Modules, sau PAM) și cu PasswordAuthentication activat, un atacator se poate conecta la conturi cu parola dezactivată sau doar cu cheie, trimițând pur și simplu o parolă cu lungimea între 257 și 1024 de biți.
Alpine Linux nu este singurul sistem de operare care folosește musl, o versiune ușoară a bibliotecii standard C (libc). Alte sisteme de operare care folosesc musl și sunt potențial vulnerabile includ Adélie Linux; Void Linux; Sabotage Linux; OpenWrt, o variantă Android; și Yocto Project, care este folosit pentru a construi distribuții Linux încorporate.
Wind River, care produce distribuția comercială Linux încorporat Wind River Linux, investighează de asemenea problema. Un reprezentant al companiei mi-a declarat: „Wind River ia securitatea în serios. Analizăm activ vulnerabilitatea raportată și evaluăm impactul potențial. Vom lua măsurile adecvate după cum este necesar.”
În culise, când OpenSSH este compilat fără PAM, acesta verifică parolele prin hashing-ul încercării de parolă folosind funcția crypt() a bibliotecii C. Apoi compară rezultatul cu câmpul de parolă stocat al contului. Până aici, totul bine.
Dar când o cheie este mai lungă de 256 de biți, funcția crypt() a musl returnează șirul * ca indicator de eroare. Acesta este și ceea ce conține câmpul de parolă pentru orice cont fără parolă, cum ar fi un cont doar cu cheie. Astfel, „hash-ul” se potrivește și autentificarea reușește, iar atacatorul intră.
Pentru a exploata vulnerabilitatea, un atacator are nevoie doar de numele unui astfel de cont. De asemenea, are nevoie de cel puțin un alt cont pe mașină cu un hash de parolă de 5 sau 6, și apoi să trimită o parolă de la 257 la 1.024 de biți. Potrivit Alpine, un singur utilizator cu parolă este suficient pentru a face toate conturile fără parolă accesibile.
În sistemele Linux care folosesc crypt() din glibc, adică aproape toate, aceeași încercare ar returna NULL la eroare, ceea ce sshd respinge deja, așa că Debian, Ubuntu, Fedora etc. nu sunt afectate.
Potrivit *sshole, grupul care a descoperit problema, acesta este un efect secundar care se ascunde din 2016.
Alpine a declarat că fiecare versiune verificată este afectată: 3.21 până la 3.24, edge și ramurile mai vechi 3.16 până la 3.20. Expunerea necesită următoarele:
Root nu este expus direct în majoritatea cazurilor. A fost livrat ca root:* în imaginea de bază începând cu Alpine 3.16, dar PermitRootLogin prohibit-password implicit al OpenSSH îl blochează. Un alt cont care poate deveni root, de exemplu prin doas, oferă totuși atacatorului o rută către root.
Alpine a evidențiat în special imaginile sale oficiale tiny-cloud, versiunile 3.18.11 până la 3.24.3, ca fiind deosebit de vulnerabile. Acestea vin cu un utilizator alpine cu câmpul de parolă * și doas fără parolă. Sunt sigure la prima pornire, dar devin exploatabile odată ce există orice hash de 6 pe mașină. Acest lucru se poate întâmpla când un administrator setează o parolă de consolă sau când datele utilizatorului adaugă un utilizator cu o parolă hash-uită, ceea ce înseamnă, în esență, toate.
Alpine a lansat 3.21.10, 3.22.8, 3.23.8 și 3.24.4 joi, cu corectarea OpenSSH printre modificările de securitate. De asemenea, a publicat pachete corectate pentru fiecare versiune până la 3.16. Alpine 3.21 a ajuns la sfârșitul suportului pe 1 noiembrie.
OpenSSH 10.6p2, tocmai lansat, evită problema în sshd. Ramurile stabile ale Alpine au un patch pentru aceeași problemă. Ar trebui să rulați apk upgrade -U -a și apoi să reporniți th