
Execução Remota de Código Pré-Autenticação no Confluence via Injeção OGNL (CVE-2022-26134)
Em 30 de maio de 2022, uma organização chamada Volexity identificou uma vulnerabilidade de RCE não autenticada (com pontuação 9.8 no NIST) nas edições Confluence Server e Data Center da Atlassian (https://www.atlassian.com/software/confluence).
Confluence é uma estrutura de documentação colaborativa e gerenciamento de projetos para equipes. O Confluence ajuda a acompanhar o status do projeto oferecendo um espaço de trabalho centralizado para os membros.
As seguintes versões do Confluence são vulneráveis a este CVE:
Você pode ver a entrada NIST para CVE-2022-26134 aqui (https://nvd.nist.gov/vuln/detail/CVE-2022-26134).
Este CVE utiliza uma vulnerabilidade na linguagem de expressão OGNL (Object-Graph Navigation Language) para Java. OGNL é usado para obter e definir propriedades de objetos Java, entre muitas outras coisas.
Por exemplo, OGNL é usado para vincular elementos de front-end, como caixas de texto, a objetos de back-end e pode ser usado em aplicações web baseadas em Java, como o Confluence. Podemos ver como o OGNL é usado na captura de tela abaixo. Os valores são inseridos em um formulário web, onde serão armazenados em objetos dentro da aplicação.
Exploração Podemos abusar do fato de que o OGNL pode ser modificado; podemos criar um payload para testar e verificar exploits.
Para explorar esta vulnerabilidade no OGNL, precisamos fazer uma requisição HTTP GET e colocar nosso payload dentro da URI. Por exemplo, podemos instruir o runtime Java a executar um comando, como criar um arquivo no servidor: ${@java.lang.Runtime@getRuntime().exec("touch /tmp/thm/")}/.
Isso precisará ser codificado em URL. Você pode usar este site para ajudar a codificar seus payloads em URL (observe que seu payload curl precisará terminar com uma / final e não $2F). Comando: user@host~ curl -v http://<target_ip>:8090/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22touch%20/tmp/thm%22%29%7D/
Agora, verifique se o comando acima foi executado com sucesso executando o comando "ls /tmp" no comando acima.
Existem alguns PoCs de exploração funcionais por aí, eu demonstrarei o PoC de Samy Younsi (Mwqda) escrito em Python e hospedado no GitHub (https://github.com/h3v0x/CVE-2022-26134).
Detecção
Arquivos de Log O Confluence é um servidor Apache Tomcat que possui logs localizados em /opt/atlassian/confluence/logs. Você pode usar comandos como grep para pesquisar requisições HTTP GET de payloads que estão usando o runtime Java para executar comandos. Por exemplo:
grep -R "/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22" in catalina.out
YARA Se você tiver o Yara instalado no servidor que executa o Confluence, a Volexity (os descobridores da vulnerabilidade) criou a regra Yara para você usar, que está disponível neste repositório e também no seguinte link (https://github.com/volexity/threat-intel/blob/main/2022/2022-06-02%20Active%20Exploitation%20Of%20Confluence%200-day/indicators/yara.yar).
Correção A Atlassian lançou um aviso para seus produtos afetados por este CVE, que você pode ler aqui (https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html). Para resolver o problema, você precisa atualizar sua versão do Confluence. A lista sugerida no momento da publicação é:
Lembre-se, OGNL é uma linguagem de expressão para aplicações web baseadas em Java, portanto esta vulnerabilidade também se aplica a outras aplicações web que executam as mesmas classes que o Confluence usa!
Material de Leitura Adicional: