Проверка уязвимостей CVE в GLPI

Модуль CVE Scan из NexTool сопоставляет установленную версию GLPI с NVD и GitHub Advisory и проверяет 19 параметров среды (PHP, заголовки, права доступа), формируя Security Score от 0 до 100. Рассказываем, как он работает, как его включить и какие ошибки конфигурации чаще всего не проходят проверку на практике.

В этой статьеРазделов: 9

Ваша инсталляция GLPI подвержена уже каталогизированным уязвимостям, а вы об этом не знаете? В большинстве парков, которые мы принимаем на сопровождение, никто не может сразу ответить, какие CVE затрагивают версию в продуктиве и выставлены ли в PHP правильные флаги безопасности. Модуль CVE Scan Vulnerabilidades из NexTool сопоставляет установленную версию с публичными базами CVE и за секунды проверяет 19 критичных параметров среды, формируя наглядный Security Score.

Проблема

У команд службы поддержки, работающих с GLPI, редко есть формальный процесс отслеживания уязвимостей, связанных с версией в продуктиве. NVD (NIST) и GitHub Advisory Database постоянно публикуют CVE, но отслеживать это вручную, версия за версией, нереально для тех, кто весь день ещё и создаёт и закрывает заявки.

Хуже того: версия ПО — это лишь половина риска. Среда PHP и конфигурация сервера вносят тихие уязвимости — включённый в продуктиве display_errors, раскрывающий пути и stack trace, cookie сессии без HttpOnly, отсутствие Content-Security-Policy или Strict-Transport-Security. Каждая из этих деталей — поверхность атаки, которая обычно обнаруживается только после инцидента, когда уже поздно.

Как работает CVE Scan

При запуске сканирования модуль определяет версию по константе GLPI_VERSION и сопоставляет её с динамической базой CVE, собранной из трёх источников:

  • NVD / NIST — авторитетный источник оценки CVSS и официальных метаданных каждой уязвимости.
  • GitHub Advisory Database — бюллетени, опубликованные самим проектом GLPI, с затронутыми версиями и версией, исправляющей каждую уязвимость, по линиям версий (например, 10.0 и 11.0), а также ссылкой на бюллетень.
  • Статическая резервная база — встроенный в модуль список критических и высоких уязвимостей, используемый до первого обновления базы и в средах, у которых нет доступа ни к GitHub, ни к NVD.

Объединение выполняется по CVE ID: для CVSS приоритет у NVD, а GitHub добавляет диапазоны версий и ссылки на бюллетени. Локальная база обновляется ежедневно автоматической задачей и по требованию кнопкой Обновить базу; само сканирование не обращается ни к GitHub, ни к NVD, и если оба источника недоступны, продолжает действовать предыдущая база. Параллельно с сопоставлением CVE модуль выполняет 19 проверок безопасности среды, сгруппированных в пять категорий: конфигурация PHP (8 проверок), проверки, специфичные для GLPI (4, в том числе стандартные пароли учётных записей установки), HTTP-заголовки (4), права доступа к файлам (2) и версия PHP (1), которая выявляет PHP, вышедший из поддержки безопасности. Результат превращается в Security Score от 0 до 100 с цветовой шкалой — красный для критического состояния, жёлтый для умеренного и зелёный для здорового, — а каждый пункт содержит статус, версию, исправляющую уязвимость, и инструкцию по исправлению.

Что он видит такого, чего не показывает штатный GLPI

Проверяемый параметрШтатный GLPIМодуль CVE Scan
CVE установленной версииНе предупреждаетСопоставляет GLPI_VERSION с NVD и GitHub Advisory
Забытый каталог install/Предупреждение на странице входаОтражается в оценке, если установщик отвечает через веб, с инструкцией по удалению
display_errors в продуктивеНе проверяетОтдельная проверка
Заголовки CSP / HSTS / X-Frame-Options / X-Content-Type-OptionsНе проверяетЧетыре проверки HTTP-заголовков
Права доступа к config_db.phpНе предупреждаетОтдельная проверка
Изменение риска во времениОтсутствуетSecurity Score фиксируется при каждом сканировании

Что мы узнали, запуская это на практике

При сопровождении чаще всего в средах клиентов не проходит проверку session.cookie_secure — и почти всегда причина за пределами GLPI. GLPI стоит за обратным прокси, который терминирует TLS, поэтому PHP видит соединение как http и не помечает cookie как защищённый. Исправление не в GLPI: нужно правильно передавать заголовок X-Forwarded-Proto на прокси и принудительно включить HSTS на границе. Второй чемпион — каталог install/, забытый после установки. GLPI даже предупреждает об этом на странице входа, но в парке с десятками инсталляций это предупреждение остаётся незамеченным — именно сводная оценка заставляет команду обратить внимание. Поэтому мы относимся к CVE Scan как к термометру, а не как к приговору: он указывает на проблему, но решение исправить её в правильном месте остаётся за тем, кто сопровождает среду.

Проверка тех же параметров вручную

Ещё до установки чего-либо вы можете воспроизвести часть диагностики прямо на сервере. Вот некоторые из параметров PHP и файловой системы, которые проверяет модуль:

# PHP flags that CVE Scan audits (run on the GLPI server)
php -i | grep -Ei 'display_errors|expose_php|allow_url_include|cookie_httponly|cookie_secure'

# Permission of the database credentials file: must be 400 or 440, never 644
stat -c '%a %n' /var/www/glpi/config/config_db.php

# Installation directory that should have been removed after setup
test -f /var/www/glpi/install/install.php && echo 'ALERT: install/ still present - remove it'

# PHP version: warn if it is end-of-life (EOL)
php -r 'echo PHP_VERSION, PHP_EOL;'

Модуль автоматизирует это, добавляет сопоставление с базами CVE и хранит историю, — но уже запуск приведённых выше команд показывает, почему ручной аудит не масштабируется дальше двух-трёх инсталляций.

Как включить

  1. Установите плагин NexTool в ваш GLPI.
  2. Откройте Настройки > NexTool > Модули.
  3. Найдите карточку CVE Scan Vulnerabilidades, нажмите Установить, а затем Активировать.
  4. Откройте модуль и на Панели нажмите Обновить базу, а затем Запустить сканирование.
  5. По желанию: укажите токен GitHub и API Key NVD на вкладке настроек, чтобы повысить лимиты запросов к внешним базам.

Кому подходит (и кому нет)

Модуль подходит администраторам GLPI, которым нужен быстрый и регулярный аудит безопасности, командам, проходящим внутренний или внешний аудит и нуждающимся в подтверждении состояния среды, и руководителям, которые хотят отслеживать изменение уровня защищённости по истории сканирований. Это не серебряная пуля: он не заменяет пентест, ничего не исправляет сам и не должен становиться поводом откладывать обновление GLPI. Если в вашей среде уже есть корпоративный сканер (Nessus, Qualys), направленный на тот же хост, CVE Scan — лёгкое дополнение, специфичное для GLPI, а не конкурент.

Совместимость

  • GLPI: 10.x и 11.x
  • План: FREE
  • Плагин: NexTool 6.11.0 или выше

Следующий шаг

CVE Scan Vulnerabilidades входит в NexTool — модульный плагин для GLPI. Познакомьтесь с другими модулями или свяжитесь с командой для полной оценки безопасности вашей среды.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

Модуль CVE Scan из NexTool определяет версию по константе GLPI_VERSION и сопоставляет её с NVD (NIST) и GitHub Advisory Database, а также выполняет 19 проверок безопасности среды и формирует Security Score от 0 до 100.

И то, и другое. Помимо CVE установленной версии, он проверяет 19 параметров среды: 8 флагов конфигурации PHP, 4 проверки GLPI (например, стандартные пароли учётных записей установки и установщик, доступный через веб), 4 HTTP-заголовка (CSP, HSTS, X-Frame-Options и X-Content-Type-Options), 2 проверки прав доступа к файлам (например, к config_db.php) и проверку PHP, вышедшего из поддержки безопасности.

Да, с ограниченным покрытием. Если NVD и GitHub Advisory недоступны, модуль продолжает использовать последнюю загруженную базу и предупреждает об этом на панели; если ни одна база ещё не загружалась, используется встроенный список критических и высоких уязвимостей, чтобы сканирование не осталось без результата.

После каждого обновления GLPI и периодически (раз в месяц — хороший ритм). Кеш CVE обновляется ежедневно через cron, поэтому история сканирований показывает изменение Security Score во времени.

Нет. Это бесплатный (FREE) модуль NexTool, совместимый с GLPI 10 и 11.

Нужна помощь?