CVE-2021-39144

XStream XStream

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2023-03-10

Официальное описание

XStream contains a remote code execution vulnerability that allows an attacker to manipulate the processed input stream and replace or inject objects that result in the execution of a local command on the server. This vulnerability can affect multiple products, including but not limited to VMware Cloud Foundation.

🛡️
Технический анализ и план устранения

Суть уязвимости

CVE-2021-39144 — это критическая уязвимость (CVSS 9.8), связанная с небезопасной десериализацией в библиотеке XStream. Проблема заключается в том, что XStream по умолчанию позволяет десериализовать произвольные типы объектов из XML-входных данных.

Злоумышленник может сформировать специально подготовленный XML-запрос, содержащий манипулируемые объекты (в частности, связанные с динамическими прокси и java.beans.EventHandler). При обработке такого потока данных XStream создает объекты, которые в процессе своей инициализации или финализации выполняют произвольные команды в операционной системе сервера с правами запущенного Java-приложения.

Как исправить

Основным способом устранения уязвимости является обновление библиотеки XStream до версии, в которой введены более строгие политики безопасности по умолчанию.

  1. Обновите XStream до версии 1.4.18 или выше. Если вы используете Maven, измените версию в pom.xml:
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.18</version>
</dependency>

  1. Если вы используете продукты, в состав которых входит XStream (например, VMware Cloud Foundation), необходимо применить официальные патчи от производителя. Для VMware Cloud Foundation (NSX-V) следуйте инструкциям из соответствующего бюллетеня безопасности (VMSA-2021-0025).

  2. После обновления убедитесь, что в коде инициализации XStream настроен белый список разрешенных типов (AllowList). Начиная с версии 1.4.18, XStream блокирует опасные типы по умолчанию, но явная настройка является лучшей практикой:

XStream xstream = new XStream();
XStream.setupDefaultSecurity(xstream);
xstream.allowTypes(new Class[] { MySafeClass.class });

Временные меры

Если немедленное обновление библиотеки невозможно, необходимо ограничить возможности десериализации программным путем или на уровне сетевой защиты.

  1. Настройте фильтрацию типов в объекте XStream, чтобы запретить обработку потенциально опасных классов (черный список). Добавьте следующий код перед обработкой входных данных:
xstream.denyTypesByRegExp(new String[] { ".*\\.EventHandler" });
xstream.denyTypes(new Class[] { java.lang.ProcessBuilder.class });

  1. Если XStream используется в веб-сервисах, настройте правила на Web Application Firewall (WAF) для блокировки XML-запросов, содержащих теги <dynamic-proxy> и обращения к классу java.beans.EventHandler.

  2. Ограничьте права доступа учетной записи, от которой запускается Java-приложение, чтобы минимизировать ущерб в случае успешной эксплуатации (принцип наименьших привилегий).

  3. Изолируйте уязвимые компоненты в сети, ограничив исходящий трафик с серверов приложений, чтобы предотвратить загрузку полезной нагрузки или установку reverse shell.