Критична рањивост у ПолКит-у омогућава роот приступ на већини Линук дистрибуција

Куалис је идентификовао рањивост (ЦВЕ-2021-4034) у компоненти система Полкит (раније ПолициКит) која се користи у дистрибуцијама како би се омогућило непривилегованим корисницима да обављају радње које захтевају повишена права приступа. Рањивост омогућава непривилегованом локалном кориснику да ескалира своје привилегије на роот и стекне потпуну контролу над системом. Проблем је добио кодни назив ПвнКит и значајан је по томе што производи радну експлоатацију која ради у подразумеваној конфигурацији на већини Линук дистрибуција.

Проблем је присутан у ПолКит-овом пкекец услужном програму, који долази са СУИД роот заставицом и дизајниран је да покреће команде са привилегијама другог корисника у складу са наведеним ПолКит правилима. Због погрешног руковања аргументима командне линије који су прослеђени пкекец-у, непривилеговани корисник би могао да заобиђе аутентификацију и да изазове покретање свог кода као роот, без обзира на постављена правила приступа. За напад, није битно која су подешавања и ограничења наведена у ПолКит-у, довољно је да је СУИД роот атрибут постављен за извршну датотеку помоћу пкекец услужног програма.

Пкекец не проверава валидност броја аргумената командне линије (аргц) који је прослеђен приликом покретања процеса. Програмери пкекец-а су претпоставили да први унос у низу аргв увек садржи име процеса (пкекец), а други или НУЛЛ вредност или име команде покренуте преко пкекец-а. Пошто број аргумената није проверен у односу на стварни садржај низа и претпостављено је да је увек већи од 1, ако је процесу прослеђен празан низ аргв, као што Линук екецве функција дозвољава, пкекец би третирао НУЛЛ као први аргумент ( име процеса) и следећи као изван бафер меморије, као наредни садржај низа. |———+———+——+————|———+———+——+————| | аргв[0] | аргв[1] | ... | аргв[аргц] | енвп[0] | енвп[1] | ... | енвп[енвц] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| ВВВВВВ "програм" "-опција" НУЛЛ "вредност" "ПАТХ=име" НУЛЛ

Проблем је у томе што после аргв низа постоји енвп низ у меморији који садржи променљиве окружења. Дакле, ако је аргв низ празан, пкекец издваја податке о команди која се покреће са повишеним привилегијама из првог елемента низа са променљивим окружења (аргв[1] је постао идентичан енвп[0]), чији се садржај може контролисати од стране нападача.

Пошто је примио вредност аргв[1], пкекец покушава, узимајући у обзир путање датотеке у ПАТХ, да одреди пуну путању до извршне датотеке и уписује показивач на стринг са пуном путањом назад до аргв[1], што доводи до преписивања вредности прве променљиве окружења, пошто је аргв[1] идентичан енвп[0]. Манипулишући именом прве променљиве окружења, нападач може да замени другу променљиву окружења у пкекец-у, на пример, да замени променљиву окружења „ЛД_ПРЕЛОАД“, која није дозвољена у суид програмима, и да организује да се њихова заједничка библиотека учита у процес.

Радни експлоат укључује замену променљиве ГЦОНВ_ПАТХ, која се користи за одређивање путање до библиотеке за транскодирање симбола, која се динамички учитава приликом позива функције г_принтерр(), чији код користи ицонв_опен(). Редефинисањем путање у ГЦОНВ_ПАТХ, нападач може да осигура да није учитана стандардна библиотека ицонв, већ сопствена библиотека, руковаоци из које ће бити извршени када се прикаже порука о грешци у фази када пкекец још увек ради са роот права и пре него што се провере дозволе за покретање.

Напомиње се да упркос чињеници да је проблем узрокован оштећењем меморије, он се може поуздано и више пута експлоатисати без обзира на коришћену хардверску архитектуру. Припремљени експлоат је успешно тестиран на Убунту, Дебиан, Федора и ЦентОС, али се може користити и на другим дистрибуцијама. Оригинални експлоат још увек није јавно доступан, што указује да је тривијалан и да га други истраживачи могу лако поново направити, тако да је важно да се ажурирање закрпе инсталира што је пре могуће на системима за више корисника. Полкит је такође доступан за БСД системе и Соларис, али није проучаван за употребу на њима. Оно што је познато је да се напад не може извршити на ОпенБСД, пошто ОпенБСД кернел не дозвољава да се проследи нулл аргц вредност када се позове екецве().

Проблем је присутан од маја 2009. године, од додавања команде пкекец. Исправка за ПолКит рањивост је тренутно доступна као закрпа (није објављено ниједно издање закрпе), али пошто су програмери дистрибуције унапред обавештени о проблему, већина дистрибуција је објавила ажурирање истовремено са обелодањивањем информација о рањивости. Проблем је решен у РХЕЛ 6/7/8, Дебиан, Убунту, опенСУСЕ, СУСЕ, Федора, АЛТ Линук, РОСА, Гентоо, Воид Линук, Арцх Линук и Мањаро. Као привремену меру за блокирање рањивости, можете уклонити СУИД роот заставицу из /уср/бин/пкекец програма („цхмод 0755 /уср/бин/пкекец“).



Извор: опеннет.ру

Додај коментар