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-2005 — Exploit para CVE-2026-2005, um estouro de heap na extensão pgcrypto do PostgreSQL que leva à execução remota de código. Inclui geradores de PoC, laboratório Docker e análise técnica detalhada. | Kitploit
Ferramentas/GitHubGitHub/dinosn/cve-2026-2005
Análise de VulnerabilidadesExploraçãoTestes de PenetraçãoSegurança de Banco de DadosExploração de Binários
GitHubdinosn/cve-2026-2005

cve-2026-2005

Exploit para CVE-2026-2005, um estouro de heap na extensão pgcrypto do PostgreSQL que leva à execução remota de código. Inclui geradores de PoC, laboratório Docker e análise técnica detalhada.

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

CVE-2026-2005 — Estouro de Heap no pgcrypto do PostgreSQL → RCE

Execução remota de código por meio de uma única consulta SQL direcionada à extensão pgcrypto do PostgreSQL. A vulnerabilidade é um estouro de buffer no heap em pgp_parse_pubenc_sesskey() que permite corromper os metadados do alocador MemoryContext interno do PostgreSQL, alcançando execução arbitrária de código como o usuário postgres.

CVECVE-2026-2005
Componentecontrib/pgcrypto/pgp-pubdec.c
CWECWE-122 (Estouro de buffer baseado em heap)
CVSSv3.18.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
AfetadosPostgreSQL 14.0–14.20, 15.0–15.15, 16.0–16.11, 17.0–17.7, 18.0–18.1
Corrigidos14.21, 15.16, 16.12, 17.8, 18.2
Divulgado2026-02-12
Commit da correção379695d3cc70d040b547d912ce4842090d917ece

Prova de Exploração

Verificação do alvo

Execução do exploit

Prova de RCE

Início Rápido

root@kitploit:~
git clone https://github.com/dinosn/cve-2026-2005.git
cd cve-2026-2005/lab
docker compose up -d pg-exploit
# Aguarde ~5s para o postgres inicializar
python3 ../poc/exploit.py --run cve-2026-2005-pg-exploit

Execução completa da exploração

Causa Raiz

root@kitploit:~
// contrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ctx->cipher_algo = *msg;
ctx->sess_key_len = msglen - 3;                       // controlado pelo atacante
memcpy(ctx->sess_key, msg + 1, ctx->sess_key_len);    // sess_key é uint8[32]

ctx->sess_key é um buffer fixo de 32 bytes embutido em uma struct PGP_Context alocada no heap. Uma mensagem PGP manipulada com uma chave de sessão criptografada por RSA superdimensionada eleva sess_key_len para até ~200 bytes, transbordando para alocações adjacentes no heap. A correção adiciona uma verificação de limites sess_key_len > PGP_MAX_KEY.

Cadeia de Exploração

  1. Estouro de heap — Estouro de 148 bytes além de sess_key[32] grava metadados falsos do alocador na alocação adjacente MBuf
  2. Ignorar bzero — Define MBuf->data = NULL para que explicit_bzero seja ignorado durante a limpeza
  3. Cabeçalho de chunk forjado — hdrmask forjado é decodificado para blockoffset=64, redirecionando o ponteiro do bloco para dados controlados pelo atacante
  4. Escrita na freelist — AllocSetFree grava o endereço do chunk em MC+16 (o campo MemoryContext->methods), substituindo o ponteiro da vtable
  5. Retorno de erro — pgcrypto retorna um erro normal (sem crash), acionando o manipulador de erros do PostgreSQL
  6. Sequestro de vtable — MemoryContextDelete(MC) chama methods->delete_context(MC) por meio da nossa vtable falsa → system(MC)
  7. Execução de comando — system() lê a struct MemoryContext como uma string: NodeTag 0x1D5 = "\xd5\x01\x00\x00" → executa /usr/local/bin/\xd5\x01

Pré-requisitos

  • Acesso autenticado ao banco de dados (qualquer usuário com EXECUTE nas funções pgcrypto — concedido a PUBLIC por padrão)
  • Extensão pgcrypto instalada (CREATE EXTENSION pgcrypto)
  • Endereços específicos do alvo (determinísticos por imagem Docker; sem PIE ASLR nesta configuração de contêiner)
  • Script de gatilho pré-instalado em /usr/local/bin/\xd5\x01 (incluído no Dockerfile.exploit)

Estrutura do Repositório

root@kitploit:~
├── README.md
├── poc/
│   ├── exploit.py          # Gerador + executor de exploit autocontido
│   ├── gen_exploit_v7.py   # Construtor de payload anotado
│   ├── gen_payload.py      # Gerador de PoC somente com crash (todos os tamanhos de estouro)
│   ├── poc_big.sql         # PoC de crash pré-gerado (SIGSEGV)
│   └── poc_minimal.sql     # PoC mínimo de estouro de 4 bytes
├── lab/
│   ├── docker-compose.yml  # Laboratório completo: vulnerável, corrigido, debug, exploit
│   ├── Dockerfile.exploit  # Build de release + script de gatilho (alvo RCE)
│   ├── Dockerfile.vuln     # Build vulnerável padrão (demonstração de crash)
│   ├── Dockerfile.debug    # Build Cassert (demonstração de asserção)
│   ├── init.sql            # Inicialização do banco de dados
│   └── setup.sh            # Auxiliar de configuração do laboratório
├── reports/
│   ├── RCE-CHAIN.md        # Writeup técnico detalhado da exploração
│   ├── REPORT.md           # Relatório de análise da vulnerabilidade
│   └── TODO-FOR-RCE.md     # Log de desenvolvimento (concluído)
├── screenshots/
│   ├── 01-target-verification.png
│   ├── 02-exploit-fire.png
│   ├── 03-rce-proof.png
│   └── 04-full-run.png
└── src/                    # Trechos de código-fonte relevantes

Builds do Laboratório

ContêinerPortaFinalidade
pg-exploit5436Alvo RCE (17.7 padrão + script de gatilho)
pg-vuln5433Demonstração de crash (17.7 padrão, SIGSEGV)
pg-fixed5434Build corrigido (17.8, rejeita o payload)
pg-debug5435Build de debug (cassert SIGABRT com atribuição de origem)
root@kitploit:~
# Iniciar todos os contêineres
cd lab && docker compose up -d

# Demonstração de crash (SIGSEGV no build padrão)
docker exec cve-2026-2005-pg-vuln psql -U postgres -d lab -f /tmp/poc_big.sql
docker logs cve-2026-2005-pg-vuln 2>&1 | grep "signal 11"

# Build corrigido (rejeita graciosamente)
docker exec cve-2026-2005-pg-fixed psql -U postgres -d lab -f /tmp/poc_big.sql
# ERROR: Public key too big

# Build de debug (asserção com arquivo:linha)
docker exec cve-2026-2005-pg-debug psql -U postgres -d lab -f /tmp/poc_big.sql
docker logs cve-2026-2005-pg-debug 2>&1 | grep "TRAP"

Limitações

  • Dependente de endereços: O exploit usa endereços de heap fixos específicos da imagem Docker postgres:17.7-bookworm. Builds/ambientes diferentes exigem recalibração de endereços (via GDB ou vazamento de informações).
  • Aquecimento necessário: Uma única chamada pgcrypto (SELECT digest('x','md5')) na mesma conexão estabiliza o layout do heap antes da consulta do exploit.
  • Script de gatilho: Requer um binário chamado \xd5\x01 no PATH. O Dockerfile pré-instala isso. A exploração no mundo real exigiria acesso de escrita prévio ou uma abordagem diferente com ROP/one-gadget.
  • Somente build de release: Builds de debug com --enable-cassert abortam na asserção antes da escrita na freelist.

Linha do Tempo

  • 2026-02-12: Vulnerabilidade divulgada pela Team Xint Code
  • 2026-02-13: Correção commitada (379695d)
  • 2026-02-20: Versões corrigidas lançadas (17.8, etc.)
  • 2026-05-05: Exploit RCE desenvolvido e comprovado em laboratório

Aviso Legal

Este exploit é fornecido apenas para pesquisa de segurança autorizada e fins educacionais. Use somente em ambientes de laboratório controlados com autorização explícita.

Baixar ferramenta