WebRTC leaks: como seu navegador entrega seu IP real
Privacy & security experts building a better VPN.
Você conecta na sua VPN. A status bar diz que você está protegido. Carrega um site. O site silenciosamente pede pro seu navegador o endereço IP real: não o da VPN, o que seu provedor de fato atribuiu. O navegador entrega. Você não vê prompt, não vê aviso, e a VPN está fazendo exatamente o que prometeu.
Isso é WebRTC leak. O culpado é o navegador, não a VPN. E funciona em todo navegador moderno até você desabilitar.
O que é WebRTC
WebRTC (Web Real-Time Communication) é um browser API que provê voz e vídeo no navegador. Google Meet, canais de voz do Discord, huddles do Slack, Whereby, a parte in-browser do Zoom: todos usam WebRTC. Também usam transferências de arquivo diretas, screen sharing e botões de "clique pra ligar" em páginas de suporte.
Pra conexões peer-to-peer funcionarem, o navegador precisa saber seu IP público. É assim que o outro lado te alcança. WebRTC resolve isso via STUN server: o navegador pergunta pra um STUN server público "de qual endereço eu vim?". O STUN server responde com o IP que vê. O navegador cacha e entrega pra qualquer página que pergunte via WebRTC API.
A arquitetura fazia sentido em 2011, quando WebRTC foi projetado. Peer-to-peer latency-sensitive era o caso de uso. Privacidade contra sites arbitrários não estava no documento de design.
Por que VPN não conserta isso
VPN tunela seu tráfego de rede. A troca STUN do WebRTC opera em cima disso, mas a resposta que o navegador cacha é seu IP real, não o do túnel, em dois casos:
Caso 1: STUN foi consultado antes da VPN conectar. O navegador aprendeu seu IP real no startup ou numa rede anterior. Cachou. A página pede endereços IP do WebRTC e pega o valor real cachado.
Caso 2: VPN não tunela UDP pro STUN server. Em algumas configurações VPN existem edge-cases de roteamento. O pacote STUN escapa do túnel.
Mesmo com VPN devidamente tunelada, o cache STUN a nível de navegador é superfície de ataque. Páginas não precisam consultar STUN elas mesmas; só pedem ao WebRTC os endereços IP que o navegador já sabe.
Exposed vs leaking
Terminologia importa porque a reação é diferente.
Exposed. Você não está em VPN, visita uma página, a página vê seu IP real. É comportamento esperado. Não é leak, é a internet funcionando como projetada.
Leak (vazamento). Você ESTÁ em VPN, a página deveria ver só o IP da VPN, mas o WebRTC ainda entrega seu IP real. Isso é leak. A privacidade que você achou que tinha está quebrada.
O teste de WebRTC leak do Fexyn mostra em qual caso você está. Com VPN conectada, o IP público que aparecer deve ser o IP do servidor Fexyn. Se for seu IP de casa: você está vazando.
O que o atacante vê do leak
Mesma coisa que sem VPN:
- Seu IP público real
- Geolocalização aproximada (geralmente cidade, às vezes bairro pra provedores residenciais)
- Seu provedor
- Um identificador persistente que pode ser correlacionado entre visitas e entre sites
Pior que sem VPN: o leak dá a eles tanto seu IP real quanto o IP da VPN. Podem correlacionar entre sessões, construir perfil que te segue independente da VPN estar de pé ou não, e usar o próprio IP da VPN como fingerprint.
Pra modelos de ameaça onde geolocalização importa, jornalistas, ativistas, qualquer um se escondendo de stalker, qualquer um usando VPN pra evitar tracking específico de jurisdição: um WebRTC leak silenciosamente anula a proteção.
Fixes por navegador
A cura vive no navegador, não na VPN. Cada navegador trata WebRTC diferente.
Firefox: desabilitar completo
Opção mais limpa. Firefox permite desabilitar WebRTC inteiramente:
- Abra uma nova aba e vá pra
about:config. Aceite o aviso. - Procure
media.peerconnection.enabled. - Coloque em
false. - Reinicie Firefox.
Custo: chamadas de vídeo em qualquer aplicação baseada em navegador param de funcionar. Slack huddles, Google Meet, Discord voice no navegador: mortos até você ligar de volta. Pra maioria dos usuários focados em privacidade, isso é aceitável; chamadas são feitas no app desktop.
Brave: toggle embutido
Brave vem com setting orientado a privacidade:
- Abra
brave://settings. - Procure "WebRTC".
- Coloque "WebRTC IP Handling Policy" em Disable non-proxied UDP.
Esse é o setting mais forte que não quebra WebRTC inteiramente. Chamadas funcionam; tráfego STUN é restringido pelo caminho de proxy. Pra usuários Brave em VPN: o setting certo.
Chrome e Edge: precisa extension
Nem Chrome nem Edge têm WebRTC toggle embutido na UI de settings. Precisa extension. Instale uma de:
- uBlock Origin com filtro "Prevent WebRTC from leaking local IP addresses" habilitado. uBlock Origin é o ad-blocker certo de qualquer jeito; isso é bonus grátis.
- WebRTC Network Limiter (publicado pela própria Google). Single-purpose, restringe WebRTC ao caminho de proxy.
Evite extensions aleatórias de "WebRTC fix" com uma estrela na Chrome Web Store. A categoria atrai extensions de baixa qualidade e às vezes maliciosas. Fique com uBlock Origin ou o do Google.
Safari
Safari implementa WebRTC mas não expõe toggle. Se está no Safari e WebRTC leaks te preocupam: migre pra Brave (Webkit-based, tem toggle) ou Firefox (Gecko-based, desabilitar completo).
Como o Fexyn lida com isso
O Fexyn não tenta monkey-patch seu navegador. Comportamento WebRTC do navegador é nível de navegador, e fora do que VPN pode ou deve sobrescrever.
O que o Fexyn faz:
- Tunela todo tráfego UDP, incluindo STUN, quando o protocolo permite. WireGuard tunela tudo por padrão. Configurações VLESS Reality e OpenVPN tunelam UDP pelo mesmo caminho.
- Recomenda settings específicos de navegador na página de suporte.
- Provê uma ferramenta de checagem, pra você verificar combinação específica de navegador/setting.
A combinação (STUN tunelado por VPN mais WebRTC desabilitado ou restringido no lado do navegador) fecha o leak.
Re-teste depois do fix
Depois de mudar settings de navegador, reinicie o navegador e rode o teste de novo em fexyn.com/tools/webrtc-leak-test. O IP público que aparecer deve bater com o servidor Fexyn. O IP local deve estar vazio ou mostrar só o endereço do adaptador do túnel VPN.
Se ainda vê seu IP público real, a mudança não foi aplicada. Cheque que:
- O navegador foi de fato reiniciado (fechar abas não basta; saia do app)
- Pra Brave o setting é "Disable non-proxied UDP", não "Disable non-proxied UDP and force proxy"
- Pra Chrome/Edge a extension está habilitada, não só instalada
O que WebRTC leak não é
WebRTC leaks são especificamente sobre exposição de IP via browser API. Não:
- Afetam aplicações não-navegador. Um app desktop nativo em VPN não tem esse problema.
- Afetam apps mobile que têm seu próprio networking. Apps iOS/Android que não embedam webview geralmente não expõem o IP da VPN via WebRTC.
- Indicam que o próprio túnel VPN está quebrado. O túnel está bem; o navegador está voluntariamente entregando informação acima do nível do túnel.
Leitura relacionada
- Teste de WebRTC leak
- Teste de DNS leak
- Fix de WebRTC leak
- Como DNS leaks expõem localização
- O que seu provedor vê sem VPN
Experimente o Fexyn grátis por 7 dias. O túnel faz a parte dele; fixes de navegador são setting de uma vez.