Розкрито подробиці критичної вразливості в Exim.

Опубліковано коригуючий випуск Exim 4.92.2 з усуненням критичної уразливості (CVE-2019-15846), яка в конфігурації за умовчанням може призвести до віддаленого виконання коду зловмисника з правами root. Проблема проявляється лише при включенні підтримки TLS та експлуатується через передачу спеціально оформленого клієнтського сертифіката або модифікованого значення SNI. Вразливість виявлено компанією Qualys.

проблема присутній в обробнику екранування спецсимволів у рядку (string_interpret_escape() з string.c) і викликана тим, що символ '\' в кінці рядка інтерпретується перед нульовим символом ('\0') та екранує його. При екрануванні послідовність '\' і наступний далі нульовий код кінця рядка обробляється як символ і покажчик зрушується на дані поза рядка, які обробляються як його продовження.

Код, що викликає string_interpret_escape(), виділяє буфер під стоку, керуючись фактичним розміром, і виставлений покажчик виявляється в області поза межами буфера. Відповідно, при спробі обробки вхідного рядка виникає ситуація читання даних з області поза межами виділеного буфера, а спроба запису розекранованого рядка може призвести до запису за межі буфера.

У стандартній конфігурації вразливість може бути експлуатована через передачу спеціально оформлених даних в SNI при установці захищеного з'єднання до сервера. Проблема також може бути ексаплуатована через модифікацію значень peerdn у конфігураціях, налаштованих для автентифікації сертифіката клієнта, або при імпорті сертифікатів. Атака через SNI та peerdn можлива починаючи з випуску Exim 4.80, в якому функція string_unprinting() була застосована для розекранування вмісту peerdn та SNI.

Для атаки через SNI підготовлений прототип експлоїту, що працює на архітектурах i386 та amd64 у Linux-системах з Glibc. В експлоїті використовується накладення даних на область купи, що веде до перезапису пам'яті, в якій зберігається ім'я логового файлу. Ім'я файлу замінюється на "/../../../../../../../../etc/passwd". Далі перезаписується змінна з адресою відправника, який першим зберігається в балку, що дозволяє додати нового користувача в систему.

Оновлення пакетів з усуненням уразливості випущено дистрибутивами Debian, Ubuntu, Fedora, SUSE/openSUSE и FreeBSD. RHEL та CentOS проблемі не схильні, оскільки Exim не входить до їх штатного репозиторію пакетів (у EPEL оновлення вже сформовано, але поки не вміщено у громадський репозиторій). У коді Exim проблема усувається однорядковим патчем, що відключає екрануючу дію зворотного слеша, якщо він знаходиться в кінці рядка.

Як обхідний шлях для блокування вразливості можна вимкнути підтримку TLS або додати до
секцію ACL "acl_smtp_mail":

deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}

Джерело: opennet.ru

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