Magento – dostępny jest exploit. Przygotujcie się na szybkie przejmowanie konta admin.

29 marca 2019, 21:20 | W biegu | komentarze 4
: zin o bezpieczeństwie - pobierz w pdf/epub/mobi.

Pisaliśmy niedawno ogólnie o nowo załatanej krytycznej luce w Magento. Przy okazji warto dodać kilka informacji o szczegółach problemu. W skrócie, za pomocą blind SQL injection można pobrać dowolną informację z bazy danych i nie wymaga to uwierzytelnienia. Dostępny jest nawet gotowy exploit, umożliwiający przejęcie konta zalogowanego administratora. Realizowane jest w nim takie zapytanie (czyli otrzymujemy ID sesji zalogowanego admina, nie ma nawet potrzeby łamania hasła):

Co ciekawe podatność występowała w funkcji, która teoretycznie ma na celu zabezpieczenie przed SQL injection. Problematyczne okazało się budowanie zapytania SQL w momencie jeśli użytkownik przesłał w parametrach pola from i to. Czyli np. realizował zapytanie o produkty, które mieszczą się w danym zakresie cen:

$db->prepareSqlCondition(‚price’, [
‚from’ => ‚100’
‚to’ => ‚1000’
]);
$query = „price >= ‚100’ AND price <= ‚1000’”;

Jak widać, powyższa funkcja buduje ładne (tj. bezpieczne) fragmenty zapytań SQL. Ale co się stanie jeśli w jednej z wartości umieszczę znak pytajnika (tak jak na przykładzie poniżej?)

$db->prepareSqlCondition(‚price’, [ ‚from’ => ‚x?’ ‚to’ => ‚ OR 1=1 — -‚ ]); -> $query = „price >= ‚x’ OR 1=1 — -” AND price <= ‚ OR 1=1 — -‚”

Uproszczając (dla jasności przekazu) całość jest realizowana w dwóch etapach.

Etap 1. obsługa operatora from. Po tym etapie mamy takie zapytanie:

price >= ‚x?’ AND price <= ‚?’

Etap 2. obsługa operatora to. Teraz wszystkie znaki zapytania zamienianie są na obłożone apostrofami wartości: OR 1=1 -- -
Teoretycznie powinniśmy mieć jeden znak zapytania (w drugiej części zapytania, operator to), ale przecież wstrzyknęliśmy specjalnie w wartości x?. Finalnie mamy taki fragment zapytania z ewidentnym SQL injection:

price >= ‚x’ OR 1=1 — -” AND price <= ‚ OR 1=1 — -‚

Informacja o exploicie pojawiła się już wielu, nawet względnie ‚mainstreamowych‚ mediach, warto więc załatać Magento ASAP.

–ms

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



Komentarze

  1. Tadek

    No dobra ale kto trzyma sesję w bazie danych? Chyba sklepy z pietruszką.
    No i jeszcze adres admina jest konfigurowalny.

    Odpowiedz

Odpowiedz