Podatności, o których mowa w tytule, to: CVE-2023-33871, CVE-2023-38257, CVE-2023-35763, CVE-2023-35189. Zostały one odkryte przez zespół Synack Red Team, (SRT) w oprogramowaniu ScrutisWeb już na początku roku, ale producent (Firma Iagona) wydał poprawki dopiero w lipcu razem z wersją 2.1.38 swojej aplikacji.
Oprogramowanie ScrutisWeb to „bezpieczne” rozwiązanie do monitorowania flot bankomatów, przeznaczone zarówno dla banków, jak i producentów detalicznych.
ScrutisWeb jest dostępny z dowolnej przeglądarki i pomaga organizacjom na całym świecie monitorować bankomaty oraz skracać czas reakcji w przypadku pojawienia się problemów. Floty bankomatów mogą obejmować wrażliwy sprzęt taki jak bankomaty, wpłatomaty, a także terminale płatnicze wpięte do sieci.
Software ten posiada między innymi następujące możliwości:
- ponowne uruchomienie bądź wyłączenie terminala lub całej floty,
- wyszukiwanie informacji o usługach bankowych,
- monitorowanie czytnika kart bankowych w bankomatach,
- wysyłanie i odbieranie plików do urządzeń,
- zdalna modyfikacja danych w bankomatach.
Podczas wstępnego rekonesansu zespół SRT zauważył, iż serwer WWW aplikacji wysyła do odwiedzających wyjątkowo duży plik JavaScript – o wielkości 23 MB. Odkryto w nim funkcję, która umożliwia klientowi pobieranie pełnych ścieżek z webroot serwera:
Co więcej, dodanie nazwy folderu „/” powoduje, iż ScrutisWeb kompresuje cały webroot i wysyła go do przeglądarki jako plik do pobrania. Podczas sprawdzania pliku Download.aspx odkryto, iż wywołuje on bibliotekę „Scrutis.Front.dll”, która wydaje się obsługiwać większość funkcji użytkownika.
CVE-2023-33871: Absolute Path Traversal
Plik „Download.aspx” przyjmuje parametr „file” lub „folder”. Widzieliśmy już, do czego służy „folder”, ale druga część jest dużo bardziej intersująca – ciąg obsługujący pobieranie poszczególnych plików:
Ten fragment kodu sprawdza zmienną „path1”, która jest przekazywana do metody jako parametr „file” adresu URL. jeżeli parametr nie zawiera dwukropka, serwer WWW zwróci plik w odniesieniu do webroota, np. „https://example.com/Download.aspx?file=thisfile.txt” pobierze plik znajdujący się pod adresem „https://example.com/thisfile.txt”. Jednak z dwukropkiem serwer WWW zwróci plik w odniesieniu do systemu, na przykład: „https://www.example.com/Download.aspx?file=c:\file.txt” pobierze plik znajdujący się na serwerze pod adresem „c:\file.txt”.
Tym sposobem można pobrać konfiguracje, logi i bazy danych z serwera : )
CVE-2023-35189: Remote Code Execution
Dalsze badanie biblioteki Scrutis.Front.dll wykazało metodę AddFile(). Metoda ta bez problemu zaakceptowała wieloczęściowe żądanie POST z formularza i zapisała przesłany plik w katalogu internetowym „/Files/telechar/”.
Oznacza to, iż nieuwierzytelniony użytkownik może przesłać dowolny plik, a następnie wyświetlić go ponownie w przeglądarce internetowej. Jednym z krytycznych problemów jest to, iż katalog, w którym znajdował się przesłany plik, został skonfigurowany tak, aby umożliwić interpretację i wykonanie przesłanych skryptów. Mamy więc możliwość wstrzykiwania poleceń.
Normalnie można by oczekiwać, iż RCE będzie zwieńczeniem łańcucha exploitów. W takim przypadku jeszcze bardziej szkodliwa wartość mogłaby zostać osiągnięta poprzez wykorzystanie pozostałych luk w celu uzyskania dostępu użytkownika do kontrolera bankomatu. Każde z podatnych na ataki wywołań można znaleźć w Scrutis.Front.dll i wykorzystać bez uwierzytelnienia.
CVE-2023-38257: Insecure Direct Object Reference
Odkryto również, iż prototyp metody GetUserDetails przyjmuje pojedynczą liczbę całkowitą jako dane wejściowe żądania HTTP POST.
Parametr idUser wydaje się sekwencyjną wartością całkowitą zaczynającą się od liczby 1. Po wysłaniu POST z liczbą 1 do tej funkcji, usługa zwróciła informacje o użytkowniku „administrateur”, w tym zaszyfrowane hasło.
Tym samym wyciekają informacje o wszystkich kontach użytkowników w systemie wraz z ich zaszyfrowanymi hasłami.
CVE-2023-35763 Hardcoded encryption key
Ponieważ hasło było wyraźnie zaszyfrowane, postanowiono spróbować odtworzyć mechanizm szyfrowania. Wyszukiwanie nazw metod dla słowa „crypt” pokazało funkcję deszyfrującą, która pobiera tekst zaszyfrowany jako dane wejściowe i zwraca zwykły ciąg znaków UTF8. Odkryliśmy, iż funkcja zawiera wiersz ujawniający ciąg zwykłego tekstu, a ten jest używany jako klucz szyfrujący do szyfrowania/odszyfrowywania haseł użytkowników:
Tym samym otrzymujemy poświadczenia administratora w postaci jawnego tekstu i możemy zalogować się do portalu ScrutisWeb jako administrator.
Jak bardzo jest źle?
Chociaż CVE-2023-33871 opisuje lukę w zabezpieczeniach dostępu do plików poza webroot, ta sama funkcjonalność pozwoliła nam na pobranie aplikacji internetowej do wglądu. CVE-2023-38257 i CVE-2023-35763 umożliwiają zalogowanie się do konsoli zarządzania ScrutisWeb jako administrator. Stąd złośliwy aktor mógłby monitorować działania w poszczególnych bankomatach w obrębie floty. Konsola umożliwia również wprowadzanie bankomatów w tryb zarządzania, przesyłanie do nich plików, ponowne uruchamianie i całkowite wyłączanie. Konieczna byłaby dalsza analiza w celu ustalenia, czy niestandardowe oprogramowanie może zostać przesłane do poszczególnych bankomatów w celu przeprowadzenia eksfiltracji kart bankowych, przekierowania przelewu Swift lub innych złośliwych celów. Nie wiadomo na razie, czy takie działania są możliwe.
Wreszcie luka CVE-2023-35189 może zostać wykorzystana do wyczyszczenia dzienników w ScrutisWeb i usunięcia dowodów na obecność hakera. Może wystąpić dodatkowa eksploitacja z tego przyczółka w infrastrukturze klienta, co sprawi, iż będzie to punkt zwrotny w kolejnym ataku.
Na razie jako klienci końcowi bankomatów nie mamy się czego obawiać. Jednak warto wiedzieć, iż choćby najbardziej krytyczne urządzenia IT w naszym codziennym życiu, jak bankomaty, nie są dzisiaj bezpieczne.