Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-46169 — Cacti 1.2.22 iniezione di comandi non autenticata | Kitploit
Strumenti/GitHubGitHub/k4pxd/cve-2022-46169
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHubk4pxd/cve-2022-46169

CVE-2022-46169

Cacti 1.2.22 iniezione di comandi non autenticata

Vedi Repository
8h 50m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2022-46169 — Cacti 1.2.22 Iniezione di comandi non autenticata


Scarica lo strumento
CampoDettagli
ProdottoCacti
Versione interessata1.2.22
VulnerabilitàIniezione di comandi OS non autenticata
CVECVE-2022-46169
CWECWE-77 — Iniezione di comandi
GravitàCritica
CVSS v3.19.8
Vettore di attaccoRete
AutenticazioneNessuna
Interazione utenteNessuna
ImpattoRiservatezza / Integrità / Disponibilità
Versione corretta1.2.23
Componente vulnerabileremote_agent.php
Componente aggiuntivolib/functions.php
Azione vulnerabile principalepolldata

Il vettore CVSS pubblicato è:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

L'avviso ufficiale lo valuta 9.8 Critico. (GitHub)

1. Causa principale

In realtà ci sono due bug concatenati.

Fase 1 — Bypass dell'autorizzazione

remote_agent.php di Cacti accetta richieste senza autenticazione normale, ma tenta di determinare se il richiedente è un poller autorizzato.

Il flusso di autorizzazione effettivamente fa:

root@kitploit:~
Richiesta HTTP
     │
     ▼
remote_agent.php
     │
     ▼
remote_client_authorized()
     │
     ▼
get_client_addr()
     │
     ▼
gethostbyaddr()
     │
     ▼
Confronto hostname nella tabella poller

Il problema è get_client_addr().

Nella versione 1.2.22 esamina numerose variabili server derivate da HTTP, inclusi gli header forwarded-client-IP. L'avviso spiega che i valori HTTP_* controllati dall'attaccante possono influenzare l'IP restituito da questa funzione. (GitHub)

Ciò significa che l'applicazione può essere indotta a credere:

root@kitploit:~
Attaccante
   ↓
"il mio IP è il server Cacti"
   ↓
gethostbyaddr()
   ↓
Hostname del server Cacti
   ↓
corrisponde alla tabella poller
   ↓
AUTORIZZATO

Quindi l'attaccante non ha bisogno di un account Cacti legittimo.


2. La seconda vulnerabilità — iniezione di comandi

Dopo aver bypassato il controllo di autorizzazione, la funzionalità interessante dell'endpoint è l'azione polldata.

Il percorso di esecuzione rilevante è approssimativamente:

root@kitploit:~
remote_agent.php
      │
      ▼
    polldata
      │
      ▼
 poll_for_data()
      │
      ├── host_id
      ├── local_data_ids
      └── poller_id
              │
              ▼
       Ricerca poller_item
              │
              ▼
 POLLER_ACTION_SCRIPT_PHP
              │
              ▼
          proc_open()
              │
              ▼
       Esecuzione comandi OS

L'errore importante è la gestione di poller_id.

L'applicazione lo recupera utilizzando:

root@kitploit:~
get_nfilter_request_var()

piuttosto che imporre che sia un intero.

Quel valore controllato dall'attaccante diventa infine parte di un comando passato a proc_open() di PHP. L'avviso ufficiale identifica esplicitamente questo come la primitiva di iniezione di comandi. (GitHub)

Concettualmente:

root@kitploit:~
input controllato dall'attaccante
        ↓
     poller_id
        ↓
 concatenazione di stringhe
        ↓
     proc_open()
        ↓
 comando del sistema operativo

Questa è la parte critica della vulnerabilità.


3. Perché diventa RCE

La cosa interessante per la tua analisi del PoC è che nessuno dei due bug da solo racconta l'intera storia.

È una catena di vulnerabilità:

root@kitploit:~
        ┌──────────────────────────┐
        │ Attaccante non autenticato │
        └────────────┬─────────────┘
                     │
                     ▼
          remote_agent.php
                     │
                     ▼
        Bypass dell'autorizzazione
          tramite logica IP client
                     │
                     ▼
              polldata
                     │
                     ▼
            Ricerca poller_item
                     │
                     ▼
       POLLER_ACTION_SCRIPT_PHP
                     │
                     ▼
             input dell'attaccante
              → poller_id
                     │
                     ▼
                proc_open()
                     │
                     ▼
              Esecuzione di comandi
                     │
                     ▼
                    RCE

Questa è una distinzione molto importante da fare nel tuo write-up:

CVE-2022-46169 non è semplicemente "un parametro difettoso in remote_agent.php." È una vulnerabilità concatenata di bypass dell'autorizzazione + iniezione di comandi.

L'avviso ufficiale conferma che la condizione di esecuzione vulnerabile richiede un poller_item la cui azione è POLLER_ACTION_SCRIPT_PHP. (GitHub)


4. Prerequisito ambientale

Il tuo PoC dovrebbe documentare esplicitamente questo perché è un dettaglio analitico importante.

Il target necessita di un poller_item appropriato configurato con:

root@kitploit:~
POLLER_ACTION_SCRIPT_PHP

L'avviso di Cacti nota che questo è comune nelle installazioni di produzione perché modelli predefiniti come Device - Uptime e Device - Polling Time possono creare queste voci. (GitHub)

Quindi non scrivere:

"Ogni installazione di Cacti 1.2.22 è automaticamente sfruttabile."

Un'affermazione tecnicamente più accurata è:

Cacti 1.2.22 è vulnerabile e l'esecuzione di comandi riuscita dipende dalla presenza di una configurazione poller_item appropriata.


5. Perché host_id e local_data_id contano

poll_for_data() non esegue semplicemente il poller_id fornito.

Prima interroga poller_item utilizzando valori corrispondenti a:

root@kitploit:~
host_id
local_data_id

Poi esamina l'azione dell'elemento risultante.

La condizione vulnerabile è effettivamente:

root@kitploit:~
host_id
   +
local_data_id
   ↓
poller_item
   ↓
action == POLLER_ACTION_SCRIPT_PHP
   ↓
percorso di esecuzione vulnerabile

L'avviso originale nota che questi identificatori possono essere scoperti perché le voci rilevanti esistono nel database dell'applicazione e che voci adatte probabilmente esistono nelle installazioni produttive. (GitHub)

Per un PoC pubblico, dimostrerei questo prerequisito esplicitamente piuttosto che nasconderlo.


6. Metodologia PoC sicura

Per qualcosa che pubblichi, raccomando di far dimostrare al PoC l'esecuzione di comandi senza dare ai lettori un payload di reverse-shell armato.

Ad esempio, struttura la tua dimostrazione come:

root@kitploit:~
1. Distribuisci Cacti 1.2.22 in una VM isolata
2. Configura un poller_item usando POLLER_ACTION_SCRIPT_PHP
3. Conferma che remote_agent.php sia raggiungibile
4. Dimostra che la decisione di autorizzazione viene influenzata
5. Raggiungi il percorso di esecuzione polldata
6. Usa un marcatore di esecuzione di comandi innocuo
7. Cattura le prove risultanti dall'applicazione/log
8. Aggiorna a 1.2.23
9. Ripeti il test
10. Dimostra che la vulnerabilità non è più sfruttabile

Questo ti dà una dimostrazione di vulnerabilità legittima senza trasformare il write-up in un'arma RCE Internet pronta all'uso.


7. Analisi del codice sorgente per il tuo report

Puoi dividere il codice vulnerabile in tre aree.

A. remote_agent.php

Responsabile dell'esposizione della funzionalità remote-agent e dell'invio dell'azione richiesta.

root@kitploit:~
remote_agent.php
      │
      └── action = polldata
                 │
                 ▼
            poll_for_data()

B. lib/functions.php

Contiene get_client_addr().

Il design problematico è fidarsi dei valori derivati da HTTP quando si decide l'indirizzo di rete effettivo del richiedente.

L'avviso ufficiale elenca più variabili correlate a HTTP che vengono ispezionate prima di ripiegare sull'indirizzo remoto effettivo. (GitHub)

C. proc_open()

Il sink pericoloso finale è la costruzione del comando PHP eseguito tramite proc_open().

L'avviso identifica il flusso vulnerabile come:

root@kitploit:~
poller_id
    ↓
get_nfilter_request_var()
    ↓
costruzione del comando
    ↓
proc_open()

(GitHub)


8. Perché la patch lo corregge

L'avviso di Cacti identifica due importanti modifiche di rimedio.

Primo, poller_id dovrebbe essere trattato come un intero:

root@kitploit:~
get_nfilter_request_var()
             ↓
get_filter_request_var()

Secondo, il valore dovrebbe inoltre essere sottoposto a shell-escape prima di essere incorporato nel comando:

root@kitploit:~
escapeshellarg($poller_id)

L'avviso raccomanda specificamente entrambe le misure. (GitHub)

Anche il lato dell'autorizzazione deve smettere di consentire a un attaccante di influenzare arbitrariamente l'IP client utilizzato per l'autorizzazione. (GitHub)


9. Confronto versioni

root@kitploit:~
Cacti 1.2.22
     │
     ├── vulnerabile
     ├── bypass dell'autorizzazione
     ├── iniezione di comandi
     └── potenziale RCE non autenticata
     
Cacti 1.2.23
     │
     └── CVE-2022-46169 corretta

L'avviso del fornitore elenca 1.2.22 come interessata e 1.2.23 come release 1.2.x corretta. (GitHub)

L'avviso di sicurezza di Amazon descrive indipendentemente il problema come la possibilità per un attaccante non autenticato di eseguire comandi arbitrari e gli assegna un punteggio CVSS di 9.8. (AWS Training and Certification)


10. Buon titolo per il tuo PoC pubblicato

Userei qualcosa come:

CVE-2022-46169 — Iniezione di comandi non autenticata / RCE in Cacti 1.2.22

O più tecnico:

CVE-2022-46169: Analisi della catena di bypass dell'autorizzazione e iniezione di comandi del Remote Agent di Cacti 1.2.22

E il tuo riepilogo della vulnerabilità può dire:

Cacti 1.2.22 contiene una catena di vulnerabilità critica nella funzionalità remote-agent. Un attaccante può manipolare la logica di determinazione dell'indirizzo client per bypassare il controllo di autorizzazione del remote-agent. Una volta raggiunta la funzionalità polldata, una validazione insufficiente del parametro poller_id consente a dati controllati dall'attaccante di raggiungere un comando eseguito tramite proc_open(). In configurazioni contenenti un elemento poller POLLER_ACTION_SCRIPT_PHP, ciò può risultare in esecuzione remota di comandi non autenticata. Il problema è stato corretto in Cacti 1.2.23. (GitHub)

Una correzione importante per la tua ricerca: non confondere questo con CVE-2023-39362. Quella successiva RCE di Cacti interessa 1.2.24 ed è stata corretta in 1.2.25, quindi non è la vulnerabilità che vuoi per un PoC su 1.2.22. (NVD)