Zraniteľnosť v podsystéme jadra Netfilter systému Linux

Zraniteľnosť (CVE-2021-22555) bola identifikovaná v Netfilter, podsystéme linuxového jadra, ktorý sa používa na filtrovanie a úpravu sieťových paketov, čo umožňuje lokálnemu používateľovi získať oprávnenia root v systéme, a to aj v izolovanom kontajneri. Na testovanie bol pripravený funkčný prototyp exploitu, ktorý obchádza ochranné mechanizmy KASLR, SMAP a SMEP. Výskumník, ktorý túto zraniteľnosť objavil, dostal od spoločnosti Google odmenu 20 XNUMX dolárov za identifikáciu metódy na obídenie izolácie kontajnerov Kubernetes v klastri kCTF.

Problém je už od jadra 2.6.19, vydaného pred 15 rokmi, a je spôsobený chybou v obslužných programoch IPT_SO_SET_REPLACE a IP6T_SO_SET_REPLACE, ktorá spôsobuje pretečenie vyrovnávacej pamäte pri odosielaní špeciálne naformátovaných parametrov prostredníctvom volania setsockopt v režime compat. Za normálnych okolností môže volať compat_setsockopt() iba užívateľ root, ale privilégiá potrebné na vykonanie útoku môže získať aj neprivilegovaný užívateľ na systémoch s povolenou podporou užívateľských menných priestorov.

Používateľ môže vytvoriť kontajner so samostatným používateľom root a odtiaľ zneužiť zraniteľnosť. Napríklad „priestory názvov používateľov“ sú štandardne povolené na Ubuntu a Fedore, ale nie sú povolené na Debiane a RHEL. Oprava opravujúca túto chybu zabezpečenia bola prijatá do jadra Linuxu 13. apríla. Aktualizácie balíkov už vygenerovali projekty Debian, Arch Linux a Fedora. V Ubuntu, RHEL a SUSE sa aktualizácie pripravujú.

Problém nastáva vo funkcii xt_compat_target_from_user() z dôvodu nesprávneho výpočtu veľkosti pamäte pri ukladaní štruktúr jadra po konverzii z 32-bitovej na 64-bitovú reprezentáciu. Chyba umožňuje zapísať štyri nulové bajty na ľubovoľnú pozíciu za pridelenou vyrovnávacou pamäťou ohraničenou offsetom 0x4C. Táto funkcia sa ukázala ako dostatočná na vytvorenie exploitu, ktorý umožňoval získať práva root - vymazaním m_list->next pointer v štruktúre msg_msg sa vytvorili podmienky pre prístup k dátam po uvoľnení pamäte (use-after-free), čo sa potom použil na získanie informácií o adresách a zmenách iných štruktúr prostredníctvom manipulácie so systémovým volaním msgsnd().

Zdroj: opennet.ru

Pridať komentár