Linux kodola VFS ievainojamība, kas ļauj paplašināt savas privilēģijas

Linux kodola nodrošinātajā Filesystem Context API ir konstatēta ievainojamība (CVE-2022-0185), kas ļauj vietējam lietotājam iegūt sistēmas saknes tiesības. Pētnieks, kurš identificēja problēmu, publicēja ekspluatācijas demonstrāciju, kas ļauj izpildīt kodu kā root Ubuntu 20.04 noklusējuma konfigurācijā. Ekspluatācijas kodu plānots publicēt GitHub nedēļas laikā pēc tam, kad izplatījumi izlaidīs atjauninājumu, kas novērš ievainojamību.

Ievainojamība pastāv VFS funkcijā legacy_parse_param(), un to izraisa nespēja pareizi pārbaudīt maksimālo parametru lielumu, kas tiek nodrošināts failu sistēmās, kas neatbalsta Filesystem Context API. Pārāk liela parametra nodošana var izraisīt rakstāmo datu lieluma aprēķināšanai izmantotā veselā skaitļa mainīgā pārplūdi - kodam ir bufera pārpildes pārbaude "if (len > PAGE_SIZE - 2 - size)", kas nav strādāt, ja izmēra vērtība ir lielāka par 4094. vesela skaitļa pārpildei caur apakšējo robežu (vesela skaitļa zempludināšana, atlejot 4096 - 2 - 4095 uz unsigned int, rezultāts ir 2147483648).

Šī kļūda ļauj, piekļūstot īpaši izstrādātam failu sistēmas attēlam, izraisīt bufera pārpildīšanu un pārrakstīt kodola datus pēc piešķirtās atmiņas apgabala. Lai izmantotu ievainojamību, jums ir jābūt CAP_SYS_ADMIN tiesībām, t.i. administratora pilnvaras. Problēma ir tāda, ka nepievilcīgs lietotājs var iegūt šādas atļaujas izolētā konteinerā, ja sistēmā ir iespējots lietotāju nosaukumvietu atbalsts. Piemēram, lietotāju nosaukumvietas ir iespējotas pēc noklusējuma Ubuntu un Fedora, bet nav iespējotas Debian un RHEL (ja vien netiek izmantotas konteineru izolācijas platformas).

Problēma parādās kopš Linux kodola 5.1, un tā tika novērsta vakardienas atjauninājumos 5.16.2, 5.15.16, 5.10.93, 5.4.173. Pakešu atjauninājumi, kas novērš ievainojamību, jau ir izlaisti RHEL, Debian, Fedora un Ubuntu. Labojums vēl nav pieejams Arch Linux, Gentoo, SUSE un openSUSE. Kā drošības risinājumu sistēmām, kas neizmanto konteinera izolāciju, varat iestatīt sysctl "user.max_user_namespaces" vērtību uz 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/ sysctl.d/userns.conf

Avots: opennet.ru

Pievieno komentāru