Post Falha no MySQL permite acesso mesmo com senha incorreta
Uma falha de segurança recém-descoberta no MySQL permite que usuários mal-intencionados obtenham acesso a um servidor de banco de dados, inclusive como root, mesmo utilizando uma senha inválida. O problema afeta servidores com várias distribuições Linux e a vulnerabilidade também pode ser explorada no MariaDB, uma variante desenvolvida pela comunidade.
Além de armazenar apenas o hash das senhas dos usuários, o MySQL também adiciona uma sequência de caracteres aleatórios para dificultar ataques de dicionário ou por força bruta. A senha que o usuário digitou para se conectar ao banco é criptografada e então comparada com o código secreto armazenado no banco de dados. Em determinadas situações, a senha digitada e o valor esperado são considerados iguais mesmo quando não são, permitindo o acesso.
mysql
Com a falha na autenticação, qualquer pessoa que saiba algum nome de usuário registrado no servidor pode obter acesso, inclusive como root, com privilégios de exclusão dos bancos de dados. A probabilidade do acesso ser concedido sem autorização é de uma entre 256 tentativas, uma porcentagem relativamente baixa, graças ao sistema de caracteres aleatórios do MySQL. O problema é que centenas de tentativas de acesso podem ser feitas numa fração de segundo com um código simples em Shell Script, então o bug pode trazer grandes dores de cabeça para administradores de sistema.
A vulnerabilidade está presente nas versões 5.1.61, 5.2.11, 5.3.5, 5.5.22 e anteriores do MySQL e do MariaDB. Servidores de 64 bits com as distribuições Ubuntu, Arch Linux, openSUSE 12.1 e Fedora 16 contêm versões vulneráveis. A falha de segurança já foi corrigida em versões mais novas. Um desenvolvedor da Accuvant Labs desenvolveu um pequeno script para testar se o seu servidor é vulnerável, disponível a seguir…
C / C++ //——————————————————\\
/*
* CVE-2012-2122 checker
*
* You may get differing results with/without -m32
*
* Joshua J. Drake
*/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int one, two, ret;
time_t start = time(0)
time_t now;
srand(getpid()*start);
while (1) {
one = rand();
two = rand();
ret = memcmp(&one, &two, sizeof(int));
if (ret < -128 || ret > 127)
break;
time(&now);
if (now - start > 10) {
printf("Not triggered in 10 seconds, *probably* not vulnerable..\n");
return 1;
}
}
printf("Vulnerable! memcmp returned: %d\n", ret);
return 0;
}
Reportar ao moderador Registrado