
Detaillierter CVE-2026-39938-Sicherheitslückenbericht für Cacti ≤1.2.30, der nicht authentifiziertes LFI, verkettet mit OS-Befehlseinschleusung (RCE), mit PoC demonstriert, sowie Ursachenanalyse und Anleitungen zur Behebung.
| Feld | Wert |
|---|
| Produkt | Cacti — Die komplette RRDtool-basierte Grafiklösung |
| Betroffene Version(en) | ≤ 1.2.30 |
| Schwachstellenklasse | CWE-22: Pfad-Traversal (LFI) → CWE-78: OS-Befehlseinschleusung |
| Angriffsvektor | Netzwerk |
| Authentifizierung | Keine erforderlich (Gastkonto-Umgehung) |
| Benutzerinteraktion | Keine |
| CVSSv3.1-Score | 9.8 — KRITISCH |
| Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Cacti ≤ 1.2.30 ist anfällig für unauthhenticated Local File Inclusion (LFI) über den Parameter graph_theme in graph_image.php, verknüpft mit Remote Code Execution (RCE) durch OS-Befehlseinschleusung über cacti_escapeshellarg() unter Windows.
HTTP Request
│
▼
graph_image.php
│
├── $guest_account = true → Auth bypass (no login needed)
│
├── graph_theme param → LFI (CWE-22)
│ └── Path traversal via basename() bypass
│
└── Other params (graph_height, etc.)
└── cacti_escapeshellarg() → OS injection (CWE-78)
└── proc_open() → RCE
graph_themeDer Parameter graph_theme wird unzureichend bereinigt. Der Fix versuchte, basename() zu verwenden, aber dies ist trivial umgehbar – ein Pfad wie themes/../../etc/passwd besteht die basename()-Validierung, während er weiterhin Verzeichnisse traversiert.
Verwundbarer Codepfad in graph_image.php:
$theme = basename($_GET['graph_theme']); // basename() is NOT sufficient
include_once("./include/theme_" . $theme . ".php"); // LFI
Der Fix in 1.2.31 ersetzt basename() durch cacti_validate_theme(), das eine Dateisystem-Whitelist verwendet.
| Bedingung | Wahrscheinlichkeit | Anmerkungen |
|---|---|---|
| Cacti läuft unter Windows | Häufig in Unternehmen | Fehler in der cmd.exe-Escape-Funktion ermöglicht RCE |
| Gastkonto aktiviert | Häufig – oft Standard | Gastbenutzer ermöglicht öffentliche Grafikansicht |
| Mindestens ein Graph vorhanden | Nahezu universell | local_graph_id=1 nach der Installation vorhanden |
| RRDtool installiert | Von Cacti benötigt | Immer vorhanden |
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
Die OS-Befehlseinschleusung bietet bereits direkte Remote Code Execution (RCE), daher ist LFI nicht erforderlich, um die Kompromittierung zu erreichen.
Aus Forschersicht, wenn beide Probleme gemeinsam betrachtet werden:
Dies zeigt, dass die Kombination mehrerer Schwachstellen die Gesamtauswirkung erhöht und die Ausnutzung einfacher und zuverlässiger macht.
| Säule | Bewertung | Beschreibung |
|---|---|---|
| Vertraulichkeit | HOCH | Vollständiger Lesezugriff auf das Dateisystem des Webservers (Konfiguration, DB-Zugangsdaten) |
| Integrität | HOCH | Beliebige Befehlsausführung, Bereitstellung von Web-Shells |
| Verfügbarkeit | HOCH | Prozessbeendigung, Dateikorruption, DoS |
| Metrik | Wert |
|---|---|
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Keine |
| Umfang | Unverändert |
| Vertraulichkeit | Hoch |
| Integrität | Hoch |
| Verfügbarkeit | Hoch |
Wertung: 9.8 — KRITISCH
| Priorität | Maßnahme |
|---|---|
| Sofort | Upgrade auf Cacti 1.2.31 oder höher |
MENG HOKSENG
Unabhängiger Sicherheitsforscher
Referenzen: