осебпазирии интиқодӣ дар PolKit имкон медиҳад, ки дастрасии реша дар аксари дистрибюторҳои Linux

Qualys осебпазириро (CVE-2021-4034) дар ҷузъи системаи Polkit (собиқ PolicyKit) муайян кардааст, ки дар тақсимот истифода мешавад, то ба корбарони беимтиёз имкон диҳад, ки амалҳоеро анҷом диҳанд, ки ҳуқуқҳои баландтари дастрасиро талаб мекунанд. Ин осебпазирӣ ба корбари беимтиёзи маҳаллӣ имкон медиҳад, ки имтиёзҳои худро барои решакан кардан ва назорати пурраи система ба даст оранд. Мушкилот PwnKit бо номи рамзӣ буд ва барои тавлиди эксплоити корӣ, ки дар конфигуратсияи пешфарз дар аксари дистрибюторҳои Linux кор мекунад, намоён аст.

Мушкилот дар утилитаи pkexec PolKit мавҷуд аст, ки бо парчами решаи SUID меояд ва барои иҷро кардани фармонҳо бо имтиёзҳои корбари дигар тибқи қоидаҳои муайяншудаи PolKit тарҳрезӣ шудааст. Аз сабаби коркарди нодурусти далелҳои сатри фармон, ки ба pkexec интиқол дода шудааст, корбари беимтиёз метавонад аутентификатсияро гузарад ва коди худро новобаста аз қоидаҳои муқарраршудаи дастрасӣ ҳамчун реша иҷро кунад. Барои ҳамла муҳим нест, ки кадом танзимот ва маҳдудиятҳо дар PolKit муайян шудаанд, кофӣ аст, ки атрибути решаи SUID барои файли иҷрошаванда бо утилитаи pkexec муқаррар карда шавад.

Pkexec дурустии ҳисобкунии аргументи сатри фармонро (argc) ҳангоми оғоз кардани раванд тафтиш намекунад. Таҳиягарони pkexec тахмин карданд, ки вуруди аввал дар массиви argv ҳамеша номи равандро (pkexec) дар бар мегирад ва дуюм ё арзиши NULL ё номи фармони тавассути pkexec оғозшударо дар бар мегирад. Азбаски шумори аргументҳо нисбат ба мундариҷаи воқеии массив санҷида нашуда буд ва ҳамеша аз 1 калонтар ҳисобида мешуд, агар раванд ба массиви холии argv интиқол дода шавад, тавре ки функсияи execve Linux иҷозат медиҳад, pkexec NULL-ро ҳамчун аргументи аввал ҳисоб мекунад ( номи раванд) ва дигаре ҳамчун берун аз хотираи буферӣ, ба монанди мундариҷаи минбаъдаи массив. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| ВВВВВ "барнома" "-option" NULL "арзиш" "PATH=ном" NULL

Мушкилот дар он аст, ки пас аз массиви argv дар хотира массиви envp мавҷуд аст, ки дорои тағирёбандаҳои муҳити зист аст. Ҳамин тариқ, агар массиви argv холӣ бошад, pkexec маълумотро дар бораи иҷрои фармон бо имтиёзҳои баланд аз унсури аввали массив бо тағирёбандаҳои муҳити зист (argv[1] ба envp[0] шабеҳ шуд), мундариҷаи онҳоро идора кардан мумкин аст, хориҷ мекунад аз ҷониби ҳамлагар.

Пас аз гирифтани арзиши argv[1], pkexec кӯшиш мекунад, ки бо назардошти роҳҳои файл дар PATH роҳи пурраи файли иҷрошавандаро муайян кунад ва ба сатр нишондодро бо роҳи пурраи бозгашт ба argv[1] менависад, ки он боиси аз нав навишта шудани арзиши тағирёбандаи муҳити аввал мегардад, зеро argv[1] ба envp[0] шабеҳ аст. Бо истифода аз номи тағирёбандаи муҳити аввал, ҳамлакунанда метавонад дар pkexec тағирёбандаи муҳити дигарро иваз кунад, масалан, тағирёбандаи муҳити зисти "LD_PRELOAD" -ро, ки дар барномаҳои suid иҷозат дода намешавад, иваз кунад ва ба китобхонаи муштараки онҳо бор карда шавад. раванд.

Эксплоити корӣ иваз кардани тағирёбандаи GCONV_PATH-ро дар бар мегирад, ки барои муайян кардани роҳ ба китобхонаи рамзгузории рамз истифода мешавад, ки ҳангоми занги функсияи g_printerr() динамикӣ бор карда мешавад, ки рамзи он iconv_open() -ро истифода мебарад. Бо аз нав муайян кардани роҳ дар GCONV_PATH, ҳамлакунанда метавонад кафолат диҳад, ки он китобхонаи стандартии iconv нест, балки китобхонаи худи он аст, ки коркардкунандагони он ҳангоми намоиши паёми хато дар марҳилае, ки pkexec то ҳол бо он кор мекунад, иҷро карда мешаванд. ҳуқуқҳои реша ва пеш аз оғози иҷозатҳо тафтиш карда мешаванд.

Қайд карда мешавад, ки сарфи назар аз он, ки мушкилот дар натиҷаи коррупсияи хотира ба вуҷуд омадааст, онро новобаста аз меъмории сахтафзори истифодашуда боэътимод ва такроран истифода бурдан мумкин аст. Эксплоити омодашуда дар Ubuntu, Debian, Fedora ва CentOS бомуваффақият санҷида шуд, аммо метавонад дар дигар дистрибюторҳо низ истифода шавад. Истисмори аслӣ то ҳол дастраси омма нест, ки аз он шаҳодат медиҳад, ки он ночиз аст ва аз ҷониби дигар муҳаққиқон метавонад ба осонӣ дубора эҳё карда шавад, аз ин рӯ муҳим аст, ки ҳарчӣ зудтар навсозии пачка дар системаҳои бисёркорбар насб карда шавад. Polkit инчунин барои системаҳои BSD ва Solaris дастрас аст, аммо барои истифода дар онҳо омӯхта нашудааст. Чизе маълум аст, ки ҳамларо дар OpenBSD иҷро кардан мумкин нест, зеро ядрои OpenBSD имкон намедиҳад, ки ҳангоми даъвати execve() арзиши argc-и нулӣ интиқол дода шавад.

Мушкилот аз моҳи майи соли 2009, пас аз илова кардани фармони pkexec вуҷуд дорад. Ислоҳи осебпазирии PolKit дар айни замон ҳамчун часпак дастрас аст (ягон версияи часпак бароварда нашудааст), аммо азбаски таҳиягарони дистрибютор дар бораи мушкилот пешакӣ огоҳ карда шуда буданд, аксари дистрибюторҳо навсозиро ҳамзамон бо ифшои маълумот дар бораи осебпазирӣ нашр карданд. Масъала дар RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ва Manjaro ҳал карда шудааст. Ҳамчун чораи муваққатӣ барои бастани осебпазирӣ, шумо метавонед парчами решаи SUID-ро аз барномаи /usr/bin/pkexec хориҷ кунед (“chmod 0755 /usr/bin/pkexec”).



Манбаъ: opennet.ru

Илова Эзоҳ