Vulnerabilidade Crítica em Clientes VLESS? Segure a Minha Cerveja...
Um desenvolvedor explora a recente vulnerabilidade em clientes VLESS para Android, demonstrando como mascarar a porta SOCKS local e o IP externo, evitando a detecção de VPNs. A solução envolve o uso de Xray, tun2socks e técnicas para contornar restrições do Android, resultando em um cliente VPN mais seguro.
MundiX News·13 de abril de 2026·7 min de leitura·👁 1 views
Saudações, %username%! Faz tempo que não escrevo nada no Habr (mais de 10 anos) – a tinta secou, a pena ficou cega. E ainda assim, lendo os últimos resumos, meu interesse acadêmico despertou.
Se você perdeu e não entende do que estou falando, o cenário da informação está fervendo agora: há notícias sobre como a maioria dos aplicativos populares detecta VPNs, e o lançamento do utilitário RKNHardering com manuais sobre como combater desvios, e relatórios alarmantes sobre a liberdade na Internet em 2026. Mas o último artigo que me afetou foi um artigo sobre uma vulnerabilidade crítica de clientes VLESS, por causa da qual "todas as suas VPNs serão bloqueadas em breve".
Enxugando uma lágrima masculina causada por esse rico fluxo de emoções, me perguntei: quão difícil é detectar uma VPN no Android? Acontece que, mesmo com o uso de split tunneling, os aplicativos ainda têm muitas oportunidades de detecção (embora não 100%, mas ainda assim) :-/.
O que há com os sinais de VPN?
Para começar, reuni pensamentos e ideias sobre quais sinais da presença de uma VPN um aplicativo pode coletar e esbocei uma pequena ferramenta de teste. Não há muito sentido em publicá-lo, tudo o que ele faz já está no mesmo RKNHardering (portanto, a captura de tela dele).
A teoria foi confirmada pela prática: um aplicativo que está nas exceções da VPN ainda encontra seus sinais. Ele vê a presença de uma interface tun, vê rotas no sistema, uma lista de pacotes instalados e, o mais importante, vê um SOCKS local levantado no dispositivo e pode descobrir o IP externo do servidor VPN. Infelizmente, não há nada que possa ser feito com a maioria desses sinais (como uma lista de pacotes ou rotas), já que o Android é um sistema operacional bastante livre a esse respeito. Mas você pode e deve lutar contra a porta SOCKS aberta, que causou pânico no último artigo.
Ideia: escondendo as pontas soltas
Já que o entusiasmo aumentou, ele precisa ser direcionado na direção certa. No mesmo artigo sobre a vulnerabilidade VLESS, o autor notou corretamente uma coisa assustadora: atualmente, nenhum cliente VPN popular no Android mascara sua porta SOCKS local e permite que você descubra o IP externo. Todos eles (v2RayTun, V2BOX, v2rayNG, Hiddify, etc.) a brilham para o exterior como um farol.
Como os clientes são geralmente organizados? Um kernel é levantado, que abre um proxy SOCKS local, e o tráfego do sistema é envolvido nele.
Para fechar este SOCKS de olhares curiosos de outros aplicativos, você precisa garantir que o proxy seja levantado em uma porta aleatória e seja protegido por credenciais aleatórias, que são geradas em tempo real e conhecidas apenas pelo próprio aplicativo cliente. Como resultado, nenhum outro software no telefone (mesmo que escaneie o localhost) invadirá este proxy e não detectará o IP externo.
Nos bastidores: Xray, tun2socks e contornando as restrições do sistema operacional
Com o VLESS, tudo acabou sendo simples: existe um projeto xray-core, cujas construções existem para muitas plataformas. Pegue os binários, execute-os a partir do aplicativo, use SOCKS. Mas você quer ter uma interface de rede completa (tun) no dispositivo.
O próprio Xray sabe tunelar, mas na prática acabou sendo extremamente caprichoso a esse respeito. Não importa o quanto eu tentei levantar um túnel normal com seus próprios meios, algumas armadilhas sempre surgiam. Subir a montanha não foi fácil, então foi tomada uma decisão tática para procurar alternativas.
E uma alternativa foi encontrada - tun2socks. Não há uma construção oficial para Android, mas um binário linux-arm64 compilado estaticamente é iniciado no robô verde sem quaisquer problemas. Acontece que todas as ferramentas estão lá, você só precisa de um invólucro que conecte tudo.
Arquitetonicamente, o cliente é escrito em uma mistura de Flutter, Kotlin e um pouco de C++. Algo foi delegado à IA - e regularmente batia nas mãos quando ela entrava em ação. Como resultado, ainda escrevi muito sozinho: às vezes é realmente mais fácil fazer manualmente do que obter um pedaço de silício para realizar meu plano.
Vale a pena mencionar separadamente a execução dos próprios binários. A partir do Android 10, o sistema atinge estritamente as mãos para executar arquivos executáveis do diretório de dados do aplicativo (violação W^X). Para contornar essa restrição, empacotei os arquivos executáveis em lib/ como bibliotecas .so - um truque antigo que funciona muito bem.
Em vez de lençóis de código, mostrarei apenas um trecho do log, onde você pode ver claramente como a geração e a ligação dinâmicas ocorrem:
Preste atenção à string de inicialização do tun2socks: a porta 45478 e o login/senha ousados são gerados em tempo real a cada inicialização da conexão. O descritor de arquivo da interface tun (fd://142) é passado diretamente para o binário.
Resultados
E então eu dei à luz um aplicativo funcional - TeapodStream (uma referência ao código HTTP 418 + uma dica para túnel/proxy/stream).
A principal questão: a proteção funciona?
Sim.
Verificações nos mesmos aplicativos detectores do artigo sobre a vulnerabilidade VLESS, bem como testes via RKNHardering, mostraram que eles pararam de detectar o SOCKS aberto. O proxy e o IP externo estão ocultos.
A funcionalidade ainda é trivial, mas cobre a base:
Suporte para protocolos: VLESS, VMess, Trojan, Shadowsocks.
Túnel dividido (split tunneling) - selecionando aplicativos para exclusão da VPN.
Assinaturas - atualização automática de configurações por URL.
Como resultado, estou satisfeito: estiquei meu cérebro, resolvi o problema e, como você está lendo este artigo, significa que desta vez trabalhei não apenas na experiência pessoal, mas também me atrevi a compartilhar o resultado com a comunidade)
Finalmente, quero perguntar à comunidade: quais outros marcadores não óbvios da presença de uma VPN você acha que começarão a ser usados em massa para detecção em um futuro próximo?
A todos, boa sorte!
🛡️⚡
Pare de pesquisar. Comece a hackear.
O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.
Sem cartão para começar · Planos a partir de R$49/mês
Saudações, %username%! Faz tempo que não escrevo nada no Habr (mais de 10 anos) – a tinta secou, a pena ficou cega. E ainda assim, lendo os últimos resumos, meu interesse acadêmico despertou.
Se você perdeu e não entende do que estou falando, o cenário da informação está fervendo agora: há notícias sobre como a maioria dos aplicativos populares detecta VPNs, e o lançamento do utilitário RKNHardering com manuais sobre como combater desvios, e relatórios alarmantes sobre a liberdade na Internet em 2026. Mas o último artigo que me afetou foi um artigo sobre uma vulnerabilidade crítica de clientes VLESS, por causa da qual "todas as suas VPNs serão bloqueadas em breve".
Enxugando uma lágrima masculina causada por esse rico fluxo de emoções, me perguntei: quão difícil é detectar uma VPN no Android? Acontece que, mesmo com o uso de split tunneling, os aplicativos ainda têm muitas oportunidades de detecção (embora não 100%, mas ainda assim) :-/.
O que há com os sinais de VPN?
Para começar, reuni pensamentos e ideias sobre quais sinais da presença de uma VPN um aplicativo pode coletar e esbocei uma pequena ferramenta de teste. Não há muito sentido em publicá-lo, tudo o que ele faz já está no mesmo RKNHardering (portanto, a captura de tela dele).
A teoria foi confirmada pela prática: um aplicativo que está nas exceções da VPN ainda encontra seus sinais. Ele vê a presença de uma interface tun, vê rotas no sistema, uma lista de pacotes instalados e, o mais importante, vê um SOCKS local levantado no dispositivo e pode descobrir o IP externo do servidor VPN. Infelizmente, não há nada que possa ser feito com a maioria desses sinais (como uma lista de pacotes ou rotas), já que o Android é um sistema operacional bastante livre a esse respeito. Mas você pode e deve lutar contra a porta SOCKS aberta, que causou pânico no último artigo.
Ideia: escondendo as pontas soltas
Já que o entusiasmo aumentou, ele precisa ser direcionado na direção certa. No mesmo artigo sobre a vulnerabilidade VLESS, o autor notou corretamente uma coisa assustadora: atualmente, nenhum cliente VPN popular no Android mascara sua porta SOCKS local e permite que você descubra o IP externo. Todos eles (v2RayTun, V2BOX, v2rayNG, Hiddify, etc.) a brilham para o exterior como um farol.
Como os clientes são geralmente organizados? Um kernel é levantado, que abre um proxy SOCKS local, e o tráfego do sistema é envolvido nele.
Para fechar este SOCKS de olhares curiosos de outros aplicativos, você precisa garantir que o proxy seja levantado em uma porta aleatória e seja protegido por credenciais aleatórias, que são geradas em tempo real e conhecidas apenas pelo próprio aplicativo cliente. Como resultado, nenhum outro software no telefone (mesmo que escaneie o localhost) invadirá este proxy e não detectará o IP externo.
Nos bastidores: Xray, tun2socks e contornando as restrições do sistema operacional
Com o VLESS, tudo acabou sendo simples: existe um projeto xray-core, cujas construções existem para muitas plataformas. Pegue os binários, execute-os a partir do aplicativo, use SOCKS. Mas você quer ter uma interface de rede completa (tun) no dispositivo.
O próprio Xray sabe tunelar, mas na prática acabou sendo extremamente caprichoso a esse respeito. Não importa o quanto eu tentei levantar um túnel normal com seus próprios meios, algumas armadilhas sempre surgiam. Subir a montanha não foi fácil, então foi tomada uma decisão tática para procurar alternativas.
E uma alternativa foi encontrada - tun2socks. Não há uma construção oficial para Android, mas um binário linux-arm64 compilado estaticamente é iniciado no robô verde sem quaisquer problemas. Acontece que todas as ferramentas estão lá, você só precisa de um invólucro que conecte tudo.
Arquitetonicamente, o cliente é escrito em uma mistura de Flutter, Kotlin e um pouco de C++. Algo foi delegado à IA - e regularmente batia nas mãos quando ela entrava em ação. Como resultado, ainda escrevi muito sozinho: às vezes é realmente mais fácil fazer manualmente do que obter um pedaço de silício para realizar meu plano.
Vale a pena mencionar separadamente a execução dos próprios binários. A partir do Android 10, o sistema atinge estritamente as mãos para executar arquivos executáveis do diretório de dados do aplicativo (violação W^X). Para contornar essa restrição, empacotei os arquivos executáveis em lib/ como bibliotecas .so - um truque antigo que funciona muito bem.
Em vez de lençóis de código, mostrarei apenas um trecho do log, onde você pode ver claramente como a geração e a ligação dinâmicas ocorrem:
Preste atenção à string de inicialização do tun2socks: a porta 45478 e o login/senha ousados são gerados em tempo real a cada inicialização da conexão. O descritor de arquivo da interface tun (fd://142) é passado diretamente para o binário.
Resultados
E então eu dei à luz um aplicativo funcional - TeapodStream (uma referência ao código HTTP 418 + uma dica para túnel/proxy/stream).
A principal questão: a proteção funciona?
Sim.
Verificações nos mesmos aplicativos detectores do artigo sobre a vulnerabilidade VLESS, bem como testes via RKNHardering, mostraram que eles pararam de detectar o SOCKS aberto. O proxy e o IP externo estão ocultos.
A funcionalidade ainda é trivial, mas cobre a base:
Suporte para protocolos: VLESS, VMess, Trojan, Shadowsocks.
Túnel dividido (split tunneling) - selecionando aplicativos para exclusão da VPN.
Assinaturas - atualização automática de configurações por URL.
Como resultado, estou satisfeito: estiquei meu cérebro, resolvi o problema e, como você está lendo este artigo, significa que desta vez trabalhei não apenas na experiência pessoal, mas também me atrevi a compartilhar o resultado com a comunidade)
Finalmente, quero perguntar à comunidade: quais outros marcadores não óbvios da presença de uma VPN você acha que começarão a ser usados em massa para detecção em um futuro próximo?
A todos, boa sorte!
📤 Compartilhar & Baixar
🧰 Ferramentas recomendadas
Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.