Hackearon Microsoft Edge a mano: 5 bugs de lógica y cero corrupción de memoria

Hackearon Microsoft Edge a mano: 5 bugs de lógica y cero corrupción de memoria

Escucha este artículo en audio (1:29 min, resumen del artículo original)

📻 Versión en audio: si prefieres escuchar en vez de leer, el resumen del artículo está justo aquí arriba.

Hackearon Microsoft Edge a mano: 5 bugs de lógica y cero corrupción de memoria

En mayo, en Pwn2Own Berlin 2026, Orange Tsai, de DEVCORE, se llevó 175.000 dólares por romper Microsoft Edge completo: de una página web a ejecutar código en Windows. Lo llamativo no es el monto, es el método: ni un bug de corrupción de memoria, ni fuzzing, ni IA. Cinco errores de lógica encadenados con dos features de Windows y un exploit de menos de 100 líneas; esta semana publicó el desglose completo y ganó el premio Pwnie a Epic Achievement.

El punto de partida: una esquina olvidada de Chromium

Todo arrancó en los Navigation Throttles, interceptores que viven en el proceso del navegador y examinan cada navegación antes de dejarla pasar. Zona poco concurrida: de más de 3.000 CVEs que Chrome parcheó en cinco años, menos de 20 tocan ese código. Edge tiene un throttle propio, amarrado a su feature de Conditional Access de Entra ID: si entraste con una cuenta de trabajo a un sitio Microsoft, te «guía» para cambiar de perfil, relanzando una navegación nueva con la URL destino tomada del query string. El detalle fino: esa relanzada la inicia el proceso del navegador y no queda amarrada al origen que la disparó; si no se especifica fuente, Chromium usa la pestaña activa. Abres el trigger, cambias de pestaña antes de que se ejecute, y la navegación cae en la pestaña que estabas mirando. Eso es UXSS universal: JavaScript tuyo ejecutándose en cualquier origen, incluso ignorando CSP, porque viene desde el proceso del navegador.

Sin clicks: cuatro eslabones más

Ese truco necesita condiciones, y las fue saltando una por una. El chequeo de origen lo bypasseó porque el throttle solo mira la URL de la pestaña que dispara la navegación, nunca la de otra ventana: un window.open hacia login.live.com y listo. El bloqueador de popups lo esquivó porque Microsoft se dejó una whitelist interna de popups de su propio flujo de login: abres una de ellas y luego le cambias la URL. ¿Y el usuario sin sesión iniciada? OneAuth te autentica sola en sitios Microsoft con las credenciales del sistema. Solo faltaba el correo de la víctima, y salió de regalo: los assets de MSN embebidos en el navegador lo devuelven, y con una mala configuración de CORS un fetch desde cualquier página lo trae. La UXSS quedó corriendo sin un solo click.

Del sandbox al disco duro

UXSS no es código nativo, así que vino el escape. Chromium tiene una lista de esquemas privilegiados donde las URLs javascript: se ignoran. Edge hace fork del modo de lectura Immersive Reader con un esquema propio, read://… y Microsoft se olvidó de agregarlo a esa lista. Desde ese panel, la función que comprime logs de diagnóstico permite controlar nombre y contenido del archivo, y acepta ../ y un byte NULL: escritura arbitraria en todo el disco. Sobrescribió el protocols.json que Edge carga al inicializar para disparar cualquier protocolo desde cualquier origen, reinició el navegador con edge://restart y llamó a telnet://. Como telnet.exe ya no viene instalado, Windows busca telnet en el PATH, y una de esas carpetas es escribible: ahí dejó su binario y arrancando Edge obtuvo ejecución de código.

Mi lectura

Ninguna pieza es un bug «clásico» de memoria; todas son decisiones de diseño tomadas apuradas o con fines comerciales: una whitelist interna, un login automático, un fork del upstream que queda fuera de la lista. Cada conveniencia es superficie de ataque. Si administras servidores como yo, la lección aplica aunque corras Linux y no toques Edge: el riesgo rara vez está en el componente famoso; están en los atajos que nadie revisa. Nota final: esto fue 100% a mano, dos meses de investigación, no por rechazo a la IA sino porque en bugs de lógica lo difícil es encontrarlos, y ya está casi listo el porte a Chrome. Con el tiempo que le sobró, reportó incluso un RCE nuevo de Windows, el CVE-2026-58608. La explotación ya no es una carrera de quien escribe el exploit más rápido: es de quien mapea mejor la superficie.

Artículo original: The Last Proof of Human Craft: Forging a Microsoft Edge Full Chain with Logic Bugs Only! por Orange Tsai (DEVCORE).

Fuente de inspiración: The Last Proof of Human Craft: Forging a Microsoft Edge Full Chain with Logic Bugs Only!

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 *