La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

La possibilità di downgradare dispositivi basati su RouterOS (Mikrotik) da remoto mette a rischio centinaia di migliaia di dispositivi di rete. La vulnerabilità è legata all'avvelenamento della cache DNS del protocollo Winbox e consente di caricare un firmware obsoleto (con reset della password "di default") o modificato sul dispositivo.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Dettagli sulla vulnerabilità

Il terminale RouterOS supporta il comando di risoluzione per la ricerca DNS.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Questa richiesta è gestita da un file binario chiamato resolver. Il resolver è uno dei tanti file binari collegati al protocollo Winbox di RouterOS. A un livello alto, i "messaggi" inviati alla porta Winbox possono essere instradati a vari file binari in RouterOS in base a uno schema di numerazione basato su array.

Per impostazione predefinita, la funzione del server DNS è disabilitata in RouterOS.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Tuttavia, anche con la funzione del server disattivata, il router mantiene una propria cache DNS.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Quando facciamo una richiesta usando winbox_dns_request, ad esempio example.com, il router memorizzerà il risultato nella cache.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Poiché possiamo specificare il server DNS attraverso il quale deve passare la richiesta, è banale inserire indirizzi errati. Ad esempio, si può configurare un'implementazione del server DNS di Philipp Klaus, per rispondere sempre con un record A contenente l'indirizzo IP 192.168.88.250.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

Ora, se cerchiamo example.com tramite Winbox, possiamo vedere che la cache DNS del router è avvelenata.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

Certo, l'avvelenamento di example.com non è molto utile, poiché il router non lo utilizzerà effettivamente. Tuttavia, il router necessita di contattare upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com e download.mikrotik.com. E grazie a un'altra vulnerabilità, c'è la possibilità di avvelenarli tutti contemporaneamente.

def dns_response(data):
    request = DNSRecord.parse(data)
    reply = DNSRecord(DNSHeader(
        id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
    qname = request.q.qname
    qn = str(qname)
    reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
    reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    reply.add_answer(RR("download.mikrotik.com",ttl=604800,
        rdata=A("192.168.88.250")))
    print("---- Reply:n", reply)
    return reply.pack()

Il router richiede un'autorizzazione, ma noi ne forniamo cinque in cambio. Il router memorizza nella cache tutte queste risposte in modo errato.

La vulnerabilità di RouterOS mette a rischio centinaia di migliaia di dispositivi

È chiaro che questo attacco è utile anche se il router funge da server DNS, poiché consente di attaccare i clienti del router.

Inoltre, questo attacco consente di sfruttare una vulnerabilità più grave: effettuare un downgrade o un backport della versione di RouterOS. L'attaccante ricrea la logica del server di aggiornamento, incluso il changelog, e costringe RouterOS a considerare una versione obsoleta (vulnerabile) come attuale. Qui il pericolo risiede nel fatto che durante l'"aggiornamento" della versione, la password dell'amministratore viene reimpostata su "predefinita" — un malintenzionato può accedere al sistema con una password vuota!

Guarda il video

L'attacco funziona, anche se l'autore implementa ulteriori vettori, che includono anche l'inserimento di un backdoor nel firmware, ma questa è già una tecnica superflua e il suo utilizzo per scopi illeciti è contro la legge.

Protezione

La semplice disattivazione di Winbox consente di proteggersi da questi attacchi. Nonostante la comodità di amministrazione tramite Winbox, è meglio utilizzare il protocollo SSH.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster