Opis podatności
Po publikacji wspólnego advisory CERT Polska dla trzech podatności w LMS (LAN Management System) poniżej znajduje się opis przyczyny CVE-2026-40455 bez publikowania payloadów. W tym przypadku istotne były: źródło danych, brak wymuszenia typu oraz miejsce, w którym lista identyfikatorów została użyta przy budowie zapytania SQL.
CVE-2026-40455 dotyczy modułu tarifflist.php. Wejściem była lista tagów
taryfowych tg[]. Aplikacja traktowała tę listę jak zbiór identyfikatorów, ale
przed dalszym użyciem nie wymuszała, aby każdy element był liczbą całkowitą.
Przepływ danych
Istotny przepływ wyglądał następująco:
tg[]z POST albo zapamiętanej sesji- przekazanie listy do logiki
GetTariffList(...) - złożenie listy przez
implode(',', $tags) - użycie wyniku w zapytaniu, w miejscu oczekującym identyfikatorów tagów
Źródłem problemu był brak walidacji typu dla elementów listy. Aplikacja
oczekiwała identyfikatorów liczbowych, ale przed złożeniem klauzuli IN (...)
nie wymuszała, aby każdy element listy był liczbą całkowitą.
CVSS v4 opublikowany przez CNA to 8.6 HIGH z AV:A/PR:L/UI:N. Nie jest to
scenariusz AV:N/PR:N: atakujący potrzebuje niskich uprawnień w LMS oraz
osiągalności komponentu zgodnej z AV:A. Wpływ dotyczy danych w podatnym
systemie (VC:H/VI:H/VA:L), bez wpływu na kolejne systemy (SC/SI/SA:N).
Co zmienił patch
Commit 4cb30a7 dodaje wymuszenie liczb całkowitych przez
Utils::filterIntegers($tags). Poprawka znajduje się przed dalszym użyciem listy
tagów, czyli przed miejscem, w którym dane wejściowe mogą trafić do składania
warunku SQL.
Wniosek z tego przypadku jest prosty: wartości poprawne w interfejsie użytkownika nie są gwarancją poprawnych danych po stronie backendu. Jeżeli backend oczekuje listy identyfikatorów, musi sam wymusić typ danych przed przekazaniem ich do warstwy SQL.