Quando si digita un URL nella barra degli indirizzi del browser o si fa clic su un link, il nome viene tradotto in un indirizzo IP in modo che il sistema possa connettersi al server remoto. Questo processo si chiama risoluzione del nome di dominio ed è posto in essere da un server DNS. La richiesta di trasformazione dell'”indirizzo mnemonico” (ad esempio www.google.it) in un indirizzo IP avviene di solito in modo non crittografato. Ciò significa che il provider Internet e altre parti che monitorano la connessione dell’utente possono verificare quali siti egli visita.
Per proteggere le attività di risoluzione dei nomi di dominio, è possibile impostare a livello di browser Web o di intero sistema operativo un DNS che crittografa le richieste ricevute e le risposte inviate al client.
macOS Sequoia 15 e le precedenti versioni del sistema Apple non rispettano la cifratura delle richieste DNS
Gli sviluppatori di Little Snitch, un apprezzato firewall sviluppato per i sistemi Apple macOS, si sono tuttavia accorti di un problema piuttosto rilevante. Con la crittografia DNS abilitata, tutte le operazioni di risoluzione dei nomi dei siti Web sono instradate tramite Little Snitch ed eseguite, appunto, in forma cifrata.
A questo scopo, Little Snitch registra un proxy DNS. macOS dovrebbe quindi inviare tutte le richieste di risoluzione DNS a quel proxy, che a sua volta gestisce l’attività in forma crittografata. Il punto chiave è proprio questo: tutte le richieste devono essere instradate tramite il proxy configurato.
Durante le indagini svolte dai tecnici di Little Snitch, è emerso che alcune richieste DNS, in particolare quelle effettuate tramite determinate API legacy di basso livello, non vengono mai passate al proxy DNS. Un bug in macOS Sequoia (presente però almeno a partire da macOS 14.5 Sonoma) fa sì che alcune richieste bypassino il proxy DNS e siano trasmesse in chiaro al name server predefinito del sistema.
Quali sono i sistemi affetti dal problema
Secondo Little Snitch, il problema riguarda qualsiasi tipo di proxy DNS. È quindi bene tenere presente che parte delle richieste di risoluzione dei nomi a dominio potrebbero transitare attraverso DNS non cifrati.
Le query DNS eseguite tramite API di livello superiore non sembrano essere interessate dal bug appena venuto a galla. Ad esempio, la navigazione Web in Safari o Chrome funziona appoggiandosi al DNS crittografato, se correttamente impostato sul sistema.
Come verificare il trasferimento dei dati in chiaro
Little Snitch invita comunque gli utenti a verificare, loro stessi, l’entità della problematica. Dopo aver abilitato l’uso del proxy DNS, basta avviare Wireshark e attivare un filtro che effettui la cattura dei pacchetti dati sulla porta 53 (utilizzata per la risoluzione DNS in chiaro). Utilizzando il seguente codice in un Xcode playground, ambiente interattivo di sviluppo fornito da Xcode, l’IDE (Integrated Development Environment) ufficiale di Apple per lo sviluppo di applicazioni su macOS e iOS, si può verificare che la richiesta DNS non è affatto gestita tramite proxy:
import Foundation
let domain = "dnsproxytest.com"
var result: UnsafeMutablePointer<addrinfo>?
let status = getaddrinfo(domain, nil, nil, & result)
In più, Little Snitch Network Monitor non mostra alcuna indicazione rispetto a questa specifica richiesta perché la query di risoluzione DNS scavalca completamente il filtro di rete impostato in precedenza.
A questo punto tocca agli sviluppatori Apple confermare il problema e risolvere il bug in macOS.