GV-VMS V20 zawiera krytyczną podatność typu stack overflow w obsłudze nagłówka HTTP Authorization, która pozwala nieuwierzytelnionemu atakującemu na zdalne wykonanie kodu z uprawnieniami SYSTEM. Podatność jest szczególnie łatwa do wykorzystania ze względu na brak zabezpieczenia ASLR w skompilowanym serwerze WebCam Server.
▸ Pokaż oryginał (EN)
GV-VMS V20 is a Video Monitoring Software used to gather the feeds of many surveillance cameras and manage other security devices. It is a native application accessed locally, but it is also possible to enable remote access via the "WebCam Server" feature. Once enabled, it is possible to access to the management and monitoring feature via a regular Web interface. This webersever is another native application, compiled without ASLR, which makes exploitation much easier and more likely. Most of the features require authentication before being reachable and leverage a standard login page to grant access. However the `gvapi` endpoint uses its own authentication mechanism via an `HTTP Authorization` header. It supports both `Basic` authentication and the `Digest` modes of authentication. #### Stack-overflow via unbound copy of base64 decoded string The `b64decoder` string is sized dynamically, but it is then copied to the `Buffer` stack variable one character at the time at [0], and there's no bound-check. As such, if the decoded string is bigger than 256 characters (the size of the `Buffer` variable) then a stack overflow occurs. Because the data can be fully controlled by an attacker and lack of ASLR, this vulnerability can easily be exploited to gain full code execution as SYSTEM on the machine running the service.
Wbudowany serwer WebCam Server (dostępny po włączeniu zdalnego dostępu) obsługuje endpoint `gvapi` z własnym mechanizmem uwierzytelniania poprzez nagłówek HTTP Authorization w trybach Basic oraz Digest. Podczas przetwarzania tego nagłówka dane zakodowane w Base64 są dekodowane do dynamicznie alokowanego bufora `b64decoder`, a następnie kopiowane znak po znaku do zmiennej stosu `Buffer` o rozmiarze 256 bajtów — bez żadnej kontroli granic. Jeśli zdekodowany ciąg przekracza 256 znaków, dochodzi do przepełnienia bufora na stosie (stack overflow). Ponieważ atakujący ma pełną kontrolę nad przekazywanymi danymi, a serwer skompilowany jest bez ASLR, podatność umożliwia precyzyjne przejęcie sterowania przepływem wykonania i uruchomienie dowolnego kodu.
Nieuwierzytelniony, zdalny atakujący może uzyskać pełne wykonanie kodu (RCE) z uprawnieniami SYSTEM na maszynie uruchamiającej usługę GV-VMS, co oznacza całkowite przejęcie kontroli nad systemem operacyjnym.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (strona bezpieczeństwa GeoVision: https://www.geovision.com.tw/cyber_security.php). Do czasu wdrożenia poprawki zaleca się wyłączenie funkcji WebCam Server lub ograniczenie dostępu do niej wyłącznie do zaufanych adresów IP na poziomie firewalla.
GeoVision GV-VMS V20 z włączoną funkcją WebCam Server umożliwiającą zdalny dostęp przez interfejs webowy
Serwer WebCam Server jest skompilowany bez ASLR, co według opisu znacząco ułatwia praktyczną eksploatację i zwiększa prawdopodobieństwo skutecznego ataku. Podatność nie wymaga uwierzytelnienia — endpoint `gvapi` jest osiągalny przed zalogowaniem.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H