
CVE-2012-2122 - Bypass de Autenticação MySQL
Prova de Conceito (PoC) para CVE-2012-2122, uma vulnerabilidade crítica de bypass de autenticação que afeta servidores MySQL e MariaDB vulneráveis.
Aviso Legal
Este projeto destina-se apenas a fins educacionais, pesquisa de segurança e testes de penetração autorizados. Não utilize este software contra sistemas que você não possui ou para os quais não tenha permissão explícita para testar.
CVE-2012-2122 é uma vulnerabilidade de bypass de autenticação descoberta na lógica de verificação de senha do MySQL.
Devido a um bug de conversão/comparação de inteiros, a autenticação pode ser bem-sucedida incorretamente quando uma comparação de senha inválida é avaliada como igual sob certas condições.
Em vez de exigir conhecimento de uma senha válida, um atacante pode tentar repetidamente a autenticação usando senhas arbitrárias até que o bug de comparação seja acionado.
A probabilidade de sucesso é de aproximadamente:
Devido a esta probabilidade relativamente alta, ferramentas automatizadas geralmente conseguem contornar a autenticação em algumas centenas de tentativas de login.
| Métrica | Valor |
|---|---|
| CVE | CVE-2012-2122 |
| CVSS v2 | 7.5 (Alto) |
| Vetor de Ataque | Rede |
| Autenticação | Nenhum |
| Interação do Usuário | Nenhum |
| Impacto | Bypass de Autenticação |
A vulnerabilidade afeta builds do MySQL compilados com otimizações de compilador vulneráveis, incluindo versões como:
O problema afetou principalmente distribuições Linux cujo comportamento do compilador expôs o bug.
Nem toda instalação dessas versões é vulnerável.
Durante a verificação de senha, o MySQL compara internamente dois valores de hash usando a função memcmp().
Em circunstâncias normais:
memcmp(hash1, hash2)
retorna:
0 quando iguaisA vulnerabilidade surgiu porque o valor de retorno era armazenado em um inteiro com sinal e posteriormente convertido de uma forma que permitia que certos valores diferentes de zero fossem interpretados como sucesso na autenticação.
Lógica simplificada:
if (memcmp(hash1, hash2) == 0)
{
// Login bem-sucedido
}
Sob comportamento vulnerável do compilador, valores de retorno específicos de memcmp() poderiam satisfazer incorretamente a comparação.
Como resultado, senhas incorretas ocasionalmente autenticavam com sucesso.
Um atacante precisa apenas de:
Nenhum conhecimento de senha é necessário.
O atacante envia continuamente tentativas de login usando senhas aleatórias.
Eventualmente, uma autenticação é bem-sucedida devido ao bug de comparação.
Fluxo típico de ataque:
Tentativa #1
↓
Autenticação Falhou
Tentativa #57
↓
Autenticação Falhou
Tentativa #141
↓
Autenticação Falhou
Tentativa #237
↓
Autenticação Bem-sucedida
O sucesso médio ocorre aproximadamente uma vez a cada 256 tentativas.
A exploração bem-sucedida permite que um atacante:
Se credenciais administrativas forem alvo, o controle total do servidor de banco de dados pode ser obtido.
Indicadores incluem:
Revise os logs de autenticação do MySQL para atividade excessiva de login falho.
A mitigação recomendada é atualizar para uma versão corrigida.
Medidas defensivas adicionais incluem:
---
## Exemplo de Uso
```bash
python3 exploit.py -ip <target>
Exemplo:
python3 exploit.py -ip 192.168.1.100
Este repositório demonstra como um bug sutil de implementação na lógica de autenticação pode comprometer completamente a verificação de senha.
Embora a vulnerabilidade tenha mais de uma década, ela continua sendo um importante estudo de caso em: