Un bug vechi de 37 de ani oferă acces root local pe OpenBSD 7.9
OpenBSD are reputația unuia dintre cele mai bine securizate sisteme de operare, așa că un exploit funcțional de escaladare locală până la root atrage atenția. Firma de securitate Calif a publicat o analiză completă și un proof-of-concept care transformă un cont local obișnuit în root pe OpenBSD 7.9. Lanțul ocolește relinkarea kernelului (KARL) și protecțiile SMAP și SMEP ale procesorului. Ambele bug-uri sunt deja corectate, iar patch-urile se pot instala cu syspatch.
Ce s-a întâmplat
Lanțul folosește două vulnerabilități:
- Un integer overflow în
shmat(4)care datează din 1988. Contorul care ține evidența proceselor atașate la un segment de memorie partajată (shm_nattch) este unshortcu semn pe 16 biți, deci valoarea lui maximă este 32.767. OpenBSD a moștenit acest tip din sursele BSD originale și nu l-a lărgit niciodată. Dacă un proces atașează suficiente segmente și creează suficiente procese copil (127 de segmente și 259 de procese în PoC), contorul ajunge la valori negative. O condiție de cursă transformă apoi situația într-un use-after-free: kernelul eliberează memorie pe care alte procese încă o folosesc. - O scriere out-of-bounds separată care corupe contoarele de membership multicast. Când socket-ul afectat se închide, decrementările rezultate modifică intrări din tabela de pagini. Astfel, o mapare de memorie user devine accesibilă din modul supervisor, iar exploit-ul ocolește SMAP și SMEP. Apoi suprascrie un pointer de funcție aflat la o adresă previzibilă din kernel și preia controlul.
Punctul cheie ține de predictibilitate. KARL relinkează binarul kernelului la fiecare boot, dar alocatoarele de memorie ale kernelului rămân deterministe. Structurile din boot-ul timpuriu, inclusiv pointerii de funcție din handler-ele interfețelor lo0 și enc0, ajung la aceleași adrese pe același hardware după fiecare repornire. Prin urmare, exploit-ul nu are nevoie de un bug separat de tip information leak.
Starea patch-urilor
- Integer overflow-ul din
shmat(4)a fost corectat în errata 018 (14 septembrie), publicată ca remediere de fiabilitate, nu de securitate. - Use-after-free-ul care completează lanțul a fost corectat în errata 026 (30 septembrie), ca remediere de securitate.
- Ambele remedieri acoperă toate arhitecturile și sunt disponibile prin
syspatch. Și OpenBSD 7.8 a primit remedierea pentru integer overflow. - La momentul redactării nu fusese alocat niciun CVE pentru vreuna dintre vulnerabilități și nu există dovezi de exploatare activă.
De ce contează
Este o escaladare locală de privilegii, deci atacatorul trebuie mai întâi să poată rula cod pe sistem. Riscul rămâne real pe servere partajate, jump box-uri, firewall-uri cu utilizatori shell și orice sistem unde un serviciu compromis poate duce la preluarea completă a mașinii. Două detalii merită atenție:
- O erată de „fiabilitate” s-a dovedit parte dintr-un lanț până la root. Echipele care aplică doar patch-urile etichetate ca fiind de securitate ar fi sărit peste errata 018.
- Codul de exploatare este public. Cu un PoC funcțional pe GitHub, timpul până când alții îl adaptează s-a cam scurs.
Calif propune și patru direcții de întărire a kernelului: safe-unlinking pentru listele înlănțuite (deja folosit de FreeBSD și NetBSD), randomizarea mapării auto-referențiale a tabelei de pagini, randomizarea alocatoarelor kernelului și verificarea limitelor la nivel de compilator.
Ce trebuie făcut
- Rulați
syspatchacum pe toate sistemele OpenBSD 7.9 și confirmați că sunt aplicate errata 018 și 026. Pe 7.8, verificați și remedierea pentru integer overflow. - Aplicați și eratele de fiabilitate. Tratați orice erată ca potențial relevantă pentru securitate, nu doar pe cele marcate ca remedieri de securitate.
- Reduceți suprafața de atac locală. Verificați cine are acces shell pe firewall-uri, routere și bastion host-uri și eliminați conturile și serviciile de care nu este nevoie.
- Faceți inventarul sistemelor BSD. Sistemele OpenBSD stau adesea la marginea rețelei și primesc patch-uri mai rar decât restul infrastructurii. Asigurați-vă că fiecare este urmărit.
Identificarea sistemelor dintr-o infrastructură mixtă care rulează încă versiuni fără patch este exact ce face serviciul nostru de scanare de vulnerabilități. Acesta semnalează nivelurile de patch neactualizate pentru sistemul de operare și kernel, astfel încât un bug ca acesta să fie corectat înainte să apară într-un raport de incident.
Sursă: The Hacker News, „Researchers Demonstrate OpenBSD Root Exploit Chaining 37-Year-Old Shared-Memory Bug” (16 oct. 2026). Cercetarea originală aparține Calif.
