V API Filesystem Context, poskytovanom jadrom Linux, bola zistená zraniteľnosť (CVE-2022-0185), ktorá umožňuje lokálnemu používateľovi získať práva root v systéme. Výskumník, ktorý problém objavil, zverejnil demonštráciu fungovania exploit, ktorý umožňuje vykonanie kódu s právami root v Ubuntu 20.04 v konfiguračnom nastavení predvolene. Kód exploit sa plánuje zverejniť na GitHub počas nasledujúceho týždňa, keď distribúcie vydajú aktualizácie s opravou zraniteľnosti.
Zraniteľnosť sa vyskytuje vo funkcii legacy_parse_param() v VFS a je spôsobená absenciou náležitého overenia maximálnej veľkosti parametrov poskytovaných v súborových systémoch, ktoré nepodporujú API Filesystem Context. Pri prenosu príliš veľkého parametra môže dôjsť k pretečeniu celočíselnej premennej, ktorá sa používa na výpočet veľkosti zapisovaných údajov – v kóde je overenie preťaženia vyhradené pomocou „if (len > PAGE_SIZE - 2 - size)“, ktoré však neplatí, ak je hodnota size väčšia ako 4094, v dôsledku celočíselného pretečenia cez dolnú hranicu (pri prevode 4096 - 2 - 4095 na unsigned int sa získa 2147483648).
Uvedená chyba umožňuje pri prístupe k špeciálne upravenému obrazu FS spôsobiť pretečenie zásobníka a prepísať údaje jadra, ktoré nasledujú za vyhradenou oblasťou pamäte. Na zneužitie zraniteľnosti sú potrebné práva CAP_SYS_ADMIN, teda oprávnenia správcu. Problém je v tom, že takéto oprávnenia môže neprivilegovaný používateľ získať v izolovanom kontajneri, ak je v systéme zapnutá podpora priestorov identifikátorov používateľov (user namespaces). Napríklad, user namespaces sú predvolene povolené v Ubuntu a Fedore, ale nie sú aktivované v Debiane a RHEL (ak sa nepoužívajú platformy kontajnerovej izolácie).
Problém sa prejavuje od verzie jadra Linux 5.1 a bol odstránený v včerajších aktualizáciách 5.16.2, 5.15.16, 5.10.93, 5.4.173. Aktualizácie balíkov s opravou zraniteľnosti už boli vydané pre RHEL, Debian, Fedora, Ubuntu. Opravy zatiaľ nie sú dostupné v Arch Linux, Gentoo, SUSE a openSUSE. Ako obchádzajúce riešenie pre systémy, ktoré nepoužívajú kontajnerovú izoláciu, môžete nastaviť hodnotu sysctl „user.max_user_namespaces“ na 0: echo „user.max_user_namespaces=0“ > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf
Zdroj: opennet.ru
