Ei au găsit o vulnerabilitate în cgroups v1 care permite ieșirea dintr-un container izolat

Acum cateva zile s-a dat vestea detaliile au fost dezvăluite o vulnerabilitate care a fost găsit în implementarea mecanismului limitarea resurselor cgroup v1 în nucleul Linux care este deja catalogat sub CVE-2022-0492.

Această vulnerabilitate a găsit se poate fi folosit pentru a ieși din containere izolate și este detaliat că problema a fost prezentă de la kernel-ul Linux 2.6.24.

În postarea de pe blog se menționează că vulnerabilitatea se datorează unei erori logice în handlerul de fișiere release_agent, astfel încât verificările corespunzătoare nu au fost efectuate atunci când driverul a fost rulat cu permisiuni complete.

Dosarul release_agent este folosit pentru a defini programul pe care îl execută nucleul când un proces se termină într-un cgroup. Acest program rulează ca root cu toată „capacitatea” din spațiul de nume rădăcină. Doar administratorul trebuia să aibă acces la configurația release_agent, dar, în realitate, verificările s-au limitat la acordarea accesului utilizatorului root, ceea ce nu împiedica modificarea configurației din container sau de către utilizatorul root non-administrativ (CAP_SYS_ADMIN ) .

anterior, această caracteristică nu ar fi fost percepută ca o vulnerabilitate, dar situația s-a schimbat odată cu apariția spațiilor de nume de identificare a utilizatorului (spații de nume de utilizator), care vă permit să creați utilizatori root separati în containere care nu se suprapun cu utilizatorul root al mediului principal.

Prin urmare, pentru un atac, este suficient într-un container care are propriul utilizator root într-un spațiu separat de identificare a utilizatorului pentru a conecta handlerul release_agent, care, odată ce procesul se încheie, va rula cu toate privilegiile mediului părinte.

În mod implicit, cgroupfs este montat într-un container numai pentru citire, dar nu există nicio problemă la remontarea acestui pseudofs în modul de scriere cu drepturi CAP_SYS_ADMIN sau prin crearea unui container imbricat cu un spațiu de nume utilizator separat folosind apelul de sistem pentru oprirea partajării, în care drepturile CAP_SYS_ADMIN sunt disponibile pentru containerul creat.

Atacul se poate face având privilegii de root într-un container izolat sau rulând containerul fără marcajul no_new_privs, care interzice obținerea de privilegii suplimentare.

Sistemul trebuie să aibă suport pentru spațiile de nume activat utilizator (activat implicit pe Ubuntu și Fedora, dar nu este activat pe Debian și RHEL) și au acces la cgroup-ul rădăcină v1 (de exemplu, Docker rulează containere în cgroup-ul rădăcină RDMA). Atacul este posibil și cu privilegii CAP_SYS_ADMIN, caz în care nu este necesar suportul pentru spațiile de nume de utilizator și accesul la ierarhia rădăcină a cgroup v1.

Pe lângă ieșirea din containerul izolat, vulnerabilitatea permite și procese pornite de utilizatorul root fără „capacitate” sau orice utilizator cu drepturi CAP_DAC_OVERRIDE (atacul necesită acces la fișierul /sys/fs/cgroup/*/release_agent deținut de root) pentru a obține acces la toate „capacitățile” sistemului.

În afară de containere, vulnerabilitatea poate permite, de asemenea, proceselor gazdă rădăcină fără capabilități sau proceselor gazdă non-rădăcină cu capacitatea CAP_DAC_OVERRIDE, să escaladeze privilegiile la capacități complete. Acest lucru poate permite atacatorilor să ocolească o măsură de întărire utilizată de anumite servicii, care elimină capabilitățile în încercarea de a limita impactul în cazul în care apare un compromis.

Unitatea 42 recomandă utilizatorilor să facă upgrade la o versiune de nucleu fixă. Pentru acei containere care rulează, activați Seccomp și asigurați-vă că AppArmor sau SELinux sunt activate. Utilizatorii Prisma Cloud pot consulta secțiunea „Protecție Prisma Cloud” pentru a vedea atenuările oferite de Prisma Cloud.

Rețineți că vulnerabilitatea nu poate fi exploatată când se utilizează mecanisme de protecție Seccomp, AppArmor sau SELinux pentru izolarea suplimentară a containerului, deoarece Seccomp blochează apelul de sistem unshare(), iar AppArmor și SELinux nu permit montarea cgroupf-urilor în modul de scriere.

În cele din urmă, este de menționat că a fost remediat în versiunile de kernel 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 și 4.9.301. Puteți urmări lansarea actualizărilor pachetelor în distribuții pe aceste pagini: DebianSUSEUbuntuRHELFedoraGentooArch Linux.

În cele din urmă dacă sunteți interesat să aflați mai multe despre asta, puteți verifica detaliile în următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.