
XStream SSRF CVE-2021-21349
Vulnerabilidade
CVE-2021-21349: Uma Solicitação de Falsificação do Lado do Servidor (Server-Side Forgery Request) pode ser ativada durante o unmarshalling com o XStream para acessar fluxos de dados de uma URL arbitrária que referencia um recurso em uma intranet ou no host local.
Versões Afetadas
Todas as versões até a versão 1.4.15 inclusive são afetadas, caso a versão seja usada em sua configuração padrão (out of the box). Nenhum usuário é afetado se tiver seguido a recomendação de configurar o framework de segurança do XStream com uma whitelist limitada aos tipos mínimos necessários.
Descrição
O fluxo processado durante o unmarshalling contém informações de tipo para recriar os objetos anteriormente gravados. O XStream cria, portanto, novas instâncias com base nessas informações de tipo. Um atacante pode manipular o fluxo de entrada processado e substituir ou injetar objetos, o que resulta em uma solicitação de falsificação do lado do servidor (server-side forgery request).

$ 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 -
Altere o pom.xml para o seguinte
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.16</version>
</dependency>
Adicione NoTypePermission.NONE
import com.thoughtworks.xstream.security.NoTypePermission; // Add
XStream xstream = new XStream();
xstream.addPermission(NoTypePermission.NONE); // Add
xstream.fromXML(xml);