Уязвимости в OpenSMTPD, позволяващи дистанционно и локално получаване на права root

Компания Qualys разкри еще една отдалечена критична уязвимост (CVE-2020-8794) в имейл сървъра OpenSMTPD, разработван от проекта OpenBSD. Както и откритата в края на януари уязвимост, новата проблема позволява дистанционно изпълнение на произволни команди shell на сървъра с права на потребител root. Уязвимостта е отстранена в версията OpenSMTPD 6.6.4p1.

Проблемата е причинена от грешка в кода, който осъществява доставката на имейли на отдалечен имейл сървър (не в кода, обработващ входящите връзки). Атаката е възможна както от страна на клиента, така и от страна на сървъра. От страна на клиента атаката е възможна в конфигурацията на OpenSMTPD по подразбиране, в която OpenSMTPD приема заявки само на вътрешния мрежови интерфейс (localhost) и изпраща имейл съобщения на външни сървъри. За експлоатацията на уязвимостта е достатъчно OpenSMTPD да установи сесия с имейл сървър, контролиран от атакуващия, или атакуващият да може да се намеси в връзката на клиента (MITM или пренасочване по време на атаки чрез DNS или BGP).

За атака от страна на сървъра е необходимо OpenSMTPD да бъде конфигуриран да приема външни мрежови заявки от други имейл сървъри или да обслужва странични услуги, които позволяват изпращане на заявки на произволен имейл (например, формуляри за потвърждение на адреси на сайтове). Например, злонамерен потребител може да се свърже със сървъра OpenSMTPD и да изпрати неправилен имейл (до несъществуващ потребител), който да доведе до обратна доставка на имейл с код за грешка (bounce) на сървъра на атакуващия. Атакуващият може да експлоатира уязвимостта в момента, когато OpenSMTPD установи връзка за доставка на уведомление до сървъра на атакуващия. Внедрените по време на атаката shell команди се записват в файл, който се изпълнява с права root при рестартиране на OpenSMTPD, затова атакуващият трябва да изчака рестартирането на OpenSMTPD или да инициира срив на OpenSMTPD.

Проблемата е в функцията mta_io() в кода за обработка на многострочния отговор, връщан от отдалечения сървър след установяване на връзка (например, „250-ENHANCEDSTATUSCODES“ и „250 HELP“). В OpenSMTPD се предвижда, че първият ред включва тризначно число и текст, разделени с „-“, а вторият ред съдържа тризначно число и текст, разделени с интервал. Ако след тризначното число във втория ред няма интервал и текст, указателят, използван за определяне на текста, се поставя на байта след символа ‘\0’ и се опитва да копира в буфера данни, следващи след края на реда.

По молба на проекта OpenBSD публикуването на детайлите за експлоатацията на уязвимостта е отложено до 26 февруари, за да се даде време на потребителите да обновят системите си. Проблемът присъства в кодовата база от декември 2015 г., но експлоатацията за изпълнение на код с права root е възможна от май 2018 г. Изследователите са подготвили работен прототип на експлойд, който е успешно тестван в билдове на OpenSMTPD за OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) и Fedora 31.

В OpenSMTPD има също е открита още една уязвимост (CVE-2020-8793), която позволява на локален потребител да прочете първия ред на всеки файл в системата. Например, може да се прочете първият ред на /etc/master.passwd, който съдържа хеш на паролата на потребителя root. Уязвимостта също така позволява да се прочете всичкото съдържание на файл, принадлежащ на друг потребител, ако този файл се намира в една файлова система с директорията /var/spool/smtpd/. Проблемът не е експлоатируем в много дистрибуции на Linux, в които стойността на /proc/sys/fs/protected_hardlinks е зададена на 1.

Проблемът е следствие от непълно отстраняване на проблеми, озвучени в процеса на одита, проведен от Qualys през 2015 г. Атакуващият може да постигне изпълнение на своя код с права на групата „_smtpq“, като зададе променливата „PATH=.“ и постави в текущата директория скрипт с името makemap (утилитата smtpctl извиква makemap без явно указание на път). Получавайки достъп до групата „_smtpq“, атакуващият може да предизвика състояние на състезание (да създаде голям файл в директорията offline и да изпрати сигнал SIGSTOP) и, преди да завърши обработката, да замени файла в директорията offline с твърда символична връзка, сочеща към целевия файл, съдържанието на който трябва да бъде прочетено.

Забележително е, че в Fedora 31 уязвимостта позволява незабавно да се получат права на групата root, тъй като процесът smtpctl е снабден с флага setgid root, вместо setgid smtpq. След като получи достъп до групата root, може да се презапише съдържанието на /var/lib/sss/mc/passwd и да се получи пълен root-достъп в системата.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster