Tvrtka Qualys otkrila je kritičnu ranjivost (CVE-2024-6387) u OpenSSH-u koja omogućuje udaljeno izvršavanje koda s root pravima bez autentifikacije. Ranjivost, koja nosi kodno ime regreSSHion, očituje se u zadanoj konfiguraciji počevši od verzije OpenSSH 8.5 na sustavima sa standardnom bibliotekom Glibc.
Mogućnost izvršenja napada demonstrirana je na 32-bitnom sustavu s Glibc-om s uključenom zaštitom ASLR (nasumična raspodjela adresa). Za uspješan napad u laboratorijskim uvjetima bilo je potrebno 6-8 sati, tijekom kojih su se serverom neprekidno uspostavljale veze s maksimalnom dozvoljenom intenzitetom u konfiguraciji sshd. Izvođenje napada olakšano je i zahtijeva manje vremena na sustavima bez ASLR-a ili u distribucijama koje koriste modificirani OpenSSH, u kojem je isključena ponovna nasumična raspodjela ASLR-a za svaku vezu. Radni prototip eksploita nije odlučeno javno objaviti do potpunog uklanjanja ranjivosti, no dostupno je dovoljno detaljno opisivanje suštine ranjivosti, što čini pojavu alternativnih eksploita pitanjem vremena.
Ne isključuje se mogućnost izvršenja napada i na 64-bitne sustave, ali radni exploit za takve sustave još nije spreman. Pretpostavlja se da će izvođenje napada na 64-bitne sustave trajati znatno duže, no ne dulje od tjedan dana. OpenSSH u OpenBSD-u nije podložan ovom problemu, budući da se u ovom sustavu od 2001. godine primjenjuje mehanizam zaštite koji blokira ovakve vrste napada. U drugim sustavima koji se temelje na standardnim bibliotekama različitim od Glibc-a, teoretski je moguća prilagodba metode za izvršenje napada (u Qualys-u ovaj problem trenutno nije istražen).
Ranjivost je ispravljena u danas objavljenom izdanju OpenSSH 9.8 (zakrpa). Praćenje objavljivanja ažuriranja paketa u distribucijama moguće je na stranicama: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch i FreeBSD. Kao zaobilazan način blokiranja ranjivosti, u sshd_config-u može se postaviti parametar „LoginGraceTime=0“, pri čemu isključivanje vremenskog ograničenja olakšava pokretanje napada uskraćivanja usluge prilikom uspostavljanja velikog broja veza koje premašuju granice postavljene putem parametra MaxStartups.
Jedan od znakova pokušaja napada je pojava velikog broja zapisa "Timeout before authentication" u logu.
Ranljivost je nastala kao rezultat regresivne promjene koja je uključena u izdanju OpenSSH 8.5 i dovodi do stanja utrke u kodu za obradu signala u sshd-u. Regresija je dovela do prestanka djelovanja zaštite od stare ranljivosti CVE-2006-5051, koja se manifestirala do verzije OpenSSH 4.4 (2006. godina) i imala teoretski karakter.
U razvoju OpenSSH 8.5 greškom je iz funkcije sigdie(), koja se izravno poziva iz rukovaatelja SIGALRM, uklonjen blok "#ifdef DO_LOG_SAFE_IN_SIGHAND".
Rukovaatelj SIGALRM se u sshd-u poziva asinkrono, ako klijent nije izvršio autentikaciju unutar vremena ograničenog timeoutom za prijavu (LoginGraceTime, prema zadanim postavkama 120 sekundi). Napad se temelji na tome da rukovaatelj signala poziva funkcije koje nisu sigurne pri asinkronoj obradi signala, kao što je syslog(). Funkcija syslog() u Glibc nije predviđena za korištenje u asinkrono izvršavanim rukovaateljima signala, jer poziva funkcije malloc() i free(). Aktivacija signala SIGALRM, koji prekida izvršavanje određenog koda u sshd-u, može dovesti do narušavanja stanja izvršavanja, a zadatak eksploita svodi se na stvaranje uvjeta za preklapanje potrebnog koda u pravi trenutak njegovog izvršavanja. Ranljivost ne utječe na OpenBSD, jer se u njemu umjesto syslog() iz rukovaatelja signala SIGALRM poziva funkcija syslog_r(), koja je posebno stvorena za asinkrono pokretanje.
Izvor: opennet.ru
