Android filtra su IP real pese a la VPN, y Google no lo va a arreglar

10.09.2026 9 min 5

Android tiene un interruptor llamado «Bloquear conexiones sin VPN». Actívelo junto con la VPN permanente y el sistema promete que nada sale del dispositivo fuera del túnel. Dos hallazgos independientes de este año demuestran que cualquier aplicación corriente pasa de largo ese interruptor y entrega su dirección IP real al servidor que ella elija. Google cerró los dos avisos sin arreglar nada.

En resumen

  • Dos evasiones independientes, halladas por dos investigadores distintos, derrotan a la VPN permanente con el bloqueo activado.
  • Ninguna necesita un permiso que el usuario tenga que aprobar. Basta el acceso a internet, y ese se concede solo.
  • El truco es el mismo en ambos casos: lograr que un proceso del sistema envíe el paquete por usted. A los procesos del sistema no les afectan las reglas de bloqueo.
  • Google marcó uno como «Won't Fix (Infeasible)» y cerró el otro sin actuar. GrapheneOS ya parcheó el primero y anuncia el segundo.

Qué debería garantizar ese interruptor

Cuando se levanta una VPN en Android, el sistema reescribe sus reglas de enrutado para que las aplicaciones cubiertas solo alcancen la red a través de ella. Cada socket lleva una marca que le dice al núcleo a qué red pertenece, y si una aplicación intenta enlazar un socket directamente a la interfaz física de Wi-Fi, la comprobación falla y la llamada devuelve un error de permisos. Esa es la mecánica del ajuste, y funciona.

Funciona para las aplicaciones. Los sockets de los componentes del sistema quedan por debajo de un umbral llamado FIRST_APPLICATION_UID y se etiquetan como de sistema, lo que les permite llegar a cualquier red haga lo que haga una VPN en el espacio de usuario. El sistema tiene que poder hablar con la red pase lo que pase, así que la excepción por sí sola es razonable. Se convierte en problema en cuanto una aplicación corriente puede convencer a un proceso del sistema de que envíe un paquete en su nombre.

Fuga uno: la despedida cortés

Android 16 incorporó una función para cerrar limpiamente las conexiones QUIC. Si el socket de una aplicación muere de golpe, el servidor del otro extremo se queda con una conexión a medio abrir hasta que expire, así que ahora el sistema permite registrar por adelantado un paquete de despedida que él mismo entregará. El investigador que la encontró, que publica como lowlevel, bautizó el resultado como el pequeño cañón UDP.

  1. La aplicación llama a un método del servicio de red y le entrega un socket UDP y un bloque de bytes arbitrario. En esa llamada no hay comprobación de permisos: ni en el método, ni en la descripción de la interfaz, ni en la política de seguridad.
  2. El sistema anota quién llama, la red y las direcciones y puertos de origen y destino del socket.
  3. La aplicación termina. El núcleo informa de que el socket ha sido destruido.
  4. El proceso del sistema abre un socket nuevo en la red Wi-Fi física, lo conecta al destino anotado y envía los bytes anotados. La VPN nunca ve ese paquete y el destino ve la dirección real del dispositivo.

El investigador lo comunicó por el programa de recompensas de Android. El aviso se cerró como Won't Fix (Infeasible), razonando que queda fuera del modelo de amenazas. Mullvad, que no suele escribir sobre fallos ajenos, publicó una advertencia en mayo y volvió a presentar el caso en el rastreador público; el registro quedó luego marcado como inaccesible sin explicación. GrapheneOS publicó un parche que apaga la optimización.

Para esta hay una mitigación, y es incómoda: con la depuración USB activada, el comando adb shell device_config put tethering close_quic_connection -1 desactiva el cierre limpio de QUIC y tapa la fuga. Sobrevive a un reinicio, pero una actualización del sistema puede deshacerla y entonces hay que repetirla. El precio es que los sockets QUIC del otro lado se quedan a medio abrir hasta caducar.

Fuga dos: el keepalive lo manda el propio chip de Wi-Fi

El segundo hallazgo, publicado el 29 de julio por Armin Šupuk y analizado por Mullvad el 10 de septiembre, entra a la misma sala por otra puerta. Android expone una interfaz pública para mantener viva una traducción NAT: la aplicación pide al sistema que emita cada cierto tiempo un pequeño paquete UDP para que la conexión a través del router doméstico no se caiga. Por eficiencia, la tarea baja al chip de Wi-Fi o al de datos móviles, que emite los paquetes él mismo.

El framework acepta la petición sin comprobar que quien llama posee de verdad el recurso al que apunta y sin preguntarse si le afecta el bloqueo de la VPN. A partir de ahí el keepalive nace en el hardware de red, por debajo de la capa donde viven las reglas del túnel. Paquetes de formato fijo al puerto UDP 4500 llegan a la dirección que eligió la aplicación, cargando la IP real.

10 sintervalo entre paquetes filtrados, el mínimo de la plataforma
24 h 32 mfuga continua más larga registrada en un dispositivo de prueba
3fabricantes confirmados: Google, Samsung y Nothing
91%de los envíos de Android corresponden a las familias de firmware Wi-Fi afectadas, según el estudio

El estudio rastrea un modelo de confianza que se fue deshaciendo. La llamada nació como una interfaz privilegiada que recibía un descriptor de archivo en crudo, ganó un punto de entrada público, después una validación del recurso, y volvió a perderla en una reversión. Lo que queda admite la petición sin exigir prueba alguna de propiedad.

La nota del propio autor en el rastreador de GrapheneOS es más estrecha que el titular del estudio: en dispositivos Pixel funciona por Wi-Fi y casi nunca por IPv6. Eso sí, es tozuda. La fuga sigue con la aplicación en segundo plano, con la pantalla bloqueada, en modo Doze, en ahorro de energía y bajo el congelador de procesos, y sobrevive a forzar la detención de la aplicación.

Qué se escapa en realidad

Sus mensajes no. Ambas fugas son canales estrechos: la aplicación controla adónde va el paquete y, en el caso de QUIC, qué contienen unos pocos bytes. Lo que aprende el otro extremo es que un dispositivo concreto con una IP pública concreta existe y está conectado ahora mismo. Para una aplicación que ya sabe quién es usted, ese es el eslabón que faltaba entre una cuenta y una ubicación, justo lo que la VPN debía impedir.

Por qué se repite

Las dos fugas nacen de la misma decisión de diseño: funciones de comodidad que dejan a un proceso del sistema actuar en nombre de una aplicación, escritas sin preguntarse si esa aplicación puede en ese momento salir a la red por su cuenta. La comprobación de bloqueo filtra identidades de aplicaciones, así que todo lo que se ejecuta con identidad de sistema queda fuera de su alcance.

Y la lista no se queda en dos. En la discusión de GrapheneOS un mantenedor señaló que el proyecto ha encontrado y corregido por su cuenta al menos diez fugas más, y que las que ocurren sin que una aplicación intente escaparse a propósito van antes que estas dos. El mismo mantenedor fue claro con los incentivos: Google no paga por fugas de VPN, y comunicarlas sirve para dejar constancia, no para esperar un parche.

Qué puede hacer usted

Merece la pena

  • Tratar la instalación de aplicaciones como el control de verdad. Ambos ataques exigen una aplicación hostil ya instalada, y ninguno le pide nada.
  • Si el túnel es por seguridad y no por comodidad, pasar a una versión de Android que corrija esto directamente, como GrapheneOS.
  • Aplicar el comando ADB de arriba si se maneja con ello, y repetirlo tras las actualizaciones del sistema.
  • Recordar que la segunda fuga, en el hardware probado, tira del Wi-Fi. Por datos móviles el panorama es más irregular.

No ayuda

  • Cambiar de proveedor de VPN. En Android todas las aplicaciones VPN están afectadas igual, porque el escape ocurre por debajo de ellas.
  • Activar «Bloquear conexiones sin VPN». Es precisamente el ajuste que se está sorteando.
  • Esperar un parche de Google. Los dos avisos están cerrados.
  • Un interruptor de emergencia dentro de la aplicación VPN. No ve ni puede detener los paquetes que emite el sistema o el chip de Wi-Fi.

Qué cambia esto al elegir VPN

Conviene ser preciso con la culpa, porque la publicidad alrededor de esto no lo será. Ningún servicio de VPN puede arreglar estas fugas y ninguno las provocó: los paquetes nunca llegan a la capa de aplicación donde trabaja un cliente VPN. Lo que sí se le puede exigir a un proveedor es si avisó a sus usuarios. Si está eligiendo una aplicación para el móvil, nuestra guía de VPN para Android trata lo que la aplicación sí controla, es decir, todo lo que queda por encima de esta capa.

¿Afecta a los iPhone?
No. Ambos hallazgos son propios de la pila de red de Android y de interfaces que Android ofrece a las aplicaciones. No dicen nada sobre iOS.
¿Qué versiones de Android?
La fuga por QUIC llegó con la función en Android 16 QPR1. La del keepalive va por un camino del framework compartido desde Android 12, y el estudio sostiene que alcanza a la mayoría de dispositivos con Android 12 o posterior.
¿Puedo notar que una aplicación lo hace?
Desde el móvil no. Los paquetes los emite el sistema o el hardware de red, así que no aparecen en los contadores de datos por aplicación. En su propia red se ven en una captura del router: UDP periódico al puerto 4500 desde la dirección real del teléfono.
¿Tiene la culpa mi proveedor de VPN?
No. El tráfico sale por debajo del nivel que controla una aplicación VPN. Mullvad valoró un apaño que ocupara todas las ranuras de keepalive del hardware y lo descartó: implicaría enviar paquetes fuera del túnel por su cuenta y aun así no ganaría de forma fiable la carrera contra una aplicación hostil.
¿Debo dejar de usar VPN en Android?
No. El túnel sigue llevando su tráfico real y sigue ocultándolo de la red en la que está. Lo que ha dejado de garantizar es que una aplicación deliberadamente hostil no revele su dirección por un canal aparte.

androidgooglevpnprivacysecuritymullvadgrapheneosip leakcybersecuritytracking

Lee también