Vulnerabilitate de tip root în instrumentul de gestionare a pachetelor Snap

Compania Qualys a identificat a treia vulnerabilitate periculoasă din acest an (CVE-2022-3328) în utilitarul snap-confine, livrat cu flag-ul SUID root și apelat de procesul snapd pentru a crea un mediu de execuție pentru aplicațiile distribuite în pachete autonome de tip snap. Vulnerabilitatea permite unui utilizator local fără privilegii să obțină execuția de cod cu drepturi root în configuratia implicită a Ubuntu. Problema a fost rezolvată în versiunea snapd 2.57.6. Actualizările pachetelor au fost lansate pentru toate ramurile suportate ale Ubuntu.

Interesant este că vulnerabilitatea în cauză a fost introdusă în timpul corectării unei vulnerabilități similare din februarie în snap-confine. Cercetătorii au reușit să dezvolte un exploit funcțional care oferă acces root în Ubuntu Server 22.04, unde, pe lângă vulnerabilitatea din snap-confine, sunt implicate două vulnerabilități în procesul multipathd (CVE-2022-41974, CVE-2022-41973), legate de ocolirea verificării autorizațiilor la transmiterea comenzilor privilegiate și manipularea nesigură a link-urilor simbolice.

Vulnerabilitatea din snap-confine este cauzată de o stare de competiție în funcția must_mkdir_and_open_with_perms(), adăugată pentru a proteja împotriva substituției directorului /tmp/snap.$SNAP_NAME cu un link simbolic după verificarea proprietarului, dar înainte de apelul la sistemul de apel mount pentru a efectua montarea bind a directoarelor pentru pachetul în format snap. Protecția adăugată consta în redenumirea directorului /tmp/snap.$SNAP_NAME într-un alt director din /tmp cu un nume aleator, dacă acesta există și nu aparține utilizatorului root.

În exploatarea operației de redenumire a directorului /tmp/snap.$SNAP_NAME, cercetătorii au profitat de faptul că snap-confine creează, de asemenea, un director /tmp/snap.rootfs_XXXXXX pentru rădăcina conținutului pachetului snap. Partea „XXXXXX” din nume este aleasă aleatoriu cu ajutorul mkdtemp(), dar pachetul cu numele „rootfs_XXXXXX” poate trece verificarea în funcția sc_instance_name_validate (adică ideea este ca numele $SNAP_NAME să devină „rootfs_XXXXXX” și, astfel, operația de redenumire va duce la suprascrierea directorului /tmp/snap.rootfs_XXXXXX cu rădăcina snap).

Pentru a permite utilizarea simultană a /tmp/snap.rootfs_XXXXXX și redenumirea /tmp/snap.$SNAP_NAME, au fost lansate două instanțe de snap-confine. Când prima instanță crea /tmp/snap.rootfs_XXXXXX, procesul se bloca și se lansa cea de-a doua instanță cu numele de pachet rootfs_XXXXXX, ceea ce ducea la faptul că directorul temporar /tmp/snap.$SNAP_NAME al celei de-a doua instanțe devenea directorul rădăcină /tmp/snap.rootfs_XXXXXX al primei. Imediat după finalizarea redenumirii, a doua instanță se închidea brusc, iar /tmp/snap.rootfs_XXXXXX era substituit prin manipularea unei condiții de cursă, similar exploatării vulnerabilității din februarie. După această substituire, prima instanță își relua execuția, iar atacatorii dobțineau control total asupra directorului rădăcină snap.

În ultima etapă, se crea un link simbolic /tmp/snap.rootfs_XXXXXX/tmp, care era utilizat de funcția sc_bootstrap_mount_namespace() pentru a monta bind un director real, scriitor /tmp în orice director FS, deoarece apelul mount() urmează link-urile simbolice înainte de montare. O asemenea montare este blocată de restricțiile AppArmor, dar pentru a o ocoli, în exploit au fost folosite două vulnerabilități auxiliare în multipathd.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster