CVE-2016-8735
Apache Tomcat
2023-05-12
Apache Tomcat contains an unspecified vulnerability that allows for remote code execution if JmxRemoteLifecycleListener is used and an attacker can reach Java Management Extension (JMX) ports. This CVE exists because this listener wasn't updated for consistency with the Oracle patched issues for CVE-2016-3427 which affected credential types.
Технический анализ и план устранения
Суть уязвимости
Уязвимость CVE-2016-8735 связана с небезопасной десериализацией данных в компоненте JmxRemoteLifecycleListener. Проблема возникла из-за того, что данный слушатель (listener) не был своевременно обновлен для соответствия исправлениям Oracle (CVE-2016-3427), касающимся типов учетных данных в JMX.
Если в конфигурации Apache Tomcat включен JmxRemoteLifecycleListener и злоумышленник имеет сетевой доступ к портам JMX, он может передать специально сформированный объект. При попытке аутентификации или взаимодействия сервер десериализует этот объект, что приводит к удаленному выполнению произвольного кода (RCE) с правами процесса Tomcat.
Как исправить
Основным способом устранения является обновление Apache Tomcat до версий, в которых была реализована фильтрация типов объектов при десериализации в JMX.
- Определите текущую версию Tomcat.
- Обновите сервер до одной из следующих версий (или более новых):
- Apache Tomcat 9.0.0.M11
- Apache Tomcat 8.5.7
- Apache Tomcat 8.0.39
- Apache Tomcat 7.0.73
-
Apache Tomcat 6.0.48
-
Если вы используете пакетный менеджер (например, в Debian/Ubuntu), выполните обновление:
apt-get update && apt-get upgrade libtomcat8-java
- После обновления убедитесь, что в файле
conf/server.xmlдляJmxRemoteLifecycleListenerне используются устаревшие библиотеки.
Временные меры
Если немедленное обновление невозможно, примените следующие защитные меры:
- Отключите
JmxRemoteLifecycleListener, если он не является критически важным для мониторинга. Для этого закомментируйте соответствующую строку вconf/server.xml:
<!-- <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" ... /> -->
- Ограничьте сетевой доступ к портам JMX (по умолчанию порты, указаны в атрибутах
rmiRegistryPortPlatformиrmiServerPortPlatform) с помощью межсетевого экрана (Firewall). Разрешите подключения только с доверенных IP-адресов (например, серверов мониторинга).
iptables -A INPUT -p tcp --dport 10001 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 10001 -j DROP
- Настройте обязательную аутентификацию и SSL для JMX, добавив соответствующие параметры в переменную окружения
CATALINA_OPTS.
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=true"