Sono state rilevate ben sette vulnerabilità in dnsmasq, un software che fornisce un servizio di cache DNS e server DHCP e che, a causa delle falle di sicurezza, espone a seri rischi cyber milioni di dispositivi di rete, IoT ed embedded di oltre quaranta fornitori sui quali il software è installato.
Qualora venissero sfruttate con successo, le vulnerabilità in dnsmasq potrebbero consentire ad un attaccante remoto di dirottare le connessioni a Internet del target e mandare in crash le applicazioni di rete.
Indice degli argomenti
Dnsmasq: i dispositivi a rischio
Vale la pena fare un esempio delle aziende più famose (in ordine alfabetico) che utilizzano dnsmasq sui propri prodotti: Aruba, Asus, AT&T, Cisco, D-Link, Dell, Google, Huawei, IBM, Motorola, Netgear, Parrot (droni), Qualcomm, RedHat, Siemens, Tesla, Ubiquiti, Volkswagen, Xiaomi, ZTE, Zyxel.
Il software, in particolare, è presente su molti router (siano essi “home” o “comemrcial”) e server (Wi-Fi hotspot, Enterprise “guest networks”, virtualizzazioni, captive portal e via dicendo).
Cos’è il DNS e a cosa serve
Per comprendere la gravità delle vulnerabilità in dnsmasq è utile ricordare brevemente cos’è e a cosa serve il protocollo DNS.
Acronimo di Domain Name System, il DNS viene utilizzato per assegnare nomi agli host della rete. Se immaginassimo internet come una vasta metropoli, potremmo paragonare gli IP alle coordinate di longitudine e latitudine che identificano in maniera univoca una data abitazione.
Il DNS è l’interprete che traduce le coordinate di un luogo nel suo indirizzo (Via Appia Antica, 23, Roma). Il DNS, quindi, “risolve” l’indirizzo IP (216.58.208.174) nel suo “nome” (www.google.com).
Il protocollo DNS ha una storia di vulnerabilità che risale al famoso attacco Kaminsky del 2008. Tuttavia, gran parte di Internet si affida ancora al DNS come fonte di integrità, così come ha fatto per oltre un decennio, ed è quindi esposta ad attacchi che possono mettere in pericolo l’integrità di parti del web.
Cos’è dnsmasq e a cosa serve
Dnsmasq viene utilizzato per:
- immagazzinare i risultati delle richieste di “risoluzione” al fine di migliorare la velocità di connessione a siti già visitati;
- può essere usato per fornire indirizzi IP interni ed instradare i computer in una LAN;
- fornisce il servizio di server Preboot Execution Enviroment (PXE), cioè consente ad un device di eseguire il boot mediante una connessione di rete (solitamente avviene tramite supporti di memoria di massa).
Dnsmasq: i rischi a cui sono esposti i dispositivi su cui è installato
Le vulnerabilità in dnsmasq, rilevate dalla Società Israeliana JSOF, sono di due tipi:
- DNS Cache poisoning attacks: CVE-2020-25686, CVE-2020-25684, CVE-2020-25685;
- Buffer overflow vulnerabilities: CVE-2020-25687, CVE-2020-25683, CVE-2020-25682, CVE-2020-25681
Che cosa è il DNS Cache Poisoning
Un utente malintenzionato è in grado di reindirizzare le comunicazioni effettuate dal target per la risoluzione del nome, di un dato sito Web.
Modificando la cache dei name server è possibile alterare l’associazione IP/Nome del server. Tornando all’esempio della metropoli, equivale a falsificare le indicazioni date ad un ignaro passante che domanda quale sia la via per raggiungere un determinato luogo. In tal modo è possibile:
- propagare un virus;
- attuare un attacco Denial of Service (DoS);
- perpetrare una campagna di phishing;
- monitorare il traffico degli utenti.
Che cosa sono le buffer overflow vulnerabilities
Detto anche “buffer overrun”, il buffer overflow è una condizione di errore che si verifica quando i dati in ingresso straripano in parti di memoria circostanti.
Usando un gergo più tecnico, il buffer overflow si verifica quando la stringa in input risulta più grande del buffer dove dovrebbe essere immagazzinata l’informazione.
Questo porta alla sovrascrittura delle zone di memoria adiacenti al buffer, corrompendo e sovrascrivendo i dati di quel determinato settore.
Spesso l’overflow produce un crash dell’applicazione, ma crea l’opportunità per l’attaccante di eseguire il codice arbitrario.
I dettagli delle vulnerabilità in dnsmasq
CVE-2020-25681 – Common Vulnerability Scoring System (CVSS): 8.1 – Le versioni di dnsmasq precedenti alla 2.83 sono vulnerabili a un overflow del buffer basato su heap in sort_rrset (), quando viene utilizzato DNSSEC. Ciò può consentire ad un utente malintenzionato di scrivere dati arbitrari nella memoria del target, al fine di provocarne il crash (semplificando, un Fuzzing del device).
CVE-2020-25682 – Common Vulnerability Scoring System (CVSS): 8.1 – Le versioni di dnsmasq precedenti alla 2.83 sono vulnerabili ad un overflow del buffer (quando DNSSEC è abilitato) nella funzione extract_name () a causa di un mancato controllo sulla lunghezza di immissione. Ciò può consentire ad un utente malintenzionato di scrivere dati arbitrari nella memoria del target al fine di provocarne il crash (semplificando, un Fuzzing del device).
CVE-2020-25683 – Common Vulnerability Scoring System (CVSS): 5.9 – Le versioni di dnsmasq precedenti alla 2.83 con DNSSEC abilitato, sono soggette a un overflow del buffer basato sull’heap. Un utente malintenzionato, sfruttando la mancanza di controlli sulla funzione in rfc1035.c: extract_name() , potrebbe manipolare le query al DNS, causando un overflow in memoria.
CVE-2020-25687 – Common Vulnerability Scoring System (CVSS): 5.9 – Le versioni di dnsmasq precedenti alla 2.83 sono vulnerabili, quando DNSSEC è abilitato, ad un overflow del buffer basato su heap con memcpy di grandi dimensioni in sort_rrset (). Un utente malintenzionato, sfruttando la mancanza di controlli sulla funzione in rfc1035.c: extract_name(), potrebbe manipolare le query al DNS, causando un overflow in memoria.
CVE-2020-25684 – Common Vulnerability Scoring System (CVSS): 4 – Nelle versioni dnsmasq <2.83, la mancanza dell’implementazione di una corretta associazione indirizzo / porta, rende più semplice falsificare le risposte da e verso il target.
CVE-2020-25685 – Common Vulnerability Scoring System (CVSS): 4 – Nelle versioni precedenti alla 2.83, la mancanza di controlli del nome della risorsa di query (RRNAME) funzione reply_query, consente agli aggressori di perpetrare un attacco di DNS Cache Poisoning.
CVE-2020-25686 – Common Vulnerability Scoring System (CVSS): 4 – Nelle versioni precedenti alla 2.83, le richieste multiple di query DNS per la medesima risorsa (RRNAME) consentono agli attaccanti di falsificare il traffico DNS, utilizzando un attacco RFC 5452 e permettendo un DNS Cache Poisoning.
I possibili scenari di attacco
Alla luce di quanto visto finora, possiamo provare a delineare i possibili scenari di attacco a cui sono esposti i dispositivi su cui è installato e in esecuzione dnsmasq:
- facendo riferimento a Shodan, circa un milione di server dnsmasq sono liberamente raggiungibili attraverso Internet;
- un server dnsmasq in stato “listening” all’interno di una rete LAN potrebbe essere utilizzato per perpetrare l’attacco da qualsiasi dispositivo facente parte della rete;
- anche con un accesso di livello “base”, attraverso il web-browser è possibile reindirizzare il traffico o sniffarne il contenuto se il dnsmasq è in listening mode;
- le vulnerabilità potrebbero essere sfruttate su una rete Wi-Fi aperta come, ad esempio, quella guest di una multinazionale, di un congresso o di un aeroporto.
Come fare fronte alla minaccia
Per mettere in sicurezza i dispositivi su cui sono installate le versioni di dnsmasq vulnerabili, valgono l seguenti regole:
- contattiamo il fornitore per informarci e sapere se il nostro device utilizza dnsmasq;
- utilizziamo la query: dig +short chaos txt version.bind per conoscere la versione di dnsmasq installata sui dispositivi;
- aggiorniamo alla versione 2.83 o superiore.
Se non possiamo aggiornare, potremmo implementare alcuni workarounds:
- se non necessario: configurare dnsmasq in modo che non sia in “listen mode” sulle interfacce WAN;
- ridurre il numero massimo di query (valore predefinito 150) che possono essere inviate, utilizzando il comando –dns-forward-max = <queries>;
- disabilitare DNSSEC;
- dove possibile, utilizzare protocolli diversi, ad esempio DNS over HTTPS (DoH);
- ridurre la dimensione massima dei messaggi EDNS