У поштовому сервері Exim критична (), яка може призвести до видалення коду на сервері з правами root при обробці спеціально оформленого запиту. Можливість експлуатації проблеми зазначена у версіях з 4.87 до 4.91 включно або при складанні з опцією EXPERIMENTAL_EVENT.
У конфігурації за замовчуванням атака може бути здійснена без зайвих ускладнень локальним користувачем, оскільки застосовується ACL verify = recipient, що виконує додаткові перевірки для зовнішніх адрес. Здійснення видаленої атаки можливе при зміні налаштувань, наприклад, при роботі в ролі вторинного MX для іншого домену, видалення ACL verify = recipient або певних змін в local_part_suffix). Віддалена атака також можлива, якщо зловмисник зможе утримати з'єднання з сервером відкритим протягом 7 днів (наприклад, відправляючи по одному байту за хвилину для обходу обриву по таймууту). При цьому не виключається, що для дистанційної експлуатації проблеми існують і простіші вектори атаки.
Вразливість викликана некоректною перевіркою адреси одержувача функції deliver_message(), визначеної у файлі /src/deliver.c. Через маніпуляцію з форматуванням адреси атакуючий може домогтися підстановки своїх даних аргументи команди, викликаної через функцію execv() з правами root. Для експлуатації не потрібне застосування складних технік, які використовуються при переповнення буфера або пошкодження пам'яті, досить просто підстановки символів.
Проблема пов'язана із застосуванням для перетворення адрес конструкції:
deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
deliver_domain = expand_string(
string_sprintf("${domain:%s}", new->address));
Функція expand_string() є переускладненим комбайном, зокрема розпізнає команду «${run{команда аргументи}», що призводить до запуску зовнішнього оброблювача. Таким чином, для атаки в рамках SMTP-сеансу локальному користувачеві достатньо передати команду виду RCPT TO «username+${run{…}}@localhost», де localhost один з хостів зі списку local_domains, а username ім'я існуючого локального користувача.
Якщо сервер працює в якості поштового релею, достатньо віддалено відправити команду 'RCPT TO ${run{…}}@relaydomain.com'', де relaydomain.com один з хостів, перерахованих у секції налаштувань relay_to_domains. Оскільки за умовчанням в exim не застосовується режим скидання привілеїв (deliver_drop_privilege = false), передані через ${run{…}} команди будуть виконані з правами root.
Примітно, що вразливість була у випуску 4.92, що вийшов у лютому, без акцентування уваги на те, що виправлення може призвести до проблем з безпекою. Немає підстав вважати, що мало місце усвідомлене приховування вразливості розробниками Exim, оскільки проблема була усунена в ході збою, що виникає під час передачі некоректних адрес, а вразливість була виявлена компанією Qualys при проведенні аудиту змін до Exim.
Виправлення для попередніх версій, які продовжують застосовуватися в дистрибутивах, поки що доступне лише у вигляді . Коригувальні випуски для минулих гілок із усуненням проблеми заплановані на 11 червня. Оновлення пакетів підготовлено для , , . и постачають версію 4.92, у якій проблема не проявляється. RHEL та CentOS проблеми , оскільки Exim не входить у їх штатний репозиторій пакетів.
Джерело: opennet.ru
