
Rapport détaillé de la vulnérabilité CVE-2026-39938 pour Cacti ≤1.2.30, démontrant un LFI non authentifié enchaîné à une injection de commande OS menant à une exécution de code à distance (RCE) avec PoC, analyse de la cause racine et conseils de correction.
| Champ | Valeur |
|---|
| Produit | Cacti — La solution complète de graphiques basée sur RRDtool |
| Version(s) affectée(s) | ≤ 1.2.30 |
| Classe de vulnérabilité | CWE-22 : Traversée de chemin (LFI) → CWE-78 : Injection de commandes OS |
| Vecteur d'attaque | Réseau |
| Authentification | Aucune requise (contournement du compte invité) |
| Interaction utilisateur | Aucune |
| Score CVSSv3.1 | 9.8 — CRITIQUE |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Cacti ≤ 1.2.30 est vulnérable à une Inclusion Locale de Fichiers (LFI) non authentifiée via le paramètre graph_theme dans graph_image.php, enchaînée à une Exécution de Code à Distance (RCE) via l'injection de commandes OS par cacti_escapeshellarg() sur Windows.
Requête HTTP
│
▼
graph_image.php
│
├── $guest_account = true → Contournement d'auth (aucune connexion nécessaire)
│
├── paramètre graph_theme → LFI (CWE-22)
│ └── Traversée de chemin via contournement de basename()
│
└── Autres paramètres (graph_height, etc.)
└── cacti_escapeshellarg() → Injection OS (CWE-78)
└── proc_open() → RCE
graph_themeLe paramètre graph_theme est insuffisamment nettoyé. Le correctif a tenté d'utiliser basename(), mais cela est trivialement contournable — un chemin comme themes/../../etc/passwd passe la validation basename() tout en traversant les répertoires.
Chemin de code vulnérable dans graph_image.php :
$theme = basename($_GET['graph_theme']); // basename() n'est PAS suffisant
include_once("./include/theme_" . $theme . ".php"); // LFI
Le correctif dans la version 1.2.31 remplace basename() par cacti_validate_theme(), qui utilise une liste blanche du système de fichiers.
| Condition | Probabilité | Notes |
|---|---|---|
| Cacti fonctionne sur Windows | Courant en entreprise | La faille dans l'échappement cmd.exe permet la RCE |
| Compte invité activé | Courant — souvent par défaut | L'utilisateur invité permet la visualisation publique des graphiques |
| Au moins un graphique existe | Quasi universel | local_graph_id=1 présent après installation |
| RRDtool installé | Requis par Cacti | Toujours présent |
GET /cacti/graph_image.php?local_graph_id=1&graph_theme=../../../../etc/passwd
GET /cacti/graph_image.php?local_graph_id=1&graph_height=100" & whoami & "&action=view
L'injection de commandes OS fournit déjà une Exécution de Code à Distance (RCE) directe, donc la LFI n'est pas nécessaire pour compromettre le système.
Cependant, du point de vue d'un chercheur, si les deux problèmes sont considérés ensemble :
Cela montre que la combinaison de plusieurs vulnérabilités augmente l'impact global et rend l'exploitation plus facile et plus fiable.
| Pilier | Évaluation | Description |
|---|---|---|
| Confidentialité | ÉLEVÉE | Accès en lecture complet au système de fichiers du serveur web (config, identifiants BD) |
| Intégrité | ÉLEVÉE | Exécution arbitraire de commandes, déploiement de shell web |
| Disponibilité | ÉLEVÉE | Terminaison de processus, corruption de fichiers, DoS |
| Métrique | Valeur |
|---|---|
| Vecteur d'attaque | Réseau |
| Complexité d'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Périmètre | Inchangé |
| Confidentialité | Élevée |
| Intégrité | Élevée |
| Disponibilité | Élevée |
Score : 9.8 — CRITIQUE
| Priorité | Action |
|---|---|
| Immédiate | Mettre à jour vers Cacti 1.2.31 ou ultérieur |
MENG HOKSENG
Chercheur en sécurité indépendant
Références :