Quando um projeto pessoal sai do controle: Criando seu próprio tun2socks e fechando brechas em VPNs Android

Quando um projeto pessoal sai do controle: Criando seu próprio tun2socks e fechando brechas em VPNs Android

Um desenvolvedor compartilha sua jornada ao descobrir vulnerabilidades em VPNs Android, construindo sua própria solução tun2socks para mitigar riscos. O artigo detalha o processo de desenvolvimento, os desafios enfrentados e as lições aprendidas ao transformar um projeto pessoal em uma ferramenta útil para a comunidade.

MundiX News·12 de maio de 2026·10 min de leitura·👁 4 views

Tudo começou por diversão. Recentemente, surgiu um burburinho na internet sobre uma vulnerabilidade em clientes VLESS: descobriu-se que mesmo ao usar split-tunneling (quando a VPN está ativada apenas para aplicativos selecionados), qualquer aplicativo "espião" no telefone pode descobrir o endereço IP do seu servidor VPN.

A vulnerabilidade era trivial - o kernel do cliente abre um proxy SOCKS local, que não é protegido de forma alguma. Qualquer software no dispositivo pode acessar essa porta local e enviar um pacote para fora. Por interesse acadêmico, escrevi o aplicativo Android TeapodStream, que, por baixo do capô, conectava xray-core e tun2socks. Coloquei o proxy local em uma porta aleatória e o fechei com uma senha dinâmica (escrevi mais sobre isso no artigo anterior, a cerveja, aliás, já perdeu o gás)).

A publicação teve uma grande resposta da comunidade, gerou uma discussão animada e se espalhou pelos favoritos. Achei que meu experimento tinha terminado por aí.

Mas... eu mesmo não percebi como fui envolvido.

A brecha sobre a qual não se fala Após a publicação do post, outro bug de segurança surgiu nos comentários. Muito mais desagradável, e está presente em quase todos os clientes VPN populares para Android.

O sintoma é o seguinte: um aplicativo espião, que não foi adicionado à lista de tunelamento, simplesmente executa uma chamada de sistema equivalente ao comando curl --interface tun0 https://checkip.amazonaws.com - e o pacote voa com segurança para o seu servidor, revelando seu IP.

Como isso é possível, se o split-tunneling está funcionando?

Vamos dar uma olhada no Android. Ao iniciar a VPN, seu aplicativo, através da API VpnService, cria uma interface de rede tun0. Em seguida, o sistema operacional usa o Policy-Based Routing (roteamento baseado em políticas). Quando um aplicativo normal abre um socket e tenta ir para a rede, o Android olha para seu UID. Se o UID estiver na lista de permissões para VPN, o pacote vai para tun0, se não, vai pela rota padrão (rede celular ou Wi-Fi).

Mas há uma nuance. tun0 é um dispositivo de rede no nível do kernel do sistema. E o kernel do Linux não se importa com políticas de alto nível e Android UID. Se o aplicativo especificar forçosamente o parâmetro SO_BINDTODEVICE para o socket com o nome da interface tun0, o kernel enviará obedientemente o pacote exatamente para lá, contornando todas as regras do Android.

Antes, esse truque exigia direitos de root. Mas, a partir do kernel Linux versão 5.7, essa chamada foi permitida para aplicativos de usuário comuns. Bingo!

Escrevendo seu próprio tun2socks (fechando brechas do Android?) É impossível combater essa brecha simplesmente definindo parâmetros de inicialização inteligentes para um tun2socks ou xray-core comum. O pacote já caiu no túnel, ele precisa ser interceptado e filtrado por dentro.

Percebendo isso, tomei uma decisão radical: escrever meu próprio kernel tun2socks do zero em Go, usando gVisor (stack de rede do espaço do usuário).

A lógica de funcionamento do meu mecanismo personalizado: após receber um pacote de tun0, coletamos dele um 5-tuple (protocolo, IP de origem, porta de origem, IP de destino, porta de destino). Em seguida, acessamos a API nativa do Android (ConnectivityManager.getConnectionOwnerUid) e perguntamos: "A quem, de fato, pertence este socket?".

Depois de receber o UID, verificamos com as listas de split-tunneling. Qualquer pacote cujo UID não nos serviu ou que não conseguimos determinar, é impiedosamente descartado.

No nível dos protocolos, isso se parece com:

Com TCP é simples. Se um pacote SYN (tentativa de abrir uma conexão) cair no túnel, verificamos o UID. Se o aplicativo não puder usar a VPN, enviamos um RST (redefinição de conexão) em resposta. Se puder, envolvemos o tráfego em nosso SOCKS protegido por senha.

Com UDP é muito mais complicado. Não há conexão como tal, é apenas um fluxo de datagramas (não há pacotes SYN). Temos que reagir a cada pacote. Verificamos o UID e armazenamos em cache o par de portas para não acionar a pesada API do Android em cada datagrama. Além disso, nesta fase, temos que fazer o rebinding de sockets (Strict Source Binding) para que os pacotes UDP não fiquem presos no loop de roteamento dentro do próprio túnel e não vazem.

Com ICMP - uma armadilha completa. No kernel, determinar de qual aplicativo específico vem o pacote ICMP (o mesmo ping) é tão difícil e intensivo em recursos que simplesmente perde o sentido para um celular. Portanto, foi tomada a decisão de dar ao usuário uma caixa de seleção "Bloquear todo o ICMP no túnel" para evitar problemas.

E funcionou?

A resposta curta: sim. O tun2socks personalizado em Go provou ser muito flexível e impenetrável para SO_BINDTODEVICE.

De um projeto pessoal a um aplicativo completo (dores e alegrias) Fiquei chocado com o feedback da comunidade. Tantas palavras de agradecimento, tantos desejos e... tantos relatórios de bugs.

Todos os dias, tentei reservar um tempo e refinar o projeto. A funcionalidade cresceu: apareceu o roteamento de tráfego por GeoIP/GeoSite, um bloco nas configurações rápidas, exportação de intents (para automações via Tasker ou Macrodroid), perfis de configurações (para que você possa compartilhar sua configuração com seus entes queridos), suporte Always-On VPN e muito mais.

O drama com o redesenho Em algum momento, decidi que a interface do aplicativo parecia muito chata e lancei uma atualização de interface elegante (na minha opinião). A reação foi instantânea e implacável. Reclamações choveram nos issues, no tg, por e-mail:

"meus clientes ficaram desconfortáveis", "sou forçado a abandonar seu aplicativo se você não retornar ao design antigo" e tudo mais.

Nesse momento, percebi: o que eu estava construindo "por diversão para a alma", as pessoas já estão usando em todos os lugares, inclusive em negócios comerciais para seus clientes. Em alguns lugares, tive que procurar compromissos.

A batalha pela estabilidade Mas a maior dor, o trabalho no qual ainda está em andamento, é a estabilidade da conexão VPN. Android é um ambiente severo. É necessário processar corretamente as mudanças de rede (Wi-Fi <-> LTE), a entrada do telefone em sono profundo (modo Doze) e despertar, iniciar e parar o túnel da cortina ou automações (quando a interface do aplicativo não é carregada na memória), suporte para heartbeats e uma série de outras nuances.

Eu lembro: TeapodStream não é um projeto comercial. Eu o faço no meu tempo livre. Seu código é aberto, não pretendo introduzir monetização e não coleto doações. Esta é apenas a minha maneira de exercitar meu cérebro, me divertir e (espero) tornar a internet um pouco mais livre e segura.

Fontes As fontes do TeapodStream e do meu tun2socks personalizado estão no GitHub. O aplicativo tem muitos pequenos bugs e é mais uma versão alfa/beta. O que você acha, em que direção desenvolver o projeto ainda mais?

Para todos, o bem, e obrigado por ler!

🛡️⚡

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.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 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.

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Com centenas de ferramentas pré-instaladas, a distribuição Kali Linux facilita o trabalho de os profissionais de segurança começarem a fazer testes de segurança rapidamente. No entanto, com mais de 600 ferramentas em seu arsenal, o Kali Linux também pode ser desafiador. A nova edição deste prático livro abrange as atualizações nas ferramentas e inclui uma melhor abordagem da análise forense e da engenharia reversa. Ric Messier, autor, não fica apenas no teste de segurança, mas também faz uma abordagem sobre a execução de análise forense, incluindo a análise em disco e na memória, assim como alguma análise básica de malware. • Explore as diversas ferramentas disponíveis no Kali Linux • Entenda o valor do teste de segurança e examine os tipos de teste disponíveis • Aprenda os aspectos básicos do pentest em todo o ciclo de vida do ataque • Instale o Kali Linux em vários sistemas, tanto físicos quanto virtuais • Descubra como usar diferentes ferramentas destinadas à segurança • Estruture um teste de segurança baseado nas ferramentas do Kali Linux • Estenda as ferramentas do Kali para criar técnicas de ataque avançadas • Use o Kali Linux para ajudar a criar relatórios quando o teste terminar “A abordagem concisa, clara e baseada na experiência adotada por Ric Messier para a introdução do Kali Linux e dos testes de cibersegurança é incomparável. Este livro é uma leitura excelente e acessível para iniciantes e um recurso valioso para qualquer pessoa.” —Alexander Arlt, Consultor sênior de segurança, Google

Ver na Amazon
Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Compatível com portas USB-C e USB-A, ideal para ampliar a conectividade de dispositivos como MacBook Pro e outros com portas USB-C. Inclui um adaptador USB-A extra, proporcionando uma conexão Ethernet estável e veloz de até 1 Gbps, perfeita para filmes, jogos online e videoconferências. Oferece três portas USB 3.0 com velocidades de transferência de até 5 Gbps, permitindo conectar mouse, teclado, discos rígidos e outros periféricos. Fabricado em alumínio durável, garantindo longa vida útil e resistência ao uso diário. Design compacto e leve, ideal para viagens de negócios e uso diário, facilitando o transporte e armazenamento. Funciona com Windows 10/8.1/8, Mac OS e Chrome OS, oferecendo versatilidade incomparável para diversas necessidades de conectividade. Assegura uma conectividade estável e rápida, perfeita para tarefas exigentes como transferência de dados, streaming e mais.

Ver na Amazon
Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs is a crash course on web API security testing that will prepare you to penetration-test APIs, reap high rewards on bug bounty programs, and make your own APIs more secure. You'll learn how REST and GraphQL APIs work in the wild and set up a streamlined API testing lab with Burp Suite and Postman. Then you'll master tools useful for reconnaissance, endpoint analysis, and fuzzing, such as Kiterunner and OWASP Amass. Next, you'll learn to perform common attacks, like those targeting an API's authentication mechanisms and the injection vulnerabilities commonly found in web applications. You'll also learn techniques for bypassing protections against these attacks. In the book's nine guided labs, which target intentionally vulnerable APIs, you'll practice: Enumerating APIs users and endpoints using fuzzing techniques Using Postman to discover an excessive data exposure vulnerability Performing a JSON Web Token attack against an API authentication process Combining multiple API attack techniques to perform a NoSQL injection Attacking a GraphQL API to uncover a broken object level authorization vulnerability

Ver oferta
Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Up-to-date strategies for thwarting the latest, most insidious network attacks This fully updated, industry-standard security resource shows, step by step, how to fortify computer networks by learning and applying effective ethical hacking techniques. Based on curricula developed by the authors at major security conferences and colleges, the book features actionable planning and analysis methods as well as practical steps for identifying and combating both targeted and opportunistic attacks. Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition clearly explains the enemy's devious weapons, skills, and tactics and offers field-tested remedies, case studies, and testing labs. You will get complete coverage of Internet of Things, mobile, and Cloud security along with penetration testing, malware analysis, and reverse engineering techniques. State-of-the-art malware, ransomware, and system exploits are thoroughly explained. Fully revised content includes 7 new chapters covering the latest threats Includes proof-of-concept code stored on the GitHub repository Authors train attendees at major security conferences, including RSA, Black Hat, Defcon, and B-Sides

Ver na Amazon
Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Proteção de privacidade aprimorada: protege o link de transmissão de dados para evitar roubo de informações, fornecendo proteção de segurança robusta que protege a privacidade do usuário durante transferências de arquivos e garante uma conexão segura para interações de dispositivos sem preocupações em vários ambientes Uso a longo prazo: a camada protetora resistente ao desgaste, combinada com um corpo de metal resistente, oferece gerenciamento de calor confiável e qualidade duradoura durante o uso diário Entrega eficiente de energia: a tecnologia de chip inteligente garante a identificação automática dos requisitos de energia, fornecendo carregamento eficiente alinhando-se com vários protocolos de carregamento rápido para maior conveniência Proteção contra sobrecarga: evitando riscos de sobrecarga, este bloqueador de dados USB protege a vida útil da bateria e garante um desempenho estável, mantendo um fluxo estável de energia para melhorar a longevidade do dispositivo de forma eficaz Prático de transportar: com atenção à portabilidade, este bloqueador de dados USB oferece um design compacto que é leve e fácil de transportar, melhorando a conveniência do usuário e operação eficiente

Ver na Amazon

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.