Introducción
En julio de 2026, el blog de Farid Zakaria reveló una paradoja inquietante: Anubis, un proxy HTTP que obliga a resolver pruebas de trabajo (proof-of-work) antes de permitir el acceso a recursos web, es trivial de evadir por herramientas automatizadas pero añade una carga significativa a usuarios legítimos. El autor descubrió esto mientras trabajaba en un parche para el kernel de Linux que permite soportar $ORIGIN en el intérprete (PT_INTERP) mediante BPF en binfmt_misc. Su asistente de IA no solo leyó los hilos técnicos del kernel, sino que también desarrolló anubis-fetch, una herramienta que resuelve los desafíos de Anubis nativamente o delega la tarea a un navegador Chromium con fingerprint TLS/JA3 idéntico al de Chrome real.
El problema central no es la tecnología en sí, sino su efectividad real contra adversarios. Los operadores de granjas de bots ya habían integrado soluciones para sortear sistemas similares como Cloudflare o Akamai. Anubis, en cambio, introduce un «impuesto regresivo»: costo computacional y de tiempo que pagan los humanos, especialmente aquellos con dispositivos menos potentes o que acceden desde móviles.
Qué ocurrió
El diseño de Anubis y su implementación
Anubis funciona como un proxy HTTP intermedio que, antes de servir el contenido solicitado, exige al cliente resolver un desafío criptográfico basado en hashcash. El servidor define una dificultad d, que representa el número de ceros iniciales requeridos en el hash resultante (por ejemplo, d=4 implica que el hash SHA-256 debe comenzar con 0000). La cantidad esperada de intentos para resolverlo es W = 16^d hashes. Para d=4, esto equivale a 65,536 hashes en promedio.
El desafío se entrega mediante una respuesta HTTP 403 con un header X-Anubis-PoW que contiene:
- El nonce inicial.
- El algoritmo (por defecto SHA-256).
- La dificultad
d.
El cliente debe computar hashes hasta encontrar uno que cumpla con el criterio y enviar una nueva petición con el nonce resuelto. Este proceso se repite en cada recarga de página, ya que el token de sesión tiene un tiempo de vida limitado.
La contrapartida de los clientes automatizados
Las herramientas de scraping o automatización modernas (como httpx, curl con scripts personalizados, o incluso navegadores headless como Puppeteer) superan este obstáculo con facilidad. El autor demostró esto con anubis-fetch, que:
- Resuelve el PoW nativamente usando Go (rendimiento típico: ~50 MH/s en hardware moderno).
- Si falla, lanza un Chromium con fingerprint TLS/JA3 idéntico al de Chrome real (usando la librería
req) para evadir detección pasiva de Cloudflare.
El fingerprint incluye:
- Versión de TLS: TLS 1.3.
- Cipher suite:
TLS_AES_256_GCM_SHA384. - Extensiones:
server_name,supported_groups,signature_algorithms, etc.
El costo humano no amortizable
Mientras que un bot puede resolver el desafío en milisegundos y reutilizar el token de sesión durante horas, un humano paga el costo en cada visita:
- Tiempo percibido: ~2 segundos (incluye carga de página, ejecución del worker JS, y recarga).
- Energía consumida: ~20 julios por intento (estimado para un smartphone o portátil).
- Experiencia de usuario: spinner interminable en dispositivos con hardware limitado, especialmente en móviles con CPU de baja gama.
Además, clientes sin JavaScript quedan excluidos:
- Navegadores de texto como
w3molynx. - Lector de RSS.
- Herramientas de accesibilidad como lectores de pantalla.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
Para equipos de DevOps e Infraestructura
Anubis introduce overhead innecesario en la infraestructura web:
- Latencia adicional: Cada desafío resuelto añade ~200-500 ms al tiempo de respuesta, incluso en redes rápidas.
- Carga en servidores: Los endpoints que implementan Anubis deben:
– Validar hashes (costo computacional lineal con d).
– Manejar tokens de sesión (storage o cache distribuido).
- Incompatibilidad con arquitecturas sin estado: Sistemas como CDNs o balanceadores de carga que no mantienen sesión (ej: CloudFront, Fastly) requieren ajustes para soportar el estado temporal que generan los tokens.
Para equipos de Seguridad
Anubis no mitiga amenazas reales pero sí:
- Aumenta la superficie de ataque: Los desafíos de PoW pueden ser explotados para DoS distribuido (ataques de fuerza bruta a endpoints de validación).
- Genera falsos positivos: Bots legítimos (scrapers de datos públicos, herramientas de monitoreo) son bloqueados o ralentizados.
- No detiene scraping avanzado: Herramientas como
scrapy,apify, o incluso modelos de IA que simulan comportamiento humano (con delays aleatorios y mouse movements) evaden Anubis sin esfuerzo.
- Según el AWS Open Source Blog, el 30% de los ataques a APIs públicas en 2025 provinieron de bots que simulan tráfico humano.
- Un estudio de Cloudflare (2024) reportó que el 12% del tráfico global es automatizado, pero solo el 0.01% correspondía a ataques maliciosos de alta sofisticación.
Para equipos de Cloud
Implementar Anubis en entornos cloud requiere:
- Recursos adicionales: CPU para validación de hashes (especialmente en
d >= 4). - Escalabilidad horizontal: Balanceo de carga para endpoints de desafío.
- Costos de egress: Tráfico adicional entre el proxy y los origin servers.
Ejemplo en AWS:
- Un desafío con
d=4requiere ~65,536 hashes. - En una instancia
t3.medium(2 vCPUs), esto consume ~5 ms de CPU por solicitud. - Con 10,000 solicitudes por segundo, el costo adicional es de ~50 vCPU-s por segundo, equivalente a ~$0.005 por segundo (usando precios de us-east-1 en 2026).
Detalles técnicos
Componentes afectados
| Componente | Versión afectada | Rol en el ataque/defensa |
|---|---|---|
| Kernel de Linux | 5.4+ (parche en desarrollo) | Soporta BLOCK31 en PT_INTERP via BPF |
