CVE-2022-46169
Iniezione di comandi non autenticata
- Pubblicato
- 5 dic 2022
- Aggiornato
- 21 ott 2025
- Assegnazione CNA
- GitHub_M
- Evidenza osservata
- 16 feb 2023
CVSS primario
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HAlto · prossimi 30 giorni
- Percentile
- 100,0%
- Data del modello
- 21 set 2026
L'EPSS è una stima statistica, non una certezza o una misura di impatto. Combinalo con CVSS, stato KEV, esposizione e ambiente.
CISA noto sfruttato
Questo CVE appare nel catalogo CISA delle vulnerabilità sfruttate note.
Riepilogo
Cacti è una piattaforma open source che fornisce agli utenti un framework robusto ed estensibile per il monitoraggio operativo e la gestione dei guasti. Nelle versioni interessate, una vulnerabilità di iniezione di comandi consente a un utente non autenticato di eseguire codice arbitrario su un server che esegue Cacti, se una specifica origine dati è stata selezionata per qualsiasi dispositivo monitorato. La vulnerabilità risiede nel file `remote_agent.php`. Questo file è accessibile senza autenticazione. Questa funzione recupera l'indirizzo IP del client tramite `get_client_addr` e risolve questo indirizzo IP nel nome host corrispondente tramite `gethostbyaddr`. Successivamente, viene verificato che esista una voce nella tabella `poller` il cui nome host corrisponda al nome host risolto. Se tale voce viene trovata, la funzione restituisce `true` e il client viene autorizzato. Questa autorizzazione può essere aggirata a causa dell'implementazione della funzione `get_client_addr`. La funzione è definita nel file `lib/functions.php` e controlla diverse variabili `$_SERVER` per determinare l'indirizzo IP del client. Le variabili che iniziano con `HTTP_` possono essere impostate arbitrariamente da un attaccante. Poiché nella tabella `poller` è presente una voce predefinita con il nome host del server che esegue Cacti, un attaccante può aggirare l'autenticazione, ad esempio fornendo l'header `Forwarded-For: <TARGETIP>`. In questo modo la funzione `get_client_addr` restituisce l'indirizzo IP del server che esegue Cacti. La successiva chiamata a `gethostbyaddr` risolve questo indirizzo IP nel nome host del server, che supera il controllo del nome host della tabella `poller` grazie alla voce predefinita. Dopo che l'autorizzazione del file `remote_agent.php` viene aggirata, un attaccante può attivare diverse azioni. Una di queste azioni è chiamata `polldata`. La funzione chiamata `poll_for_data` recupera alcuni parametri della richiesta e carica le corrispondenti voci `poller_item` dal database. Se l'`action` di un `poller_item` è uguale a `POLLER_ACTION_SCRIPT_PHP`, la funzione `proc_open` viene utilizzata per eseguire uno script PHP. Il parametro controllato dall'attaccante `$poller_id` viene recuperato tramite la funzione `get_nfilter_request_var`, che consente stringhe arbitrarie. Questa variabile viene successivamente inserita nella stringa passata a `proc_open`, il che porta a una vulnerabilità di iniezione di comandi. Ad esempio, fornendo `poller_id=;id`, viene eseguito il comando `id`. Per raggiungere la chiamata vulnerabile, l'attaccante deve fornire un `host_id` e un `local_data_id`, dove l'`action` del corrispondente `poller_item` è impostata su `POLLER_ACTION_SCRIPT_PHP`. Entrambi questi id (`host_id` e `local_data_id`) possono essere facilmente forzati tramite brute force. L'unico requisito è che esista un `poller_item` con un'azione `POLLER_ACTION_SCRIPT_PHP`. Questo è molto probabile su un'istanza di produzione, poiché questa azione viene aggiunta da alcuni modelli predefiniti come `Device - Uptime` o `Device - Polling Time`. Questa vulnerabilità di iniezione di comandi consente a un utente non autenticato di eseguire comandi arbitrari se è configurato un `poller_item` con il tipo di `action` `POLLER_ACTION_SCRIPT_PHP` (`2`). L'aggiramento dell'autorizzazione dovrebbe essere impedito non consentendo a un attaccante di far restituire a `get_client_addr` (file `lib/functions.php`) un indirizzo IP arbitrario. Ciò potrebbe essere fatto non tenendo conto delle variabili `$_SERVER` del tipo `HTTP_...`. Se queste dovessero essere mantenute per motivi di compatibilità, si dovrebbe almeno impedire di falsificare l'indirizzo IP del server che esegue Cacti. Questa vulnerabilità è stata corretta sia nel ramo di rilascio 1.2.x che in quello 1.3.x, con `1.2.23` come prima versione contenente la patch.
Utilizzo responsabile
Utilizza le informazioni sulla vulnerabilità solo sui sistemi che possiedi o che sei autorizzato a testare. Kitploit si collega ai metadati della ricerca pubblica e non memorizza codici exploit o payload dannosi.