CVE-2022-46169
Unauthentifizierte Befehlsinjektion
- Veröffentlicht
- 05.12.2022
- Aktualisiert
- 21.10.2025
- CNA zuweisen
- GitHub_M
- Beweise beobachtet
- 16.02.2023
Primäres CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HHoch · nächste 30 Tage
- Perzentil
- 100,0 %
- Modelldatum
- 21.09.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
CISA bekanntermaßen ausgenutzt
Dieses CVE erscheint im CISA-Katalog „Known Exploited Vulnerabilities“.
Zusammenfassung
Cacti ist eine Open-Source-Plattform, die Benutzern ein robustes und erweiterbares Framework für Betriebsüberwachung und Fehlermanagement bereitstellt. In betroffenen Versionen ermöglicht eine Befehlsinjizierungsschwachstelle einem nicht authentifizierten Benutzer, beliebigen Code auf einem Server auszuführen, auf dem Cacti läuft, sofern für ein beliebiges überwachtes Gerät eine bestimmte Datenquelle ausgewählt wurde. Die Schwachstelle befindet sich in der Datei `remote_agent.php`. Auf diese Datei kann ohne Authentifizierung zugegriffen werden. Diese Funktion ermittelt die IP-Adresse des Clients über `get_client_addr` und löst diese IP-Adresse über `gethostbyaddr` in den entsprechenden Hostnamen auf. Danach wird überprüft, ob ein Eintrag in der Tabelle `poller` existiert, dessen Hostname dem aufgelösten Hostnamen entspricht. Wenn ein solcher Eintrag gefunden wird, gibt die Funktion `true` zurück und der Client ist autorisiert. Diese Autorisierung kann aufgrund der Implementierung der Funktion `get_client_addr` umgangen werden. Die Funktion ist in der Datei `lib/functions.php` definiert und prüft mehrere `$_SERVER`-Variablen, um die IP-Adresse des Clients zu bestimmen. Die Variablen, die mit `HTTP_` beginnen, können von einem Angreifer beliebig gesetzt werden. Da es in der Tabelle `poller` einen Standardeintrag mit dem Hostnamen des Cacti-Servers gibt, kann ein Angreifer die Authentifizierung umgehen, z. B. durch Bereitstellung des Headers `Forwarded-For: <TARGETIP>`. Auf diese Weise gibt die Funktion `get_client_addr` die IP-Adresse des Cacti-Servers zurück. Der anschließende Aufruf von `gethostbyaddr` löst diese IP-Adresse in den Hostnamen des Servers auf, der die `poller`-Hostnamenprüfung aufgrund des Standardeintrags besteht. Nachdem die Autorisierung der Datei `remote_agent.php` umgangen wurde, kann ein Angreifer verschiedene Aktionen auslösen. Eine dieser Aktionen heißt `polldata`. Die aufgerufene Funktion `poll_for_data` ruft einige Anforderungsparameter ab und lädt die entsprechenden `poller_item`-Einträge aus der Datenbank. Wenn die `action` eines `poller_item` gleich `POLLER_ACTION_SCRIPT_PHP` ist, wird die Funktion `proc_open` verwendet, um ein PHP-Skript auszuführen. Der vom Angreifer kontrollierte Parameter `$poller_id` wird über die Funktion `get_nfilter_request_var` abgerufen, die beliebige Zeichenfolgen zulässt. Diese Variable wird später in die an `proc_open` übergebene Zeichenfolge eingefügt, was zu einer Befehlsinjizierungsschwachstelle führt. Durch z. B. Bereitstellen von `poller_id=;id` wird der Befehl `id` ausgeführt. Um den angreifbaren Aufruf zu erreichen, muss der Angreifer eine `host_id` und eine `local_data_id` angeben, wobei die `action` des entsprechenden `poller_item` auf `POLLER_ACTION_SCRIPT_PHP` gesetzt ist. Beide IDs (`host_id` und `local_data_id`) können leicht per Brute-Force erraten werden. Die einzige Voraussetzung ist, dass ein `poller_item` mit einer Aktion `POLLER_ACTION_SCRIPT_PHP` existiert. Dies ist auf einer Produktionsinstanz sehr wahrscheinlich, da diese Aktion von einigen vordefinierten Vorlagen wie `Device - Uptime` oder `Device - Polling Time` hinzugefügt wird. Diese Befehlsinjizierungsschwachstelle ermöglicht einem nicht authentifizierten Benutzer, beliebige Befehle auszuführen, wenn ein `poller_item` mit dem Aktions-Typ `POLLER_ACTION_SCRIPT_PHP` (`2`) konfiguriert ist. Die Umgehung der Autorisierung sollte verhindert werden, indem man einem Angreifer nicht erlaubt, `get_client_addr` (Datei `lib/functions.php`) eine beliebige IP-Adresse zurückgeben zu lassen. Dies könnte erreicht werden, indem die `HTTP_...`-`$_SERVER`-Variablen nicht berücksichtigt werden. Falls diese aus Kompatibilitätsgründen beibehalten werden sollen, sollte zumindest verhindert werden, dass die IP-Adresse des Cacti-Servers vorgetäuscht werden kann. Diese Schwachstelle wurde in den Versionszweigen 1.2.x und 1.3.x behoben, wobei `1.2.23` die erste Version mit dem Patch ist.
Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.