Copiere eșuată: Vulnerabilitatea Linux care acordă acces root prin caching-ul paginilor

Puncte cheie:
  • Atacatorul deschide un socket AF_ALG și solicită algoritmul de autentificare.
  • Atacatorul folosește splice() pentru a alimenta socket-ul cu pagini din memoria cache a fișierului țintă (de exemplu, /usr/bin/su). Aceste pagini devin apoi parte a listei hash de ieșire (cu posibilitate de scriere).
  • Atacatorul trimite un mesaj (sendmsg) cu date autentificate asociate (AAD) concepute cu rea intenție, unde octeții 4-7 conțin datele pe care dorește să le scrie (de exemplu, cod rău intenționat).
  • Când este declanșată decriptarea, authencesn preia cei 4 octeți din AAD și îi scrie temporar la sfârșitul bufferului. Datorită optimizării in-place, acest capăt al bufferului indică direct pagina cache a fișierului.
  • Operația criptografică eșuează (textul cifrat este invalid), dar scrierea pe 4 octeți a avut deja loc și nu este niciodată inversată.
  • Atacatorul repetă procesul pentru a-și injecta codul. Când este executat /usr/bin/su, kernelul încarcă versiunea modificată din memorie, executând codul injectat cu privilegii de root.

copiere eșuată

Securitatea Linux se confruntă cu o altă provocare în urma descoperirii... vulnerabilitatea CVE-2026-31431, denumită „Eșec de copiere” de către cercetătorii de la Xint Code. Departe de a fi o eroare teoretică, această problemă de design Permite unui utilizator local fără privilegii să își ridice permisiunile și să obțină acces complet. ca superutilizator într-un mod previzibil și silențios.

Cercetătorii menționează că această vulnerabilitate a fost exploatată cu succes în distribuții de top precum Ubuntu, Amazon Linux, RHEL și SUSE, confirmând că orice sistem care rulează un kernel mai recent decât versiunea 4.14 și menține Activarea suportului pentru socket-urile AF_ALG este potențial vulnerabilă. la acest atac.

Operațiuni locale și supraîncărcarea memoriei cache a paginii

În ceea ce privește hotărârea, se menționează că aceasta Datează de o optimizare introdusă în 2017 în cadrul API-ului criptografic al kernelului (AF_ALG). Această modificare Căutam să elimin tamponarea inutilă. executarea operațiunilor de criptare autentificată (AEAD) direct în același spațiu de memorie, cunoscute sub numele de operațiuni „in-place”.

El O problemă critică apare atunci când se combină această optimizare cu funcția splice(). Această metodă transferă date între descriptorii de fișiere prin transferul referințelor directe către memoria cache a paginilor kernelului în loc să copieze fizic datele. La solicitarea decriptării, structura memoriei a fost configurată astfel încât buffer-ul de destinație, care ar trebui să fie un spațiu temporar pentru utilizator, să ajungă să fie legat direct de paginile din memoria cache care conțin datele fișierelor de sistem.

Autentificare și scriere în afara limitelor memoriei

El Ultimul factor declanșator al vulnerabilității constă în comportamentul anormal al algoritmului authencesn. Spre deosebire de alte rutine criptografice care respectă cu strictețe limitele bufferelor de destinație, Acest algoritm specific folosește spațiul de memorie al utilizatorului ca zonă de lucru temporară. (bloc de notițe) pentru a rearanja secvențele de octeți în timpul calculării etichetei de autentificare.

În acest proces, algoritmul scrie cu patru octeți peste limita stabilită pentru regiunea de ieșire. Datorită optimizării in-place și lanțului de referințe creat de splice(),Această scriere aparent inofensivă depășește granița memoriei utilizatorului. și ajunge direct pe pagina cache a kernelului asociată cu fișierul procesat.

Acest lanț de eșecuri logice Acesta oferă atacatorului posibilitatea de a suprascrie arbitrar patru octeți în anumite poziții din cache. de pagini pentru orice fișier pe care îl poate citi. Prin trimiterea unei serii de solicitări calculate, un atacator poate injecta cod rău intenționat în versiunea în memorie a fișierelor executabile critice cu bitul suid setat, cum ar fi instrumentul de comutare a utilizatorilor.

Întrucât toate operațiunile de citire interoghează mai întâi memoria cache a paginii, data viitoare când utilitarul legitim este invocat, Sistemul va executa codul injectat din memorie, acordând instantaneu privilegii de root. fără a modifica vreodată fișierul fizic de pe hard disk. Și mai alarmant este faptul că, deoarece izolarea containerului partajează memoria cache a paginilor gazdei subiacente, această vulnerabilitate servește ca o poartă directă pentru a scăpa de mediile virtualizate precum clusterele Kubernetes și a compromite nodul principal.

Patch-uri de urgență și soluții de atenuare

Având în vedere gravitatea acestei hotărâri, Echipele de întreținere au implementat actualizări de urgență, unde se află soluția definitivă Reveniți la optimizarea in-place din fișierul algif_aead.c, separând strict listele de memorie sursă și destinație pentru a preveni ca paginile memorate în cache să ajungă în căi inscriptibile.

Aceste patch-uri au fost deja integrate în kernelurile 6.18.22, 6.19.12 și 7.0 și sunt portate înapoi către ramurile de suport pe termen lung. Pentru administratorii care nu își pot reporni sau actualiza imediat serverele, se recomandă dezactivarea modulului kernelului algif_aead dacă a fost compilat extern sau restricționarea severă a creării de socket-uri AF_ALG folosind politici de securitate precum SELinux, un scut care, de exemplu, a protejat dispozitivele Android actuale de această amenințare.

În final, dacă sunteți interesați să aflați mai multe, puteți găsi detalii la linkul următor.


Adăugați ca sursă preferată în Google