-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

Blind SQLi w WordPress Slimstat plugin

27 lutego 2015, 07:41 | Aktualności | 0 komentarzy

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.

statystyki WP Slimstat,  źródło: wordpress.org

statystyki WP Slimstat, źródło: wordpress.org

 

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)

kod WP-Slimstat, źródło: sucuri.net

kod WP-Slimstat, źródło: sucuri.net

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.

Kod podatny na SQLi, źródło: sucuri.net

Kod podatny na SQLi, źródło: sucuri.net

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

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz