
XStream SSRF CVE-2021-21349
Уязвимость
CVE-2021-21349: При десериализации (unmarshalling) с помощью XStream может быть активирована подделка серверного запроса (Server-Side Forgery Request) для доступа к потокам данных с произвольного URL-адреса, ссылающегося на ресурс в интрасети или на локальном хосте.
Затронутые версии
Затронуты все версии вплоть до версии 1.4.15 включительно, если используется версия из коробки. Не затронуты пользователи, которые последовали рекомендации настроить фреймворк безопасности XStream с белым списком, ограниченным минимально необходимыми типами.
Описание
Обрабатываемый поток во время десериализации (unmarshalling) содержит информацию о типах для воссоздания ранее записанных объектов. Поэтому XStream создаёт новые экземпляры на основе этой информации о типах. Злоумышленник может манипулировать обрабатываемым входным потоком и заменять или внедрять объекты, что приводит к подделке серверного запроса.

$ docker build -t cve-2021-21349 .
$ python -m http.server 8080
$ docker run -it --rm cve-2021-21349
Serving HTTP on :: port 8080 (http://[::]:8080/) ...
::ffff:127.0.0.1 - - [05/May/2021 16:35:39] "GET /internal.txt HTTP/1.1" 200 -
Измените pom.xml, как показано ниже
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
Добавьте NoTypePermission.NONE
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);