Компанія Qualys
Проблема викликана помилкою в коді, що здійснює доставку пошти на віддалений поштовий сервер (не в коді, що обробляє вхідні з'єднання). Атака можлива як за клієнта, і за сервера. На стороні клієнта атака можлива у конфігурації 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 також
Проблема є наслідком неповного усунення
Примітно, що Fedora 31 вразливість дозволяє відразу отримати привілеї групи root, так як процес smtpctl забезпечений прапором setgid root, замість setgid smtpq. Отримавши доступ до групи root, можна перезаписати вміст /var/lib/sss/mc/passwd і отримати повний root-доступ у системі.
Джерело: opennet.ru