Opis podatności
CVE-2026-40456 dotyczyło obsługi adresu IP przekazywanego do funkcji live
traffic w LMS. W podatnych wersjach, sprzed commita 9fcb4de, wartość wejściowa
mogła zostać użyta przy budowie polecenia systemowego uruchamianego przez
exec().
Istotny jest warunek konfiguracyjny: wektor miał znaczenie wtedy, gdy w LMS była
ustawiona opcja phpui.live_traffic_helper. W tej konfiguracji ścieżka
getThroughput($ip) w modules/netdevxajax.inc.php i
modules/nodexajax.inc.php korzystała z helpera, a przekazany adres IP był
podstawiany do komendy wykonywanej przez exec().
Od parametru do exec()
Przepływ wyglądał tak:
- do funkcji
getThroughput($ip)trafiał parametr IP - konfiguracja
phpui.live_traffic_helperdostarczała komendę helpera - IP było podstawiane do komendy w miejscu placeholdera
%i - finalnie uruchamiane było
exec()
Jeżeli wartość nie jest sprawdzona jako adres IP przed podstawieniem do helpera,
dane wejściowe mogą zostać potraktowane jako część komendy wykonywanej przez
exec(). To jest bezpośrednie miejsce ryzyka dla command injection.
CVSS v4 to 8.6 HIGH z AV:A/PR:L/UI:N. Podatność pozwalała na wykonanie komend
systemowych, ale opis warunków powinien uwzględniać wymagane niskie uprawnienia,
osiągalność zgodną z AV:A, aktywną konfigurację phpui.live_traffic_helper
oraz uprawnienia procesu PHP.
Patch
Commit 9fcb4de dodaje check_ip($ip) przed uruchomieniem helpera. Jeżeli
wartość nie przechodzi walidacji adresu IP, kod kończy obsługę zamiast składać
i wykonywać komendę.
Poprawka zamyka zgłoszony wektor przez odrzucenie wartości, które nie są poprawnym adresem IP. W podobnym kodzie każda granica między aplikacją a shellem powinna mieć osobną walidację wejścia, kontrolowany sposób przekazywania argumentów i możliwie mało składania poleceń z danych użytkownika.