Уразливість, що віддалено експлуатується, в поштовому сервері 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

Додати коментар або відгук