Pasaron el captcha de Cloudflare sin abrir un navegador: Turnstile es una carrera perdida

Pasaron el captcha de Cloudflare sin abrir un navegador: Turnstile es una carrera perdida

Pasaron el captcha de Cloudflare sin abrir un navegador: Turnstile es una carrera perdida

Salió un proyecto en GitHub que confirma algo que sospechaba hace rato: la carrera de los captchas está perdida, y no la va a volver a ganar el que verifica. Se llama cfsolve, está escrito en Rust y resuelve Cloudflare Turnstile — el widget «invisible» que millones de sitios ponen como muro — sin headless browser. Solo requests, con perfiles de navegador grabados. El repo es público, nació el 26 de octubre, ya pasa las doscientas estrellas y hoy anda en portada de Hacker News con más de 260 votos.

La mecánica es simple de explicar y brutal de defender. El autor grabó, desde navegadores reales, las respuestas exactas que Cloudflare espera de sus comprobaciones de navegador, y las guarda en archivos de perfil (el que viene incluido imita Safari en iPhone). Llega un challenge, la librería replica esa conversación request a request usando un BoringSSL parcheado, y te devuelve el token del widget o directo la cookie cf_clearance. Sin navegador, sin JavaScript, sin esperar el spinner. Lo único que queda por delatar es el detalle clásico: la cookie hay que presentarla desde la misma IP y con el mismo user agent del perfil, porque si no Cloudflare la rechaza. Un captcha que verifica el navegador, no al usuario.

El desbalance es matemático

Integrar Turnstile en un sitio toma una tarde. Romperlo tomó ingeniería inversa seria: perfiles grabados con un proxy que captura los payloads que el navegador real le manda decodificados a Cloudflare, dependencias vendorizadas a la fuerza, y por ahora solo perfiles Safari y Chrome(ium) soportados. Y la carrera sigue viva: el repo nació el 26 de octubre y en tres días llevó dos fixes porque Cloudflare cambió el build de las challenge pages y la imitación se quebró completa. Ahi está la asimetría que me importa: Cloudflare tiene que ganar siempre; el atacante necesita ganar una vez, y la receta queda publicada.

Para cualquiera que corre servicios con la puerta abierta, esto no es teoría. Mis logs de autenticación son un zoológico: escáners buscando archivos de configuración, paneles admin, APIs mal cerradas. Puse captcha en mis formularios y bajó el ruido… hasta que volvió. Un muro que se pasa sin navegador es un rate-limit más caro de saltar, nada más. Si tu defensa descansa en Turnstile, revisa tu modelo mental: trátalo como un freno que baja el throughput del atacante, no como una puerta cerrada. UFW, fail2ban, límites por IP y honeypots tontos siguen filtrando más ruido que cualquier widget.

Y la reacción legislativa es peor que el problema

La semana pasada más de 300 ejecutivos de medios fueron a Washington a empujar el Stealth Bot Prohibition Act, una ley que obligaría a todo bot a identificarse, con multas de hasta 53.000 dólares por crawler «furtivo». El ensayo de TechPolicy.press lo destroza con datos: los bots malos nunca se identifican, mienten por definición. Quien cumple la ley puede ser una empresa te metiendo 10.000 peticiones por minuto con su nombre bien declarado. Quien pierde es el bot bueno: el Internet Archive con su colección de más de un billón de páginas guardadas, los periodistas que investigan con scraping, los investigadores académicos. El autor cita incluso una sentencia de la Corte Suprema de Estados Unidos de 1965 contra obligar a identificarse para recibir información pública. La IETF ya explora algo más sensato: una suerte de atestación anónima del buen comportamiento del crawler.

Mi opinión corta: el captcha murió como concepto de verificación y nos quedamos pagando el impuesto logístico. La identificación obligatoria de bots es la misma trampa con otro nombre. Lo que de verdad escala es diseñar asumiendo que el bot malo se pasa cada muro: permisos mínimos, auditoría de eventos, rate-limits honestos y detección por comportamiento, no por sello de identidad. El problema nunca fue parar a los que fingen ser humanos; es notar a los que actúan como humanos cuando nadie está mirando.

Fuente de inspiración: Cloudflare Turnstile solver library (no headless browser required)

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *