CVE-2026-57268
WysokieCVSS 8.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 20 — wyżej niż 20% wszystkich znanych CVE
Streszczenie
Wtyczka GeoWebPlayer (Web Plugin/WS Player) dla oprogramowania GeoVision (GV-VMS, GV-Cloud) zawiera podatność na odczyt poza zakresem w komendzie `saveVideo`. Indeks przekazany w komunikacie WebSocket nie jest walidowany, co pozwala na dostęp do krytycznych sekcji i wskaźników funkcji poza granicami tablicy, potencjalnie prowadząc do wykonania dowolnego kodu.
Ocena ryzyka
Atakujący z lokalnego hosta może wykorzystać tę podatność do przejęcia kontroli nad serwerem WebSocket, co może skutkować eskalacją uprawnień, wykonaniem złośliwego kodu lub destabilizacją systemu monitoringu.
Rekomendacja
Należy natychmiast zaktualizować wtyczkę GeoWebPlayer do najnowszej wersji dostarczonej przez producenta oraz ograniczyć dostęp do serwera WebSocket wyłącznie do zaufanych procesów lokalnych.
Oryginalny opis (angielski, źródło NVD)
GeoWebPlayer (also called "Web Plugin" in the GV-VMS documentation and "WS Player" for VMS-Cloud) is an addon that can be installed with various GeoVision software (GV-VMS, GV-Cloud, ...). It creates a websocket server that expands the capabilities of the various web-interfaces provided by the GeoVision software and may be necessary for them to function properly. The Websocket server can accept various commands coming from localhost. Many of the commands will take an `index` value that is then used to access various arrays to enter critical sections, perform various actions via function calls, etc. However the `index` value is usually not checked for valid range, and as such it can be used to access multiple arrays out-of-bound. ### saveVideo command index-out-of-bound When sending the `saveVideo` command, the `index` field is extracted from the websocket message [1]. Then without checking the range of the index, it is used to trigger a CriticalSection ([2]) and releases it [3]. The release function call ([3]) is executed using a function pointer which will be read out of bounds potentially leading to code execution: v6 = get_entry(a2, "index"); result = json_is_value_int(v6); if ( (_BYTE)result ) { v8 = get_entry(a2, "index"); index = json_value_to_int(&v8->value); // [1] result = CCriticalSection::EnterCritSection(&this->crit_sections[index]); //[2] if ( result ) { if ( this->array_of_IPCams[index] ) { if ( this->array_of_IPCams[index]->field_20 ) do_PostMessageA((CViewer *)this->array_of_IPCams[index], 0x111u, 0x139Fu, v11); } return (*(int (__thiscall **)(CCriticalSection *))(this->crit_sections[index].vtbl + 20))(&this->crit_sections[index]); //[3] } }

