В системе мониторинга сетевых устройств LibreNMS версий до 26.3.1 выявлена уязвимость сохранённого межсайтового скриптинга (XSS, CWE-79). Опасность оценивается как высокая - 7,3 балла по шкале CVSS 3.1. Проблема касается некорректной обработки данных, поступающих от сетевых устройств по протоколам SNMP и Syslog. Информация об уязвимости опубликована в бюллетене безопасности LibreNMS (GHSA-7w8c-qgxg-m7jx) от 15 июня 2026 года. Разработчики выпустили исправление в версии 26.3.1.
Детали уязвимости
Причина уязвимости - устаревшие PHP-шаблоны из директории "includes/html/", которые напрямую выводят в HTML-разметку данные, полученные от контролируемых устройств, не экранируя их. В то время как большинство новых шаблонов на Blade используют автоматическое экранирование через двойные фигурные скобки, несколько десятков файлов legacy-кода остались незащищёнными. Исследователи обнаружили по меньшей мере пять групп таких мест - на страницах системного журнала, оповещений, здоровья устройств (память, хранилища, сенсоры), а также на страницах псевдопроводов и VRF.
Атакующий, контролирующий сетевое устройство, за которым следит LibreNMS, может внедрить вредоносный JavaScript в поля, передаваемые через SNMP (например, описание порта "ifAlias", описание пула памяти "mempool_descr", описание хранилища "storage_descr", описание сенсора "sensor_descr") или через поле "program" в сообщениях Syslog. Данные сохраняются в базе данных без санитизации. Как только любой аутентифицированный пользователь откроет соответствующую страницу (оповещения, системный журнал, страницы здоровья), внедрённый скрипт выполнится в его браузере.
Публичный прототип эксплойта показывает, как через отправку специального Syslog-сообщения с атакующего хоста можно добиться выполнения JavaScript в контексте сессии жертвы. Например, команда вида "echo '<14>Mar 20 12:00:00 rogue-device <img/src=x onerror=alert(document.domain)>: test message' | nc -u 10.0.0.1 514" записывает в поле "program" XSS-вектор, который отобразится в панели просмотра syslog. Аналогично, через SNMP-set на интерфейс устройства можно задать описание порта, содержащее тег "<img>" с обработчиком события.
Наиболее критичным специалисты считают сценарий, при котором атакующий изменяет описание порта (ifAlias) на взломанном устройстве. После того как это устройство будет опрошено по SNMP, и для данного порта сработает оповещение, каждый аутентифицированный пользователь, просматривающий страницу тревог, запустит XSS-нагрузку. Таким образом, компрометация одного устройства, контролируемого LibreNMS, может привести к выполнению произвольного кода в браузерах всех операторов мониторинга.
В бюллетене безопасности разработчики подтверждают, что исправление включает миграцию уязвимых участков на безопасное экранирование с помощью "htmlspecialchars()" или "htmlentities()", аналогично тому, как это уже сделано в современных частях кода. В версии 26.3.1 проблема устранена. Администраторам рекомендуется немедленно обновить свои установки. Поскольку CVE-идентификатор уязвимости пока не присвоен, следует ориентироваться на внутренний номер GHSA-7w8c-qgxg-m7jx.
Важно отметить, что уязвимость затрагивает только legacy-код, использующий прямые echo без экранирования. Все шаблоны на Blade и ряд обновлённых PHP-файлов, где применяются функции очистки (Clean::html, htmlentities, htmlspecialchars), не подвержены проблеме. Однако в большинстве установок LibreNMS legacy-файлы всё ещё активны, поэтому риск остаётся высоким. Злоумышленнику не требуется привилегированный доступ к самой системе LibreNMS - достаточно контроля над одним из мониторируемых устройств, что делает атаку практически доступной при наличии хотя бы одного скомпрометированного элемента сети. В сочетании с возможностью кражи сессионных cookie или перенаправления пользователей на фишинговые страницы, данная уязвимость представляет реальную угрозу для корпоративных сред, использующих LibreNMS для централизованного мониторинга.
Ссылки