Skip to main content

Análise da CVE-2022-42889: a vulnerabilidade de execução arbitrária de código no Apache Commons Text

Escrito por

18 de outubro de 2022

0 minutos de leitura

Antes de tudo, vale deixar claro: esta NÃO é uma nova vulnerabilidade Log4Shell ou Spring4Shell. Embora seja um problema de execução remota de código, seu impacto não é tão grave nem tão fácil de explorar quanto o da falha no Log4j, descoberta em dezembro de 2021.

Assim como no caso do Log4j, o problema está na possibilidade de fazer uma consulta que pode ser usada de forma indevida. No entanto, a vulnerabilidade Log4Shell era muito fácil de explorar — o que não necessariamente acontece desta vez. Na prática, esse problema é muito parecido com a CVE-2022-33980, sobre a qual escrevemos um artigo no início deste ano.

Entenda os problemas de segurança do Apache Commons Text

Na biblioteca Apache Commons Text, é possível interpolar variáveis. Isso permite carregar propriedades que podem ser avaliadas dinamicamente.

O problema está em StringLookup, que realiza as consultas. Essas consultas são expressões que podem resolver registros DNS, carregar valores de URLs e executar scripts usando um mecanismo de execução de scripts da JVM. Essas URLs e esses scripts podem vir de fontes remotas e levar à execução remota de código quando valores não confiáveis são usados. Essa é considerada uma vulnerabilidade de alta gravidade, identificada como CVE-2022-42889, e afeta as versões da 1.5.x à 1.9.x.

Exemplos da CVE-2022-42889

A seguir, você verá dois exemplos desse tipo de script, usando o mecanismo Nashorn ou o JavaScript. O resultado será o mesmo se você usar interpolatorStringLookup diretamente ou por meio de StringSubstitutor (o que provavelmente é mais comum).

Exemplos de código Java usando StringSubstitutor e StringLookup para executar comandos por meio da interpolação de scripts

Vale lembrar que o mecanismo de script Nashorn não está mais disponível por padrão no Java 15 e em versões posteriores. Portanto, esses scripts só serão executados se você fornecer um mecanismo de script. No entanto, como muitas empresas ainda dependem de versões antigas, como o Java 8, esse problema pode ser sério. Se você usa a versão LTS mais recente, o Java 17, nem o script JavaScript nem o Nashorn será executado, pois não há um mecanismo disponível por padrão.

Como corrigir a CVE-2022-42889

Vale reforçar: não estamos diante de uma nova Log4Shell. Talvez você não use StringLookup diretamente, mas não tem como saber se alguma das bibliotecas transitivas que usa depende dele. A maneira mais simples de resolver o problema é atualizar para a versão 1.10 (ou posterior) do commons-text, que desativa os prefixos URL, DNS e script por padrão — e impede a execução arbitrária de código por esse caminho.

A análise do Snyk pode ajudar você a descobrir se essa vulnerabilidade está presente na sua stack. Se ela for detectada, atualize para a versão 1.10 e execute snyk monitor na CLI para continuar monitorando em produção.

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.