Пропатчив Exim - пропатчити ще раз. Новий Remote Command Execution в Exim 4.92 в один запит

Пропатчив Exim - пропатчити ще раз. Новий Remote Command Execution в Exim 4.92 в один запит

Нещодавно, на початку літа, з'явилися масові заклики до оновлення Exim до версії 4.92 через вразливість CVE-2019-10149 (Терміново оновлюйте exim до 4.92 — активне зараження / Хабр). А днями з'ясувалося, що шкідливість Sustes вирішила скористатися цією вразливістю.

Тепер усі екстрено оновлені можуть знову «потішитися»: 21 липня 2019 р. дослідник Zerons виявив критичну вразливість Exim Mail Transfer agent (MTA) під час використання TLS для версій від 4.80 до 4.92.1 включно, що дозволяє віддалено виконувати код із привілейованими правами (CVE-2019-15846).

уразливість

Вразливість присутня при використанні бібліотек як GnuTLS, так і OpenSSL під час встановлення захищеного TLS-з'єднання.

За словами розробника Heiko Schlittermann, файл конфігурації в Exim за умовчанням не використовує TLS, проте багато дистрибутивів під час встановлення створюють необхідні сертифікати та включають захищене з'єднання. Також новіші версії Exim встановлюють опцію tls_advertise_hosts=* та генерують необхідні сертифікати.

depends on the configuration. Most distros enable it by default, але Exim потребує certificate+key для роботи як TLS server. Probably Distros створить Cert during setup. Newer Exims має tls_advertise_hosts option defaulting до «*» і створить self signed certificate, if none is provided.

Сама ж вразливість полягає в некоректній обробці SNI (Server Name Indication, технологія, введена в 2003 RFC 3546 для запиту клієнтом коректного сертифіката для доменного імені, Розповсюдження стандарту TLS SNI / Блог компанії WEBO Group / Хабр) в ході TLS-рукостискання. Зловмиснику достатньо відправити SNI, що закінчується бекслешем ("") і нулл-символом ("").

Дослідники з компанії Qualys виявили баг у функції string_printing(tls_in.sni), який полягає у некоректному екрануванні «». Через війну відбувається запис зворотного слеша в неэкранированном вигляді файл заголовків print spool. Далі цей файл із привілейованими правами зчитується функцією spool_read_header(), що веде до переповнення купи (heap overflow).

На даний момент розробники Exim створили PoC вразливості з виконанням команд на віддаленому вразливому сервері, але в публічному доступі він поки що відсутній. В силу простоти експлуатації бага це лише питання часу, причому досить короткого.

З детальнішим дослідженням компанії Qualys можна ознайомитися тут.

Пропатчив Exim - пропатчити ще раз. Новий Remote Command Execution в Exim 4.92 в один запит

Використання SNI у TLS

Кількість потенційно вразливих публічних серверів

За статистикою великого хостинг-провайдера E-Soft Inc на 1 вересня, на орендованих серверах версія 4.92 використовується у більш ніж 70% хостів.

версія
Кількість серверів
Відсоток

4.92.1
6471
1.28%

4.92
376436
74.22%

4.91
58179
11.47%

4.9
5732
1.13%

4.89
10700
2.11%

4.87
14177
2.80%

4.84
9937
1.96%

Інші версії
25568
5.04%

Статистика компанії E-Soft Inc

Якщо звернутися до пошукової системи Шодан, то з 5,250,000 у базі серверів:

  • близько 3,500,000 використовують Exim 4.92 (близько 1,380,000 з використанням SSL/TLS);
  • більше 74,000 використовують 4.92.1 (близько 25,000 з використанням SSL/TLS).

Таким чином, публічно відомих і доступних Exim потенційно вразливих серверів налічується порядку 1.5 млн.

Пропатчив Exim - пропатчити ще раз. Новий Remote Command Execution в Exim 4.92 в один запит

Пошук Exim-серверів у Shodan

Захист

  • Найпростіший, але не рекомендований варіант - не використовувати TLS, що призведе до пересилання поштових повідомлень у відкритому вигляді.
  • Переважним для уникнення експлуатації вразливості буде оновлення до версії Exim Internet Mailer 4.92.2.
  • У разі неможливості оновлення або встановлення пропатченої версії можна встановити ACL у конфігурації Exim для опції acl_smtp_mail з наступними правилами:
    # to be prepended to your mail acl (the ACL referenced
    # by the acl_smtp_mail main config option)
    deny    condition = ${if eq{}{${substr{-1}{1}{$tls_in_sni}}}}
    deny    condition = ${if eq{}{${substr{-1}{1}{$tls_in_peerdn}}}}

Джерело: habr.com

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