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
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.
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).
Następnie wartość ta jest umieszczana w wywołaniu funkcji system()
(rysunek 2).
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ść.
Ten szczególny przypadek to „Mozilla Macintosh” (rysunek 4).
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).
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