Выдалена эксплуатаваная ўразлівасць у паштовым серверы qmail

Даследчыкі бяспекі з кампаніі Qualys паказалі магчымасць эксплуатацыі уразлівасці ў паштовым серверы qmail, вядомай яшчэ з 2005 гады (CVE-2005-1513), але якая заставалася невыпраўленай, бо аўтар qmail сцвярджаў аб нерэалістычнасці стварэння працавальнага эксплоіта, які мог бы ўжывацца для нападу на сістэмы ў канфігурацыі па змаўчанні. У Qualys атрымалася падрыхтаваць эксплоіт які абвяргае дадзеную здагадку і які дазваляе ініцыяваць выдаленае выкананне кода на серверы праз адпраўку адмыслова аформленага паведамлення.

Праблема выклікана цэлалікім перапаўненнем у функцыі stralloc_readyplus(), якое можа ўзнікнуць пры апрацоўцы вельмі вялікага паведамлення. Для эксплуатацыі патрабавалася 64-разрадная сістэма з аб'ёмам віртуальнай памяці больш за 4ГБ. Пры першапачатковым разборы ўразлівасці ў 2005 году Дэніэл Бернштэйн (Daniel J. Bernstein), сцвярджаў, што прысутнае ў кодзе здагадка аб тым, што памер вылучаемага масіва заўсёды ўкладваецца ў 32-бітнае значэнне заснавана на тым, што ніхто не падае гігабайты памяці кожнаму працэсу. За апошнія 15 гадоў 64-разрадныя сістэмы на серверах выцеснілі 32-разрадныя, кардынальна выраслі аб'ёмы пастаўляемай памяці і прапускная здольнасць сетак.

Суправаджаючыя пакеты з qmail улічылі заўвагу Бернштэйна і пры запуску працэсу qmail-smtpd абмяжоўвалі даступную памяць (напрыклад, у Debian 10 выстаўляецца ліміт у 7MB). Але інжынеры з Qualys высветлілі, што гэтага нядосыць і акрамя qmail-smtpd выдаленая атака можа быць праведзена на працэс qmail-local, які ва ўсіх правераных пакетах заставаўся не абмежаваны. У якасці доказу быў падрыхтаваны прататып эксплоіта, прыдатны для нападу на які пастаўляецца ў Debian пакет з qmail у канфігурацыі па змаўчанні.
Для арганізацыі выдаленага выканання кода падчас нападаў патрабуецца наяўнасць на серверы 4ГБ вольнага месца на дыску і 8ГБ АЗП.
Эксплоіт дазваляе запусціць любыя shell-каманды з правамі любога карыстача ў сістэме, акрамя root і сістэмных карыстачоў, не мелых свайго падкаталога ў каталогу "/home" (працэс qmail-local запускаецца з правамі лакальнага карыстача, якому ажыццяўляецца дастаўка).

Атака ажыццяўляецца
праз адпраўку вельмі вялікага паштовага паведамлення, які ўключае некалькі радкоў у загалоўку, памерам каля 4GB і 576MB. Апрацоўка такога радка ў qmail-local прыводзіць да цэлалікавага перапаўнення пры спробе дастаўкі паведамлення лакальнаму карыстачу. Цалкам перапаўненне следам прыводзіць да перапаўнення буфера пры капіяванні дадзеных і магчымасці перазапісу старонак памяці з кодам libc. Праз маніпуляцыі з кампаноўкай перадаваных дадзеных атрымоўваецца ў тым ліку перапісаць адрас функцыі "open()", замяніўшы яго на адрас функцыі "system()".

Далей, падчас выкліку qmesearch() у qmail-local ажыццяўляецца адкрыццё файла ".qmail-extension" праз функцыю open(), што прыводзіць да фактычнага запуску функцыі
system(".qmail-extension"). Але так як частка файла "extension" утворыцца на аснове адрасу атрымальніка (напрыклад, "localuser-extension@localdomain") атакавалыя могуць арганізаваць перадачу каманды для запуску, паказаўшы карыстальніка "localuser-; command; @ localdomain" у якасці атрымальніка паведамлення.

У ходзе аналізу кода таксама былі выяўлены дзве ўразлівасці ў дадатковым патчы qmail-verify, які ўваходзіць у склад пакета для Debian. Першая ўразлівасць (CVE-2020-3811) дазваляе абыйсці праверку email-адрасу, а другая (CVE-2020-3812) прыводзіць да ўцечкі лакальнай інфармацыі. У прыватнасці, першая ўразлівасць дазваляе абыйсці праверку карэктнасці адраса, які ўжываецца ў эксплоіце для перадачы каманды (праверка не спрацоўвае для адрасоў без дамена, такіх як «localuser-;command;»). Другая ўразлівасць можа выкарыстоўвацца для праверкі наяўнасці файлаў і каталогаў у сістэме, у тым ліку даступных толькі для root (qmail-verify запускаецца з правамі root), праз прамы зварот да лакальнага апрацоўшчыка.

Для абыходу праблемы Бернштэйн рэкамендаваў запускаць працэсы qmail з выстаўленнем агульнага ліміту на даступную памяць ("softlimit -m12345678"), і ў гэтым выпадку праблема блакуецца. У якасці альтэрнатыўнага спосабу абароны таксама згадваецца абмежаванне максімальнага памеру апрацоўванага паведамлення праз файл "control/databytes" (па змаўчанні не ствараецца пры наладах па змаўчанні qmail застаецца ўразлівым). Акрамя таго, "control/databytes" не абараняе ад лакальных нападаў са боку карыстачоў сістэмы, бо абмежаванне ўлічваецца толькі ў qmail-smtpd.

Праблема закранае пакет netqmail, які ўваходзіць у рэпазітары Debian. Для дадзенага пакета падрыхтаваны набор патчаў, які ўхіляе як старыя ўразлівасці 2005 гады (праз даданне ў код функцыі alloc() цвёрдых лімітаў на памяць), так і новыя праблемы ў qmail-verify. Асобна падрыхтаваны абноўлены варыянт патча qmail-verify. Распрацоўнікі адгалінавання notqmail падрыхтавалі свае патчы для блакавання старых праблем, а таксама запусцілі працу па ўхіленні ўсіх магчымых цэлалікіх перапаўненняў у кодзе.

Крыніца: opennet.ru

Дадаць каментар