← voltar
CVE-2021-39144highsob ataqueCWE-502CWE-94

XStream is vulnerable to a Remote Command Execution attack

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 8.5epss 98%
da publicação à arma428 dias
Publicada no NVD23 de ago.
metasploit+428d
CISA KEV+564d
probabilidade de exploração
98%top 1% das CVEs
exploração observada
simCISA + VulnCheck
1 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2023-03-31

Apply updates per vendor instructions.

Resumo

Falha de desserialização insegura na biblioteca Java XStream (antes da versão 1.4.18): ao converter XML de volta em objetos Java, a lib usava por padrão uma blacklist de classes perigosas que pesquisadores conseguiram contornar, permitindo que um XML malicioso instancie classes Java arbitrárias e leve à execução de comandos no host. Importa porque XStream é embutida em diversos produtos (o caso documentado é o VMware NSX Manager) e a vulnerabilidade real só se manifesta na aplicação que expõe o parsing ao atacante — a biblioteca isolada não tem superfície de rede própria.

Detalhamento técnico

O núcleo do problema é CWE-502 (Deserialization of Untrusted Data) combinado com CWE-94 (Code Injection): XStream.fromXML() e métodos equivalentes de unmarshalling reconstroem grafos de objetos Java a partir de um documento XML fornecido externamente, resolvendo nomes de classe presentes no próprio XML. Antes da 1.4.18, o 'security framework' da biblioteca operava por blacklist — uma lista de classes conhecidas como perigosas (gadgets de RCE, SSRF, DoS) que era bloqueada por padrão, mas todo o restante do classpath ficava permitido.

Essa blacklist provou-se estruturalmente insuficiente: cada nova CVE do XStream nesse período (2020-2021) — e há uma dezena delas, incluindo CVE-2021-21341 até 21351, 2021-29505 e a série 2021-39139 a 39154 — corresponde a um novo gadget ou técnica que escapa da lista negra vigente. CVE-2021-39144 é um desses casos: input XML manipulado leva à instanciação de uma classe que, direta ou indiretamente, executa comandos do sistema operacional hospedeiro.

O atacante controla o conteúdo do documento XML processado pela chamada de unmarshalling — em outras palavras, qualquer campo, upload ou payload de API que a aplicação passe para XStream.fromXML(). O que ele não controla diretamente é o código executado: ele precisa referenciar uma classe já presente no classpath (Java runtime ou biblioteca de terceiros) que sirva de 'gadget' para a operação final.

Como é explorada

O vetor é rede: o atacante envia ao serviço vulnerável um documento XML malicioso que a aplicação desserializa via XStream sem whitelist restritiva. Não é uma falha explorável isoladamente na biblioteca — depende inteiramente de onde e como a aplicação hospedeira expõe esse parsing. No caso documentado publicamente (VMware NSX Manager), o writeup da Packet Storm descreve exploração sem autenticação, apesar do vetor CVSS oficial do GitHub Advisory indicar PR:L (privilégio baixo necessário) — divergência que reforça que o requisito de autenticação real depende do produto que embute XStream, não da CVE em si.

A pré-condição decisiva, segundo o próprio advisory do fornecedor, é negativa: só está exposto quem NÃO configurou o security framework do XStream com uma whitelist (allowTypes) restrita aos tipos mínimos necessários para a aplicação. Quem seguiu essa recomendação — disponível desde versões anteriores — não é afetado, independentemente da versão instalada.

O resultado final documentado é execução de comandos no host (RCE), consistente com o alto EPSS e a presença confirmada no catálogo KEV da CISA, além de módulo Metasploit e template Nuclei públicos, o que indica exploração automatizada e em massa contra instâncias expostas — tipicamente appliances de gestão (como NSX Manager) que consomem XML via API sem endurecer a configuração do XStream.

Versões

Afetadas
XStream anterior à 1.4.18 (com blacklist padrão não configurada como whitelist restrita), conforme o GitHub Security Advisory do próprio projeto.
Corrigidas em
XStream 1.4.18. Backports distribuídos por Debian LTS (libxstream-java 1.4.11.1-1+deb9u4 para Debian 9 stretch) e por Fedora (pacote xstream 1.4.18 para Fedora 33 e 35).

Como se proteger

A correção do fornecedor é atualizar para XStream 1.4.18 ou posterior, versão em que o modelo de segurança deixou de usar blacklist e passou a negar por padrão todo tipo não explicitamente permitido (whitelist). Isso é uma mudança de comportamento, não apenas patch: aplicações que dependem de desserializar tipos amplos podem quebrar após o upgrade e precisarão declarar explicitamente os tipos permitidos via a API de segurança do XStream.

Se a atualização não for viável de imediato, o paliativo real — e o único reconhecido pelo próprio fornecedor como suficiente mesmo em versões antigas — é configurar o security framework do XStream com uma whitelist limitada aos tipos mínimos necessários para a aplicação, em vez de confiar na blacklist padrão. O custo é engenharia: mapear e testar todos os tipos legitimamente desserializados pela aplicação, o que pode ser trabalhoso em sistemas legados com muitos objetos diferentes trafegando por XML.

Não funciona como mitigação apenas atualizar para uma versão intermediária pré-1.4.18 mais recente supondo que a blacklist ficou 'boa o suficiente' — o histórico de CVEs sucessivas do XStream nesse período mostra que cada blacklist foi superada por um novo gadget. Trocar de blacklist para blacklist não resolve a classe do problema; só a whitelist (nativa a partir da 1.4.18, ou configurada manualmente antes disso) resolve estruturalmente.

Como detectar

Não há assinatura única confiável, porque o payload varia por gadget/classe explorada e pela aplicação hospedeira. Em logs de aplicações que usam XStream, procure requisições com corpo XML contendo elementos referenciando nomes de classe Java fora do domínio de negócio esperado (pacotes como java.lang, javax.*, com.sun.*, ou bibliotecas de terceiros presentes no classpath) — a presença de nomes de classe totalmente qualificados dentro de um payload XML de entrada é, por si, um indicador de tentativa de abuso de desserialização do XStream, mesmo quando a tentativa falha.

No caso específico de produtos como VMware NSX Manager, monitorar chamadas às APIs de gestão que aceitam XML e correlacionar com processos filhos inesperados criados pelo processo Java do serviço (indicativo de execução de comando pós-desserialização) é um sinal mais forte que a inspeção isolada do payload.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
XStream is a simple library to serialize objects to XML and back again. In affected versions this vulnerability may allow a remote attacker has sufficient rights to execute commands of the host only by manipulating the processed input stream. No user is affected, who followed the recommendation to setup XStream's security framework with a whitelist limited to the minimal required types. XStream 1.4.18 uses no longer a blacklist by default, since it cannot be secured for general purpose.
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
Produtos afetados
x-stream · xstream
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.