W 2021 roku zespół Sequndant przeanalizował kilka popularnych mechanizmów polskiego e-commerce, identyfikując serię ciekawych podatności. Jedną z nich prezentujemy poniżej.
Zakupy w internecie związane są zwykle z przekierowaniem na stronę danego operatora płatności. Takie przekierowanie może wyglądać tak:

Tajemniczy parametr na końcu to suma kontrolna, dzięki której zapewniona jest integralność transakcji – te same dane wychodzą ze sklepu, docierają do operatora płatności i wracają znów do sklepu w „zwrotce” po ukończonej transakcji.
Jak budowana jest taka suma kontrolna? Czasem jest to po prostu hash (np. SHA-1) ze sklejonych ze sobą parametrów i tajnego klucza, np.:

czyli w praktyce:

Taka suma kontrolna może być niestety naruszona przez przesuwanie danych pomiędzy poszczególnymi parametrami. Na przykład, suma kontrolna jest taka sama dla:
123456 lukasz@sequndant.com 1001.00 Kowalski+Jan
jak i
123456 lukasz@sequndant.com100 1.00 Kowalski+Jan
Albo:
123456 lukasz@sequndant.com 1000.00 e-3Nowak+Agnieszka
jak i:
123456 lukasz@sequndant.com 1000.00e-3 Nowak+Agnieszka
Oznacza to, że jeśli masz na nazwisko powiedzmy e-3Nowak (masz, prawda? 😉 ), możesz zrobić zakupy 1000 razy taniej.
Podobny, nieco trudniejszy w realizacji atak można wykonać także, gdy interesujące nas parametry nie sąsiadują ze sobą.
W praktyce realizacja zakupów za 0.01 PLN wymaga, by sklep nie weryfikował w pełni tzw. „zwrotki”, m. in. kwoty transakcji, która została faktycznie wykonana. Ponieważ taka sytuacja się zdarza, operatorzy płatności korzystający z podatnych algorytmów sum kontrolnych wprowadzili w tym roku – po zgłoszeniu od Sequndant – odpowiednie poprawki.
Jak może przed podobnymi atakami bronić się sklep internetowy:
- zawsze weryfikuj parametry zwrotki od operatora płatności, w tym kwotę
- weryfikuj adres IP operatora płatności w zwrotce
- aktualizuj kod integracji zgodnie z wymaganiami operatora płatności
- wymagaj weryfikacji sumy kontrolnej, również w zwrotce
Jeśli tworzysz lub testujesz podobne sumy kontrolne, zwróć też uwagę na ataki hash length extension, niepodrabialność separatorów oraz długość klucza (minimum 16 znaków, zalecany jak najdłuższy).
Musisz się zalogować aby dodać komentarz.