Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Blind SQLi w WordPress Slimstat plugin
Marc-Alexandre Montpas – researcher związany z Sucuri opublikował opis podatności bardzo popularnego plugina do Worpressa – Slimstat. Wtyczka, którą pobrało już ponad milion użytkowników, służy do generowania statystyk i analiz aktywności użytkowników na portalu. Jednakże odkryty bug może atakującemu umożliwić wstrzyknięcie zapytania SQL i pobranie dowolnej informacji z bazy WordPressa.
Podatność
Odkryta podatność dotyczy słabego kryptograficznie klucza, który służy do podpisywania danych przesłanych do i od użytkownika. Analizując kod Slimstat odkryto, że klucz secret jest obliczany w czasie inicjalizacji wtyczki za pomocą funkcji skrótu md5 z daty instalacji pluginu.
secret = md5(time_of_init)
Podpisywanie danych za pomocą plugina polega na obliczeniu kolejnej funkcji skrótu: md5(dane + secret). Za pomocą metody brute-force można w prosty sposób ustalić jedyną niewiadomą w tym równaniu, czyli moment czasowy instalacji plugina. Autor podpowiada sprytny sposób wykorzystania portalu Internet Archive, do zawężenia dat, które należy sprawdzić w ramach metody siłowego odgadywania.
Blind SQLi
Gdy znana będzie już pierwotna wartość niezbędna do wyliczania klucza, atakujący może przystąpić do modyfikacji przesyłanych do Slimstat danych. Niestety po złamaniu bariery kryptograficznej kod Slimstat okazuje się podatny na wstrzyknięcie zapytania SQL do bazy WordPressa.
Marc-Alexandre Montpas wskazuje, że gdy atakujący ma kontrolę nad zmienną tablicową $_data to podstawiając do niej wartość array(“1=sleep(100)–“=>”1″) można sprawdzić, czy WordPress jest podatny na technikę Blind SQL injection.
Aktualizacja
Obecnie poprawiony kod wygląda tak:
generowanie klucza
'secret' => wp_hash(uniqid(time(), true)),
zapytanie SQL do bazy
$select_sql = "SELECT $_id_column FROM $_table WHERE `".self::$wpdb->prepare (implode('` = %s AND `', array_keys($data)).'` = %s', $data);
Warto zaktualizować plugin do ostatniej wersji 3.9.6, w której usunięto tę lukę.
–j23