Qualys a identificat o vulnerabilitate critică (CVE-2024-6387) în OpenSSH care permite executarea de cod de la distanță cu privilegii root fără autentificare. Vulnerabilitatea, cu numele de cod regreSSHion, apare în configurația implicită începând cu OpenSSH 8.5 pe sistemele cu biblioteca standard Glibc.
Atacul a fost demonstrat pe un sistem Glibc pe 32 de biți cu ASLR (randomizarea spațiului de adrese) activat. Un atac reușit în condiții de laborator a necesitat 6-8 ore, timp în care Server Conexiunile au fost stabilite continuu la rata maximă permisă în configurația sshd. Atacul este mai simplu și durează mai puțin pe sistemele fără ASLR sau pe distribuțiile care utilizează un OpenSSH modificat care dezactivează re-randomizarea ASLR pentru fiecare conexiune. Un prototip funcțional de exploit nu a fost lansat public până când vulnerabilitatea nu este corectată pe scară largă, dar este disponibilă o descriere suficient de detaliată a vulnerabilității, ceea ce face ca apariția exploit-urilor de la terți să fie o chestiune de timp.
Posibilitatea unui atac asupra sistemelor pe 64 de biți nu poate fi exclusă, dar o exploatare funcțională pentru astfel de sisteme nu este încă gata. Este de așteptat ca efectuarea unui atac asupra sistemelor pe 64 de biți să dureze mult mai mult, dar nu mai mult de o săptămână. OpenSSH în OpenBSD nu este afectat de problemă, deoarece acest sistem a folosit un mecanism de protecție din 2001 care blochează astfel de clase de atacuri. În alte sisteme bazate pe biblioteci standard, altele decât Glibc, este teoretic posibil să se adapteze metoda pentru a efectua un atac (această problemă nu a fost încă studiată în Qualys).
Vulnerabilitatea a fost remediată în patch-ul OpenSSH 9.8 lansat astăzi. Puteți urmări lansarea actualizărilor pachetelor pentru distribuții pe următoarele pagini: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch și FreeBSD. Ca soluție pentru a bloca vulnerabilitatea, puteți seta parametrul „LoginGraceTime=0” în sshd_config. Dezactivarea timeout-ului va facilita un atac de tip denial of service la stabilirea unui număr mare de conexiuni care depășesc limitele stabilite de parametrul MaxStartups.
Unul dintre semnele tentativelor de atac este apariția unui număr mare de intrări „Timeout înainte de autentificare” în jurnal.
Vulnerabilitatea este rezultatul unei modificări de regresie inclusă în versiunea OpenSSH 8.5 care provoacă o condiție de cursă în codul de gestionare a semnalului din sshd. Regresia a dus la încetarea protecției împotriva vechii vulnerabilități CVE-2006-5051, care a apărut înainte de versiunea OpenSSH 4.4 (2006) și era de natură teoretică.
În timpul dezvoltării OpenSSH 8.5, din greșeală, blocul „#ifdef DO_LOG_SAFE_IN_SIGHAND” a fost eliminat din funcția sigdie(), care este apelată direct din handlerul SIGALRM.
Hander-ul SIGALRM este apelat asincron în sshd dacă clientul nu s-a autentificat în limita de timp a expirării conexiunii (LoginGraceTime, implicit 120 de secunde). Atacul se bazează pe faptul că handlerul de semnal apelează funcții care nu sunt sigure pentru procesarea asincronă a semnalului, cum ar fi syslog(). Funcția syslog() din Glibc nu este concepută pentru a fi utilizată în manipulatorii de semnal executați asincron, deoarece apelează funcțiile malloc() și free(). Declanșarea semnalului SIGALRM, care întrerupe execuția unui anumit cod în sshd, poate duce la o încălcare a stării de execuție, iar sarcina exploit-ului este de a crea condiții pentru întreruperea codului dorit la momentul necesar al execuției acestuia. Vulnerabilitatea nu afectează OpenBSD deoarece în loc de syslog(), handlerul de semnal SIGALRM apelează funcția syslog_r(), care este special concepută pentru execuție asincronă.
Sursa: opennet.ru
