MySQL permite acesso mesmo com passwords erradas

86 Comentários

O MySQL é provavelmente a base de dados mais usada no mundo, dando suporte aos mais diversos serviços. Por norma, tudo o que é credenciais de utilizadores, configurações e outros dados sensíveis, ficam armazenamos nas base de dados associadas aos serviços e espera-se que o nível de segurança seja inquestionável.

No entanto, soube-se entretanto que especialista de segurança descobriram graves vulnerabilidades no MySQL e MariaDB (variante do MYSQL), que permite a um atacante aceder a um servidor MySQL e entrar até com uma password errada!

mysql_00

De acordo com Sergei Golubchik, coordenador da área de segurança do projecto MariaDB, esta vulnerabilidade está presente nas versões 5.1.61, 5.2.11, 5.3.5, 5.5.22 e inferiores, e afecta várias distribuições Linux. (Ubuntu, openSUSE 12.1, Arch Linux, Fedora 16, entre outros). Segundo Golubchik, esta vulnerabilidade pode também ser explorada no MariaDB.

Mas o que causa tal bug?

Numa pequena informação publicada já online (ver aqui), Golubchik refere que o MySQL guarda apenas o hash das passwords dos utilizadores, adicionando também uma sequência de caracteres aleatórios que dificultam outro tipo de ataques (ex. força bruta ou ataques dicionário). Na prática o que acontece é que, em determinadas situações, no processo de comparação entre a password introduzida pelo utilizador e a password armazenada, a validação dá um OK, mesmo as passwords não sendo iguais.

“When a user connects to MariaDB/MySQL, a token (SHA over a password and a random scramble string) is calculated and compared with the expected value. Because of incorrect casting, it might’ve happened that the token and the expected value were considered equal, even if the memcmp() returned a non-zero value”

Assim sendo, o atacante apenas necessita de saber o nome dos utilizadores registados para acesso ao MySQL (incluindo o utilizador root) e tentar assim o acesso à base de dados.

Golubchik fez também saber que a probabilidade de acesso com sucesso é de 1 em 256 tentativas, isto porque, como referido, são adicionados um conjunto de caracteres aleatórios que dificultam outro tipo de ataques.

Uma vez detectada a vulnerabilidade que foi registada com o código CVE-2012-2122, estão já disponíveis os patchs para MySQL (aqui) e MariaDB (aqui), que permitem minimizar os riscos de segurança.

Joshua Drake, um programador da Accuvant Labs, disponibilizou também um pequeno script que permite verificar se os nossos servidores estão vulneráveis. Esse script pode ser descarregado aqui.

Download: Patch CVE-2012-2122 MySQL | MariaDB
Download: Script para verificar se o seu sistema é vulnerável (aqui)

Partilhar:
Tags:

Comentários

86

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Portugal 2-0 Dinamarca
    Portugal 2-0 Dinamarca

    De que forma é que isto pode afectar e comprometer a segurança de um utilizador comum de uma distro Linux?

    1. Avatar de Pedro Pinto

      Para um utilizador vulgar…nao é grave. Para um linux em produção, pode ser gravíssimo!

  2. Avatar de Miguel Ribeiro
    Miguel Ribeiro

    e por isto (e por outras) q nao se usa mysql em sistema importantes

    1. Avatar de xoxota
      xoxota

      Não? Então usa-se o quê?

      1. Avatar de davidslv

        PostgreSQL, Oracle, SQL Server…

        1. Avatar de xoxota
          xoxota

          Ah..são mais seguros. Pois tá bem

          1. Avatar de davidslv

            Não disse que concordava, pensei que estivesses à procura de outras bases de dados, e como tal dei exemplos de outras.

          2. Avatar de Alexandre Amaral
            Alexandre Amaral

            Falhas existem em todos, agora que uma bd Oracle ou Sql Server não é a mesma coisa que MySql isso não é com toda a certeza. Alem de acabarem por ter públicos alvos diferentes e tudo.

          3. Avatar de Carlos
            Carlos

            Hombre, tás parvo?

            Sabes quantas falhas de segurança foram descobertas no SQL Server 2008 desde que foi lançado?

            Que tal nenhuma!

            (As 2 falhas que estão lá no site da Secunia não são do SQL Server 2008, são de componentes auxiliares que o SQL Server 2008 instala mas não precisa para funcionar)

          4. Avatar de Muchacho
            Muchacho

            Nenhuma?? Então queres dizer que os Service Packs que lançam para o SQL Server apenas metem os botões e menus bonitos??

            bem e que tal… recuar mais um pouco para as versões anteriores?
            FORAM detectadas várias falhas.. depois eles descontinuam os produtos, e passam para nova versão… estamos agora a migrar para o 2010.. 2012 e os anteriores deixam de ser “comparticipados” … já para não falar das licenças caríssimas.

            Eu recomendo em ambiente de produção MySql… agora é preciso é saber mexer num servidor e proteger o mesmo para vários (e não digo todos) os tipos de ataques.

      2. Avatar de Jose
        Jose

        Perhaps Oracle

    2. Avatar de Nuno
      Nuno

      Então e quando surgirem falhas/bugs nos sistemas concorrentes? Também se deixa de usar?! Mas que resposta mais idiota. Falhas, bugs, existem em todos os sistemas. O mais importante é resolver o mais rapidamente possível.

      1. Avatar de André
        André

        Do not feed the trolls…

        Provavelmente a personagem nem sabe o que é uma base de dados…

        1. Avatar de Jacinto
          Jacinto

          O Facebook PHP também 🙂

    3. Avatar de Christian Göllner
      Christian Göllner

      Não é verdade. O Facebook MySQL se não estou em erro!

      1. Avatar de Christian Göllner
        Christian Göllner

        *usa MySQL

        1. Avatar de Rui Marques

          100% correcto sobre o FB. As falhas acontecem em qualquer sistema e claro a gravidade depende de como se configura o servidor (acesso root, restrições IP, etc). O mesmo se aplica aos outros grandes players.

      2. Avatar de Nops!
        Nops!

        Todos os “mais mediáticos” à muito que abandonaram o MySQL em favor de sistemas do tipo NoSQL.
        Google it!

        1. Avatar de SatoMew
          SatoMew

          Ou melhor, “DuckDuckGo” it! 😛

    4. Avatar de GreenTuxer

      Ou então fazes o que se deve realmente fazer, que é manter uma infraestrutura de redes muito segura e bem configurada e optimizada. Aí deixas de te preocupar com este tipo de falhas.

    5. Avatar de Jose
      Jose

      Não digam barbaridades, quantas mais falhas se descobrir melhor, mais falhas se corrige, é como o Windows, quer queiram, quer não, o Windows é o sistema operativo mais seguro do mundo por enquanto.

      1. Avatar de GreenTuxer

        Ena tanta ignorância numa só pessoa…

        1. Avatar de Carlos
          Carlos

          não é o mais seguro mas percebe-se o que ele queria dizer….. devido a tantos ataques sofridos pelo windows ao longo dos anos ele amadureceu para o que é agora um sistema bastante seguro… pelo menos bem mais do que o mac os

      2. Avatar de jpng81
        jpng81

        @Jose Estragas-te tudo quando disseste windows aí pelo meio. Se tivesses dito Linux, não te tinha calhado tão mal, mas mesmo assim linux não é perfeito.

        1. Avatar de Serva
          Serva

          Bingo

          Serva

      3. Avatar de rascas
        rascas

        Isso só pode ser uma piada…

      4. Avatar de hal
        hal

        É por isso que é habitual em mainframes usar todo o tipo de sistemas que não o windows! Ou por exemplo…. que tal a bolsa de Londres que mandou tirar tudo o que era windows!

        Tem Juízo…
        Se disseres que o Windows é dos melhores sistemas para a jogatana aí estamos todos de acordo!

        1. Avatar de Jorge Santos
          Jorge Santos

          Ai mandou? Quando?
          Olha que recentemente fizeram um novo acordo… se não sabes… google it. Isto de falar sem bases concretas já chateia. Deixa de ser fanático.
          E olha, em mainframes, nem linux nem unix, se não sabes… google it…

          1. Avatar de Rui Moreira

            Que eu saiba pelo menos nos mainframes da IBM podes usar linux

            Como podes ver aqui :
            http://www-03.ibm.com/linux/
            a ibm certifica o Linux para TODOS os sistemas.

            E aqui podes ver que SIM o linux corre nos mainframes da IBM pelo menos

            http://www-03.ibm.com/systems/z/os/linux/

            Quanto a bolsa de londres a informação que se obtem googlando confirma o que o colega disse , migraram para Linux

            Este é apenas um exemplo :

            http://www.information-age.com/channels/information-management/news/1602213/london-stock-exchange-migrates-to-linux-platform.thtml

          2. Avatar de Rui Moreira

            A resposta ao Quando …
            esta por ex aqui http://www.computerweekly.com/feature/London-Stock-Exchange-completes-15-month-system-replacement

            14 February 2011
            e sim o sistema é baseado em linux

            ou aqui :
            http://www.zdnet.com/blog/open-source/the-london-stock-exchange-moves-to-novell-linux/8285

            Gostei da parte em que é dito :

            “The LSE is far from the only one stock exchange to switch to Linux. More and more stock exchanges are realizing that when you really need speed, security, and stability, Linux is the operating system you need”

          3. Avatar de Jorge Santos
            Jorge Santos

            Tens razão Rui Moreira, errei, estava desactualizado na informação da transição da bolsa. Confundi o novell com a microsoft.
            Nos sistemas operativos não estava a dizer que não podiam correr linux, estava sim a falar dos sistemas z da ibm, por exemplo: o z/OS.
            Cumps.

          4. Avatar de Pedro Pinto

            É por isso que eu adoro este espaço…trocam-se ideias, aumenta-se o know how e aprendemos uns com os outros. Assim é que devia ser sempre

      5. Avatar de Rui Moreira

        Este senhor não deve saber que existe mysql para windows.

      6. Avatar de Jesus Cristo naweb
        Jesus Cristo naweb

        Perdoai-lhes senhor, eles não sabem o que dizem!!

  3. Avatar de Pedro A.
    Pedro A.

    como é que se usa o script?

  4. Avatar de davidslv

    Esse script não está completo, faltava o include time.h

    http://pastie.org/4073708

    1. Avatar de donotreboot.com

      Oi David,

      Obg pelo update o script

      tambem nao sei como executar o script, podes ajudar sff?
      a mim parece-me ser script em C.. mas como é que executo no servidor que está a correr no Ubunto ?

      Obg

      1. Avatar de Guilherme de Sousa
        Guilherme de Sousa

        gcc -o younameit code.c

        younameit – o nome que queres dar ao bin
        code.c – a source do script neste caso

        1. Avatar de donotreboot.com

          Oi Guilherme,

          muito obrigado, correu na perfeiçao 😉
          felizmente os meus seridores nao estao sugestos a esse bug =) uuufaaa

          me@donotreboot:/home/me/script# gcc -o test-mysql.bin test-mysql.c
          me@donotreboot:/home/me/script# ./test-mysql.bin
          Not triggered in 10 seconds, *probably* not vulnerable..
          me@donotreboot:/home/me/script# 
          
          1. Avatar de donotreboot.com

            bem… “*probably* not vulnerable..”

    2. Avatar de Filipe YaBa Polido
      Filipe YaBa Polido

      Também se pode testar rapidamente com:

      for i in `seq 1 1000`; do mysql -u root –password=qqtreta -h 127.0.0.1 2>/dev/null; done

    3. Avatar de Serva
      Serva

      Thanks

      Serva

  5. Avatar de quim
    quim

    e como se usa, por exemplo num site com joombla ?

    1. Avatar de Anónimo Cobarde
      Anónimo Cobarde

      não é preciso, o joomla é um buraco muito maior. primeiro é preciso apagar o joomla e meter algo decente. tipo drupal. depois sim, corrige-se o problema do mysql

      1. Avatar de Carlos
        Carlos

        lololol

        ou wordpress com os plugins correctos…

  6. Avatar de Nuno Gonçalves
    Nuno Gonçalves

    Bem será que as nossas contas do facebook estão a salvo?

    1. Avatar de Pedro A.
      Pedro A.

      Nada no facebook está a salvo, desengane-se que assim pensar…

      1. Avatar de JR
      2. Avatar de hummmm
        hummmm

        Nada na internet está a salvo , nem na realidade.

    2. Avatar de Ni
      Ni

      Se a segurança do facebook depende-se só da segurança da sua base de dados, todos os dias era hackeado!

    3. Avatar de Anónimo Cobarde
      Anónimo Cobarde

      se estão no facebook, não estão a salvo, visto já estarem nas mãos do facebook. 😉

  7. Avatar de Hal
    Hal

    A notícia apenas dada desta forma, soa-me a pouco. Mas, com milhares de programadores, tenho a certeza que já há ou houve correcções de falhas entre outros problemas.

    Aliás… é mais habitual a descoberta de falhas em sistemas open-source do que em sistemas proprietários ao contrário do que muita malta pensa. E, obviamente é despoletada uma solução adequada.

    1. Avatar de Serva
      Serva

      Sem dúvida , bom comentário @Hal .

      Cumprimentos

      Serva

  8. Avatar de maneu
    maneu

    Eu estou a salvo dessa vulnerabilidade, estou a usar InnoDB. :-p

  9. Avatar de GreenTuxer

    Obrigado por este artigo! Não sabia mesmo desta falha e pelo que vi, tenho alguns servidores vulneráveis, vou ver essa questão 🙂

    Aproveito para fazer uma questão relacionada com o assunto. Que fontes vocês utilizam para informações sobre vulnerabilidades deste tipo? Se possível, apenas relacionadas com OpenSource, Linux, etc.

    Abraço e obrigado.

    1. Avatar de donotreboot.com

      Oi
      umas das que uso para este tipo de testes é o OpenVAS

    2. Avatar de César

      Os meus sistemas estão uptodate, como tal isto já é passado!

  10. Avatar de Francisco
    Francisco

    Não é preciso ser-se muito inteligente para perceber que as funções de HASH, tanto MD5, como SHA-1, etc, não são perfeitas. Existe uma infinidade de combinações. Se o algoritmo não for muito bom (não há algoritmos perfeitos), existem várias combinações que originam a mesma HASH. Uma das soluções seria guardar a própria password, com uns caracteres pelo meio, também. Deste modo comparar-se-ia a HASH e a password devidamente tratada.
    Quem fala no MYSQL, fala também de sites pessoais/empresariais desenvolvidos por pessoas que não estuda bem todas as decisões antes de os realizar.

    1. Avatar de Carlos
      Carlos

      O problema não é o algoritmo de hash não ser bom, o problema é que quando é feita a validação do retorno da função memcmp().

      Até porque, estatisticamente, a probabilidade de duas strings pequenas gerarem a mesma hash SHA-1 é muito menor que 1 em 256. Ainda para mais se se considerar que o MySQL usa sal nas hash (e é por isso que a probabilidade de se “acertar” na senha é 1 em 256, se não fosse isso era 1 em 1)

      Ou pelo menos é isso que o sr. Golubchik diz…

    2. Avatar de Serva
      Serva

      Concordo , eu fui um deles no fim de semana passado , mas nada de grave aconteceu entretanto , vou é sacar já as patches que o Pedro Pinto teve a amabilidade de colocar as hiperligações , no entanto o que li é que estas Patches podem resolver , não que resolvem .

      Abraço a todos

      Serva

  11. Avatar de jesus
    jesus

    Como se pode verificar esta vulnerabilidade no MAMP Pro?
    Grato.

    1. Avatar de César

      Primeiro, não deverás estar preocupado com o mamp pro, porque isso é para uso de desenvolvimento nunca deverá ser para uso de produção. Se estiveres a usar isso para produção só te posso dizer “Shame on you!”

      1. Avatar de jesus
        jesus

        sim só uso em testes. Shame one me! por não me ter lembrado disso. A cabeça não dá para tuso. Obrigado César.

        1. Avatar de jesus
          jesus

          onde se lê «tuso» deve ler-se «tudo» nem para escrever hoje estou bom!

  12. Avatar de sigsegv
    sigsegv

    Cheira-me a grande aldrabice. Só dizem que pode haver colisões na hash que é gerada mas isso não quer dizer que se pode aceder com quelquer password. As colisões existem mas quem descobre a password errada para entrar também descobre a correcta! E não digam mal do MySQL que a Oracle é a mesma coisa ou pior. Ainda me recordo de um bug na 10gR1 que se alguem se tentasse conectar com um cliente OCI8 mandava a instancia abaixo mesmo com a password errada! Se isso não é grave….

  13. Avatar de José Oliveira
    José Oliveira

    Oi?!…xiii :S que mau… :S
    Então estamos feitos?! :S

  14. Avatar de Andros
    Andros

    Pelos vistos quem tiver o Arch Linux actualizado também não será afectado por este problema:

    $ mysql –version
    mysql Ver 14.14 Distrib 5.5.24, for Linux (i686) using readline 5.1

    $ ./a.out
    Not triggered in 10 seconds, *probably* not vulnerable..

  15. Avatar de J MD
    J MD

    Como se usa esse script para verificar a vunerabilidade do mysql em Windows?

    1. Avatar de hal
      hal

      Primeiro experimenta na consola.. Format c:
      Depois pôe o Linux 🙂

  16. Avatar de jpng81
    jpng81

    Por um lado isto é bom, quer dizer que o problema esta detectado e que vai ser corrigido.
    O que não nos mata torna-nos mais fortes.

  17. Avatar de InteRessadU
    InteRessadU

    Hmmm, a parte mais técnica do artigo está mal explicada… Da primeira vez q li o artigo não percebi a falha. Depois de ler o original (em inglês) percebi.
    No parágrafo explicativo é usado o termo password de forma errada. Não são as passwords q são comparadas mas sim, como o autor diz em inglês, “token and the expected value”.

    Pronto se calhar tmb nao me expliquei mto bem xP e percebo q queiram simplificar as coisas… Só queria dar o meu input 😉

  18. Avatar de Carlos
    Carlos

    A pergunta óbvia é…

    Porque é que alguém tem um servidor com o MySql (ou qualquer outro) exposto na Internet?

    Não duvido que haja razões válidas para isso, mas quais?

    1. Avatar de Viperz0r

      Nem sempre o perigo vem da internet… um utilizador de uma rede local pode ganhar acesso ao servidor mysql.

      Talvez seja possível até que esta técnica funcione também com um simples script PHP.

    2. Avatar de Filipe YaBa Polido
      Filipe YaBa Polido

      +1
      ainda pior se for na porta default 😐

      1. Avatar de Muchacho
        Muchacho

        Ai quer dizer que um SQL Server é mais robusto e seguro é, ou não será mais fácil ainda penetrar estes serviços? A resposta é simples… SE ESTÃO NA NET estão inseguros, cabe ao administrador assegurar a proteção e manutenção do servidor.

        Nada como verificações extra no servidor para autenticação, para por exemplo banir o utilizador durante X tempo depois de 3 tentativas falhadas em qualquer serviço.
        Isto que sirva de lição para os que usam a cloud para armazenar informação sem saber o que por lá se passa.

  19. Avatar de Nuno Gonçalves
    Nuno Gonçalves

    Facebook?? Hello 😛

  20. Avatar de Muchacho
    Muchacho

    apt-get update

    isto faz milagres e corrige os vossos servidores

    1. Avatar de GreenTuxer

      Não sabes nada do mercado enterprise, pois não?
      Tens noção da asneira que acabaste de dizer?

      Updates em servidores faz-se apenas quando há bugs ou correcções ou features necessárias nas novas actualizações.

      Em caso algum se faz update ou upgrade ao sistema operativo inteiro. É esperar que tudo o que foi instalado/compilado comece a falhar…

  21. Avatar de Buganet
    Buganet

    Boas
    Percsava de uma ajuda,tenho um servidor com o CentOS 6.2 que tem o MySQL version 5.1.61 e gostara de atualizar para este e nao estou a conceguir!

    Algem da umas dicas?
    Agradecido

  22. Avatar de Rui Moreira

    Ja para não dizer que qualquer administrador que se preze , vai fazer das 3 uma :

    1 – colocar o mysql a correr agarrado ao localhost
    2 – restringir o acesso por user/IP
    3 – Não export a porta do mysql para “fora”

    Mais sobre o assunto em :

    https://community.rapid7.com/community/metasploit/blog/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql

  23. Avatar de ulaikamor
    ulaikamor

    Bom, este artigo não está bem explicado.

    Praticamente todos os sistemas, pelo menos os que tenho conhecimento, guardam apenas um hash da password de um utilizador, nunca sendo o hash unívoco. Aliás, só podia ser desta forma, senão um administrador do sistema poderia simplesmente ver as passwords de toda a gente…

    Logo, o problema de passwords diferentes gerarem o mesmo hash está presente na vasta maioria dos sistemas. No entanto, isto não é um problema em si dado que a probabilidade de isso acontecer é uma em um trilião ou mais (valor apenas demonstrativo de um número muito grande)…

    O problema neste bug tem a ver mais com “Because of incorrect casting, it might’ve happened that the token and the expected value were considered equal…”, o que faz com que a probabilidade da geração do mesmo hash com a password errada baixe de um em um trilião para 1 em 256, ficando este último valor abaixo do número de tentativas de acesso que o mySQL permite até bloquear o acesso, que é 300.

    E é aqui que está o problema…

    1. Avatar de Pedro Pinto

      Boa explicação mas que de facto, por consequência, vai bater naquilo que foi referido.

  24. Avatar de João Lopes

    Olha, na minha maquina diz:
    “Vulnerable! memcmp returned: -189”
    🙁