Вразливість в Apache Tomcat, що дозволяє підставити JSP-код та отримати файли веб-додатків

Дослідники з китайської компанії Chaitin Tech виявили вразливість (CVE-2020-1938) В Apache Tomcat, відкритої реалізації технологій Java Servlet, JavaServer Pages, Java Expression Language та Java WebSocket. Вразливості надано кодове ім'я Ghostcat і критичний рівень небезпеки (9.8 CVSS). Проблема дозволяє в конфігурації за замовчуванням через відправлення запиту через мережний порт 8009 прочитати вміст будь-яких файлів з каталогу веб-програми, у тому числі файлів з налаштуваннями та вихідних текстів програми.

Вразливість також дає можливість імпортувати інші файли до коду програми, що дозволяє організувати виконання коду на сервері, якщо програма допускає завантаження файлів на сервер (наприклад, атакуючий може завантажити JSP-скрипт під виглядом картинки через форму завантаження зображення). Атака може бути здійснена за можливості надсилання запиту на мережевий порт з обробником AJP. За попередніми даними, у мережі знайдено понад 1.2 млн хостів, які приймають запити за протоколом AJP.

Вразливість присутня у протоколі AJP, а не викликана помилкою у реалізації. Крім прийому HTTP-з'єднань (порт 8080) в Apache Tomcat за замовчуванням допускається звернення до web-додатку через протокол AJP (Apache Jserv Protocol, порт 8009), який є оптимізований для досягнення більш високої продуктивності бінарний аналог HTTP, застосовується зазвичай при створенні кластера з Tomcat-серверів або для прискорення взаємодії з Tomcat на зворотному проксі або балансувальнику навантаження.

AJP надає штатну функцію для доступу до файлів на сервері, яку можна використовувати в тому числі отримання файлів, які не підлягають розголошенню. Мається на увазі, що доступ до AJP відкритий тільки для довірених серверів, але насправді в стандартній конфігурації Tomcat здійснювався запуск обробника на всіх мережевих інтерфейсах, а запити приймалися без аутентифікації. Доступ можливий до будь-яких файлів web-програми, включаючи вміст WEB-INF, META-INF та будь-яких інших каталогів, що віддаються через виклик ServletContext.getResourceAsStream(). AJP також дозволяє використовувати будь-який файл у доступних для web-програми каталогах як скрипт JSP.

Проблема проявляється, починаючи з випущеної 13 років тому гілки Tomcat 6.x. Крім безпосередньо Tomcat проблема торкається і продукти, що використовують його, такі як Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP), а також самодостатні web-додатки, що використовують Весняний черевик. Аналогічна вразливість (CVE-2020-1745) присутній у web-сервері Відкат, що використовується на сервері додатків Wildfly. У JBoss та Wildfly протокол AJP за замовчуванням включений лише у standalone-full-ha.xml, standalone-ha.xml та ha/full-ha профілях у domain.xml. У Spring Boot підтримка AJP вимкнена за замовчуванням. В даний час різними групами підготовлено понад десяток робочих прикладів експлоїтів (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Уразливість усунена у випусках Tomcat 9.0.31, 8.5.51 и 7.0.100 (супровід гілки 6.x припинено). Простежити за появою оновлення у дистрибутивах можна на цих сторінках: Debian, Ubuntu, RHEL, Fedora, SUSE, FreeBSD. Як обхідний захист можна відключити сервіс Tomcat AJP Connector (прив'язати слухаючий сокет з localhost або закоментувати рядок з Connector port = «8009»), якщо в ньому немає необхідності, або налаштувати автентифікований доступ за допомогою атрибутів «secret» та «address», якщо сервіс використовується для взаємодії з іншими серверами та проксі на базі mod_jk та mod_proxy_ajp (mod_cluster автентифікацію не підтримує).

Джерело: opennet.ru

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