STUN (Session Traversal Utilities for NAT) è una tecnologia descritta da RFC5389 per scoprire facilmente l’indirizzo privato di un host che si trova dietro ad un filtro NAT.
Un server STUN ha lo scopo di enumerare tutti gli indirizzi privati o pubblici di un host e di permettere ad altri software di utilizzare quell’informazione.
I pacchetti STUN mascherano con un XOR l’indirizzo che viene trasmesso nella parte dati dei pacchetti per evitare che le tecnologie di ispezione dei pacchetti a livello superficiale trascrivano il contenuto e vanifichino lo scopo del servizio.
Le porte standard su cui ascolta STUN sono 3478 UDP o TCP e 5349 per la versione su TLS.
Approntare un server STUN è abbastanza semplice, in quanto esistono versioni gratuite (licenza Apache 2.0) dei sorgenti, in alternativa si possono utilizzare server pubblici come stun.services.mozilla.com
L’implementazione di WebRTC da parte di Firefox e Chrome permette di utilizzare questa funzione all’interno di uno script JavaScript per calcolare in tempo reale gli indirizzi privati utilizzati dal client e, opzionalmente, trasmetterli al server.
WebRTC non ha le limitazioni di XMLHttpRequest, quindi è possibile eseguire chiamate anche a server all’esterno del dominio della pagina che si sta visitando, quindi mentre si visita la pagina di un sito è possibile utilizzare un server STUN di un altro dominio.
Inoltre in questo momento i plugin di blocco degli annunci pubblicitari e le consolle di sviluppo non riescono ad intercettare le chiamate WebRTC, rendendo completamente invisibile le chiamate alle estensioni che girano all’interno dei browser.
Daniel Roesler ha creato uno script che dimostra quanto sia facile implementare questa tecnologia.
Una versione leggermente modificata di quello script è disponibile anche all’URL api.siamogeek.com/indirizzoprivato.html in cui su può vedere l’intera risposta del server STUN e non solamente la parte filtrata degli indirizzi IPv4.
Sembra che, al momento della pubblicazione di questo articolo, lo script non giri correttamente sulle piattaforme Apple. Anche Internet Explorer non è in grado di eseguire correttamente questo script.