11.06.2012 | 06:46

Adam Haertle

Błąd w MySQL umożliwia logowanie bez hasła – 0day na roota

Rzadko trafiają się błędy aż tak kuriozalne, jak ten. Okazuje się, że ze względu na możliwy błąd w porównaniu wartości dwóch zmiennych w procesie logowania, baza może uznać losowe hasło za prawidłowe i przydzielić dostęp do dowolnego konta – w tym roota.

Zanim jednak pobiegniecie hakować NASA, błąd ma pewne ograniczenia – nie wszystkie instalacje są na niego podatne. Ale może po kolei.

Gdzie jest błąd

Sergei Golubczik, odpowiedzialny za bezpieczeństwo MariaDB,  odkrył ciekawe zachowanie zarówno swojej bazy, jak i MySQL. W momencie logowania baza hashuje hasło użytkownika po czym dodaje losowy ciąg i tworzy z niego token, który porównywany jest z wartością oczekiwaną w oparciu o informacje przechowywane w bazie. Ze względu na specyficzny błąd w kodzie, może się okazać, że mimo iż funkcja memcmp() porównująca obie wartości zwróci wartość różną od zera, to baza uzna, że hasło było prawidłowe i pozwoli na dostęp użytkownikowi. Ze względu na losowe ciągi stosowane w procedurze, prawdopodobieństwo trafienia w błędną odpowiedź wynosi 1/256.

Aby wykonać udane połączenie potrzeba w najgorszym przypadku ok. 300 prób i znajomości istniejącego loginu użytkownika. Z oboma elementami nie powinno być problemu – 300 prób połączenia zajmuje ok. sekundy, a w większości przypadków użytkownik root istnieje w bazie.

Zastosowanie błędu w praktyce (źródło: HD Moore)

Które wersje są podatne

Wg Golubczika podatne mogą być wersje MySQL do 5.1.61, 5.2.11, 5.3.5 oraz 5.5.22. Nie są podatne wersje od 5.1.63, 5.5.24, 5.6.6. Ale sam numer wersji nie decyduje o wystąpieniu podatności – wszystko zależy od tego, gdzie i jak została skompilowana wersja. Aby błąd wystąpił, funkcja memcmp() musi zwracać liczby całkowite z przedziału (-128 … 127). Wg Golubczika binaria dystrybuowane przez MySQL są bezpieczne, tak samo jak memcp z gcc i to z BSD. Podatne na błąd jest na przykład memcmp z linuxowego glibc sse-optimized. Podobno błąd dotyczy też 64bitowych Ubuntu/Debiana.

Tutaj znajduje się skrypt, z pomocą którego możecie przetestować swojego memcmp (i podać wyniki w komentarzach). Pojawił się także ciekawy opis problemu oraz moduł Metasploita.

Powrót

Komentarze

  • 2012.06.11 22:52 piotr

    ubuntu 12.04 64-bit podatne :)

    Odpowiedz
    • 2012.09.10 10:07 psyś

      12.04 32-bit niepodatne, stan na dziś.. updating your system makes sense..

      Odpowiedz
  • 2013.04.06 21:53 Marek

    Czy faktycznie w tych wersjach można zalogować się do mysql znając tylko nazwę użytkownika ? rozumiem, że przez phpmyadmin również ?

    Odpowiedz
  • 2013.10.04 11:42 mbr

    Slack 13.37, glibc 1.2.10, mysql Ver 14.14 Distrib 5.1.56,
    Not triggered in 10 seconds, *probably* not vulnerable..

    Odpowiedz

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Błąd w MySQL umożliwia logowanie bez hasła – 0day na roota

Komentarze