Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

QNAP naprawia unauth OS Command Injection w QTS/QuTS – CVE-2023-47218, zobacz szczegóły podatności

15 lutego 2024, 02:16 | W biegu | 0 komentarzy

Na blogu Rapid7 pojawił się obszerny raport opisujący szczegóły podatności oznaczonej identyfikatorem CVE-2023-47218, która dotyka zarówno QTS, jak i QuTS hero. Są to systemy operacyjne dla dysków sieciowych tych z niższej półki (QTS) oraz wyższej (QuTS Hero wspiera np. system plików ZFS). Łatka ukazała się 25 stycznia tego roku, jednak dopiero teraz zostały ujawnione szczegóły. 

QNAP TS-464 – urządzenie wykorzystane do testów (źródło: materiały producenta)

Testy przeprowadzono na oprogramowaniu QTS 5.1.2.2533 wydanym na urządzenie QNAP TS-464, ale jak zauważają autorzy badania, podatne wersje oprogramowania to QTS 5.1.x przed 5.1.5.2645 build 20240116 oraz QuTS hero h5.1.x przed h5.1.5.2647 build 20240118. Trzeba jednak dodać, że podatność można wykorzystać tylko na urządzeniu, które nie zostało skonfigurowane. 

Po rozpakowaniu paczki z oprogramowaniem, oraz jego rozszyfrowaniu, analizie poddano binarki cgi. Common Gateway Interface, w skrócie, jest interfejsem pozwalającym na uruchomienie skryptów i skompilowanych programów przez serwer WWW. Jeden z endpointów w webowym panelu administratora, zlokalizowany w komponencie quick.cgi, jest wykorzystywany w procesie provisioningu urządzenia. Funkcja uploaf_firmware_image() wykorzystuje inną, pomocniczą funkcję CGI_Upload, która służy do parsowania parametrów wywołań CGI i zwraca wartość, która ma stanowić nazwę pliku (Rysunek 1). 

Rys. 1. Fragment kodu funkcji uploaf_firmware_image() oraz użycie CGI_Upload() przedstawiony w poście na blogu Rapid7

Następnie wartość ta jest umieszczana w wywołaniu funkcji system() (rysunek 2).

Rys.2. Wywołanie funkcji system() ze stringiem zawierającym wartość file_name

Aby udało się wykonać polecenie zdefiniowane przez atakującego, musi on najpierw mieć możliwość przekazania cudzysłowu (“). Jak się okazuje, taka możliwość istnieje. Implementacja CGI_Upload() znajduje się w bibliotece \usr\lib\libuLinux_fcgi.so.0.0. Badacze zwracają uwagę, że operacja parsowania zapytań POST umożliwia zdekodowanie %22 na cudzysłów (URL-encode) jeśli w zapytaniu, nagłówek User-Agent jest ustawiony na specyficzną wartość.

Rys.3. Wywołanie trans_http_str() która dekoduje parametry URL-encoded

Ten szczególny przypadek to „Mozilla Macintosh” (rysunek 4).

Rys. 4. Fragment wywołania CGI_Get_HTTP_Info() zwracający potrzebną wartość

Jeśli nagłówek zapytania zostanie ustawiony na właśnie taki identyfikator, to wtedy atakujący będzie miał możliwość wyskoczenia z cudzysłowu i wstrzyknięcia swojej komendy do polecenia wywoływanego przez system() w wyżej przedstawionej funkcji uploaf_firmware_image() (Rysunek 5).

Rys. 5. Zapytanie wykorzystujące podatność

Badacze opublikowali też PoC-a pozwalającego na sprawdzenie, czy podatność występuje na urządzeniu. Uruchomione polecenie jest wykonywane na prawach użytkownika administrator.

>ruby qnap_hax.rb -t 192.168.86.42 -p 8080 -c id
[+] Starting...
[+] Targeting: 192.168.86.42:8080
[+] Success, executed command: id
uid=0(admin) gid=0(administrators) groups=0(administrators),100(everyone)
[+] Success, executed command: rm -f a
[+] Success, executed command: rm -f /mnt/HDA_ROOT/update/*
[+] Finished.

Jeśli zapytanie do podatnego endpointu zwraca błąd 404 to według producenta nie jest podatne:

If you get the following response (HTTP 404 error), your system is not vulnerable: „Page not found or the web server is currently unavailable. Please contact the website administrator for help.”

Producent zaleca aktualizację do poprawionych wersji oprogramowania.

~fc

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



Komentarze

Odpowiedz