
XStream SSRF CVE-2021-21349
Vulnérabilité
CVE-2021-21349 : une requête de falsification côté serveur peut être activée lors de la désérialisation avec XStream pour accéder à des flux de données depuis une URL arbitraire référençant une ressource dans un intranet ou sur l'hôte local.
Versions affectées
Toutes les versions jusqu'à la version 1.4.15 incluse sont affectées, si vous utilisez la version telle quelle. Aucun utilisateur n'est affecté s'il a suivi la recommandation de configurer le framework de sécurité de XStream avec une liste blanche limitée aux types minimalement requis.
Description
Le flux traité au moment de la désérialisation contient des informations de type pour recréer les objets précédemment écrits. XStream crée donc de nouvelles instances sur la base de ces informations de type. Un attaquant peut manipuler le flux d'entrée traité et remplacer ou injecter des objets, ce qui aboutit à une requête de falsification côté serveur.

$ 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 -
Modifiez pom.xml comme ci-dessous
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
Ajoutez NoTypePermission.NONE
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);