Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Magento – dostępny jest exploit. Przygotujcie się na szybkie przejmowanie konta admin.
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):
session_timeout = 900 query = ( 'SELECT %%s FROM admin_user_session ' 'WHERE TIMESTAMPDIFF(SECOND, updated_at, NOW()) BETWEEN 0 AND %d ' 'ORDER BY created_at DESC, updated_at DESC LIMIT 1' ) % session_timeout
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:
'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?)
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:
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:
Informacja o exploicie pojawiła się już wielu, nawet względnie ’mainstreamowych’ mediach, warto więc załatać Magento ASAP.
–ms
No dobra ale kto trzyma sesję w bazie danych? Chyba sklepy z pietruszką.
No i jeszcze adres admina jest konfigurowalny.
tak samo jak nikt nie trzyma haseł w plaintext ;) https://sekurak.pl/facebook-przechowywal-hasla-setek-milionow-uzytkownikow-w-plaintext/
Kto trzyma sesje w bazie danych? A chociazby Django i dziesiatki innych frameworkow.
Tadek trzyma sesje w głowie :D Adres admina nie ma tu znaczenia.