Дослідники безпеки із компанії 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. Перша вразливість (
Для обходу проблеми Бернштейн рекомендував запускати qmail процеси з виставленням загального ліміту на доступну пам'ять («softlimit -m12345678»), і в цьому випадку проблема блокується. В якості альтернативного способу захисту також згадується обмеження максимального розміру повідомлення, що обробляється через файл «control/databytes» (за замовчуванням не створюється при налаштуваннях за замовчуванням qmail залишається вразливим). Крім того, "control/databytes" не захищає від локальних атак з боку користувачів системи, тому що обмеження враховується тільки в qmail-smtpd.
Проблема зачіпає пакет
Джерело: opennet.ru