Żądny wiedzy? Wbijaj na Mega Sekurak Hacking Party w maju! -30% z kodem: majearly

NextChat – popularny czatbot AI z niezałatanymi podatnościami

13 marca 2024, 21:42 | W biegu | 1 komentarz
Tagi: , , , , , ,

Przeglądając Internet w poszukiwaniu ciekawych podatności, można się natknąć na niezałatane błędy, które stanowią idealny przykład dydaktyczny. Takie przykłady mało skomplikowane, a do tego podkreślają istotę problemu. CVE-2023-49785 może stać się jednym z lepszych przykładów do demonstracji wpływu SSRF (Server Side Request Forgery) na aplikację. O SSRF pisaliśmy już nie raz. Dla przypomnienia: jest to błąd po stronie serwera, który umożliwia zmuszenie go do rozpoczęcia komunikacji sieciowej. Najczęściej w przypadku aplikacji webowych i chmurowych będzie to wykonanie zapytań HTTP. Oczywiście SSRF ma swoje warianty, czasami atakujący jest w stanie odczytać odpowiedź serwera, ale nie jest to zagwarantowane. Dlatego istnieje też odmiana tej podatności w wersji blind w której atakujący jest w stanie zmusić serwer do wykonania zapytania, ale nie może bezpośrednio odczytać zawartości odpowiedzi. Czasami istnieje obejście tego problemu, bo wygenerowane zapytanie można odczytać przy pomocy zewnętrznego serwera np. Burp Collaboratora. W takim zapytaniu mogą znaleźć się różne nagłówki, w tym takie, które nie powinny nigdy ujrzeć światła dziennego. Możliwości wykorzystania SSRF są więc duże, a wszystko zależy od tego w jakiej aplikacji została ta luka odkryta oraz w jakim środowisku działa ta aplikacja. 

Tym razem badacze z horizn3.ai opisali niemal „wymarzoną” konfigurację tego ataku w aplikacji zwanej NextChat. NextChat to – jak opisują autorzy – “One-Click to get a well-designed cross-platform ChatGPT web UI, with GPT3, GPT4 & Gemini Pro support.” czyli rozbudowana aplikacja służąca do budowy czatbotów na bazie silników LLM od różnych dostawców. 

Patrząc na statystyki jest to całkiem popularny projekt:

Okazuje się, że aplikacja wystawia kilka RESTowych endpointów, w tym jedno, kluczowe dla opisywanej podatności znajdujące się pod adresem /api/cors. Implementacja tego endpointu powoduje, że dowolny nieuwierzytelniony użytkownik jest w stanie wykorzystać program NextChat w formie proxy HTTP i przetunelować swoje zapytanie przez niego. W opisie błędu przytoczono dokładny fragment kodu odpowiedzialny za ten problem:

Implementacja podatnego endpoint (źródło: klik)

Jak domniemają badacze, kod ten może być wykorzystywany do zapisywania czatu na serwerach WebDAV. Jednak najważniejsza jest jego dodatkowa funkcjonalność. 

Otóż przy pomocy nagłówka atakujący może zadeklarować metodę zapytania, nagłówek Authorization a także załączyć dodatkowe parametry które radośnie zostaną przekazane w zapytaniu wyzwolonym przez aplikację. Oczywiście atakujący otrzyma odpowiedź, którą będzie mógł odczytać:

Efekt SSRF (źródło: klik)

Jak na razie nie udało się tylko wskazać kreatywnej metody na załączenie dodatkowych nagłówków takich jak Content-Type i Cookie. Ale na ten moment, to co oferuje “proxy” jest już samo w sobie krytyczną podatnością.

Jeśli ta aplikacja działać będzie np. na instancji EC2, to nic nie stoi na przeszkodzie, aby wykorzystać NextChat do wykonania zapytania do znanego developerom i administratorom AWS adresu 169.254.169.254 w celu pozyskania kluczowych z punktu widzenia bezpieczeństwa informacji takich jak klucze uwierzytelniające. 

Dodatkowo badacze wskazali na fakt, że powyższy kod jest również podatny na atak typu reflected XSS i to bez wysłania zapytania do zdalnego serwera i ładowania strony. Dzieje się tak, gdyż można wykorzystać protokół data i ładunek (ang. payload) podać w formie zakodowanej base64. 

Zaproponowany payload:

data:text%2fhtml;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+%23

Powoduje wyświetlenie komunikatu jak na poniższym obrazku, ponieważ to tak naprawdę zakodowany <script>alert(document.domain)</script>

Efekt uruchomienia prostego alertu
(źródło: klik)

Podatność SSRF została wyceniona na wartość 9.1, co doskonale podkreśla możliwe konsekwencje. Ale w tej historii najgorszym elementem całej układanki jest to, że błąd do dzisiaj nie został załatany. Po 90 dniach od zgłoszenia podatności przez program GitHuba, nikt z developerów projektu nie wykonał żadnej akcji oprócz pierwotnego zaakceptowania raportu. To powoduje, że wiele instancji NextChata może być narażonych na atak albo posłużyć do wyrządzenia znacznie większych szkód. 

Publicznie dostępne instancje API (źródło: klik)

W dobie boomu na nowe aplikacje AI należy pamiętać, że wszystko co otacza najmodniejsze technologie to wciąż to samo oprogramowanie podlegające tym samym prawom i podatnościom. Nawet popularne projekty mają poważne podatności, a ich deweloperzy nie zawsze postępują zgodnie z najlepszymi praktykami. To powoduje, że należy zwrócić szczególny nacisk na to co i w jaki sposób wykorzystujemy we własnej infrastrukturze.

~fc

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



Komentarze

  1. SeeM

    Załatane 10 godzin temu. Czytają Sekuraka, czy co? (-:

    Odpowiedz

Odpowiedz