
XStream SSRF CVE-2021-21349
Vulnerabilità
CVE-2021-21349: Una richiesta di Server-Side Request Forgery può essere attivata durante l'unmarshalling con XStream per accedere a flussi di dati da un URL arbitrario che fa riferimento a una risorsa in una intranet o sull'host locale.
Versioni affette
Tutte le versioni fino alla versione 1.4.15 inclusa sono affette, se si utilizza la versione così com'è. Nessun utente è affetto se ha seguito la raccomandazione di configurare il framework di sicurezza di XStream con una whitelist limitata ai tipi minimi richiesti.
Descrizione
Il flusso elaborato al momento dell'unmarshalling contiene informazioni sul tipo per ricreare gli oggetti scritti in precedenza. XStream crea quindi nuove istanze basate su queste informazioni sul tipo. Un attaccante può manipolare il flusso di input elaborato e sostituire o iniettare oggetti, che provocano una richiesta di Server-Side Request Forgery.

$ 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 -
Modifica pom.xml come segue
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
Aggiungi NoTypePermission.NONE
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);