Discussione CVE-2023-28xxx - Blind OS Command Injection nei router Zyxel - Commento personale senza tech insight

Netcat

Helper
17 Gennaio 2022
550
155
404
866
Sui motori IoT come Shodan o Censys sono presenti molte istanze attive di questi router (molte anche in Italia), che apparentemente espongono solo porte innoque come 443 o 8443.

Comunque, sia Shodan che Censys nascondono un piccolo segreto su questi router Zyxel, che non vogliono rivelarti.

Tramite la Porta UDP 500 (censurata dagli IoT), dov'è in ascolto Internet Key Exchange Packet Decoder, è possibile inviare un pacchetto malformato che permette di eseguire codice random, il risultato viene eseguito nel contesto di root . Il motivo per cui ho deciso di dedicare un thread a questa vulnerabilità specifica - anche se un po datata - è perché dimostra fino a che punto possono essere sofisticati gli attacchi. Ad essere sincero infatti, mi sono sempre fidato troppo delle scansioni IoT, e una chicca del genere di sicuro mi sarebbe sfuggita.

Il bug è causato un errore in IKE Decoder, sembra che durante il processo di decoding ci siano dei parametri non-quotati o comunque non sanificati del tutto, permettendo di eseguire comandi sull'OS sottostante. Zyxel incorpora una variante di Linux arch MIPS64, fornita anche di curl e wget di default (non capita spesso) - queste 2 utility possono essere usate nel post-exploitation per scaricare stager più complessi, ma durante l'approccio iniziale opterei per una raw reverse shell in bash - dato che essendo leggere, hanno meno probabilità di mandare il target in crash e più propense a bypassare i sistemi difensivi.

La vulnerabilità è di tipo 'Blind' - cosa significa questo? Che non è possibile avere al 100% la certezza che il target sia vulnerabile facendo dei semplici check preliminari, vengono restituite risposte ambigue o non arrivano proprio da parte del target, ma è vulnerabile. Le vulnerabilità di tipo Blind sono le più difficili da confermare, e richiedono spesso proprio un ping-back o una rev-shell minimale per essere confermate.

Nel caso di Zyxel, raccomando comunque di fare i test con attenzione, perché succede qualcosa di strano dopo un tentativo andato a buon fine (anche inviando del codice innoquo). Sembra che il router non risponda più al ping, come fosse 'morto' - ma la cosa è temporanea, fortunatamente. Questo significa che la vulnerabilità lascia indicatori di compromissione molto evidenti, e potrebbe costringere il target a dover riavviare il router per risolvere un qualche tipo di crash temporaneo.

Il vero problema, è che un attaccante malintenzionato può sfruttare questa falla anche semplicemente per formattare il router da remoto, dal momento che il codice è eseguibile nel contesto dell'user root. I più 'sgamati' potrebbero mettersi a fare lateral movement nella subnet del target, e fare MiTM con un reverse proxy, ma sono dettagli.

Conclusione
La vulnerabilità sta ormai 'invecchiando', dato che è di 2 anni fa, ma alcune istanze sembrano essere ancora vulnerabili. L'importanza di aggiornare i propri router è proprio questa. I miei ringraziamenti vanno a TRAPA Security Team per aver scoperto questa vulnerabilità nel cuore di Zyxel.