Copy Fail si Dirty Frag: cand un user local poate deveni root pe Linux

In ultimele zile au aparut doua subiecte destul de serioase in zona Linux kernel: Copy Fail si Dirty Frag. Ambele sunt relevante pentru ca intra in categoria local privilege escalation, adica situatii in care un utilizator fara drepturi mari pe sistem poate ajunge root.

Asta nu inseamna ca cineva de pe internet poate exploata direct orice server Linux doar pentru ca exista vulnerabilitatea. Este importanta diferenta: vorbim de atac local, nu de remote code execution clasic. Dar daca un atacator are deja acces pe masina, printr-un cont compromis, o aplicatie vulnerabila, un container scapat prost, un webshell sau alt vector, atunci o vulnerabilitate de genul acesta poate transforma rapid acel acces limitat in control complet.

Copy Fail este urmarit ca CVE-2026-31431 si afecteaza zona de crypto / AF_ALG din kernel. Pe scurt, problema permite unui user local sa produca o modificare controlata in page cache, fara sa modifice neaparat fisierul real de pe disk. De aici apare partea urata: comportamentul unor binare importante poate fi schimbat in memorie, iar rezultatul poate fi obtinerea de privilegii root.

Dirty Frag este un caz mai nou si similar ca impact, dar foloseste alte zone din kernel, in special componente legate de ESP/IPsec si RxRPC. Din ce este public acum, discutia este tot in jurul unor primitive de scriere in page cache si a posibilitatii de a obtine root local. Este genul de vulnerabilitate care nu arata spectaculos ca un RCE pe internet, dar este foarte importanta in scenarii reale de post-compromise.

De ce conteaza practic?

Pentru ca multe incidente nu incep direct cu root. Incep cu ceva mai mic: un user compromis, o aplicatie web sparta, un shell limitat, un cont SSH slab protejat, un container cu prea multe permisiuni sau un serviciu expus gresit. Daca dupa acel pas exista si un LPE kernel stabil, atacatorul poate escalada si poate face mult mai mult rau: citire de date sensibile, modificari de sistem, persistenta, oprire de servicii, acces la credentiale sau miscare laterala.

Mai este si discutia legata de kerneluri foarte generale versus kerneluri construite mai strict. Distributiile moderne livreaza de obicei kerneluri cu suport pentru foarte multe componente, protocoale si module, tocmai ca sa functioneze pe cat mai multe sisteme si scenarii. Este comod, normal si practic, dar inseamna si ca poti avea disponibil cod de kernel pentru lucruri pe care nu le folosesti niciodata.

Un kernel custom, compilat cu mai putine optiuni si fara module inutile, poate reduce suprafata de atac. Daca o vulnerabilitate este intr-o zona pe care nu o ai compilata sau incarcabila, este posibil sa nu fii afectat. In acelasi timp, asta nu este o reteta universala: kernelurile custom trebuie intretinute, patch-uite, testate si intelese. Pentru majoritatea sistemelor, kernelul din distributie ramane alegerea practica si corecta.

Ce as verifica rapid pe servere:

  • ce kernel ruleaza sistemul
  • daca exista update-uri de kernel disponibile de la distributie
  • daca sistemele cu useri multi, SSH expus sau workload-uri web sunt prioritizate
  • daca exista containere care ruleaza prea permisiv
  • daca exista module kernel incarcate pentru componente care nu sunt folosite
  • daca exista utilizatori locali care nu mai sunt necesari
  • daca logurile arata folosire suspecta de su, sudo, procese temporare sau executii din /tmp
  • daca reboot-ul dupa kernel update a fost facut, nu doar instalarea pachetului

Comenzi utile pentru orientare:

uname -a
cat /etc/os-release
uptime
last
who
lsmod
ss -tulpn
ps aux –sort=-%cpu | head
find /tmp /var/tmp /dev/shm -type f -mtime -7 -ls 2>/dev/null

Pentru patching, regula ramane simpla: urmareste advisories oficiale ale distributiei tale si aplica update-urile de kernel cat mai repede, mai ales pe sisteme expuse sau pe sisteme unde exista mai multi useri, aplicatii web, containere sau acces SSH.

Mitigarile temporare pot exista, de exemplu dezactivarea unor module kernel nefolosite, dar aici trebuie atentie. Daca dezactivezi componente legate de IPsec, RxRPC sau crypto fara sa intelegi mediul, poti strica VPN-uri, servicii de retea sau alte dependinte. Pentru productie, patch-ul oficial de kernel ramane varianta corecta.

Din punctul meu de vedere, Copy Fail si Dirty Frag sunt un reminder bun ca securitatea Linux nu inseamna doar firewall si update-uri la Apache, Nginx sau PHP. Kernel-ul conteaza, userii locali conteaza, containerele conteaza, modulele conteaza, iar un acces mic pe sistem poate deveni foarte repede un acces complet daca exista o vulnerabilitate de escaladare locala.

Nu as trata genul acesta de vulnerabilitate cu panica, dar nici cu “este doar local, deci nu conteaza”. In multe atacuri reale, “local” este pasul doi.

Ramane totusi intrebarea mai grea: cat de usor este sa reduci real suprafata kernelului intr-un mediu corporate? La scara mica poate compilezi, testezi si controlezi mai strict ce intra in kernel. Dar cand vorbesti de sute sau mii de sisteme, distributii diferite, dependinte vendor, cloud, Kubernetes, imagini standard si platforme unde primesti kernelul ca parte din serviciu, discutia devine mult mai complicata. Poate ca nu poti controla tot, dar macar ar trebui sa stii ce ruleaza, ce este incarcat, ce depinde de ce si cat de repede poti patch-ui cand apare ceva de genul asta.

Surse / citit mai departe:

https://nvd.nist.gov/vuln/detail/CVE-2026-31431
https://isc.sans.edu/diary/Another%2BUniversal%2BLinux%2BLocal%2BPrivilege%2BEscalation%2BLPE%2BVulnerability%2BDirty%2BFrag/32968
https://ubuntu.com/blog/dirty-frag-linux-vulnerability-fixes-available
https://blog.cloudflare.com/copy-fail-linux-vulnerability-mitigation

Lasă un comentariu