TempMail Ninja
//

Tor Browser vulnerabilidad: Explotan zero-click que compromete el anonimato

3 min de lectura
TempMail Ninja
Tor Browser vulnerabilidad: Explotan zero-click que compromete el anonimato

El ecosistema de la privacidad digital ha sufrido un sacudón tectónico tras la divulgación técnica de un exploit de ejecución remota de código sin interacción del usuario (zero-click) identificado como CVE-2026-10702 y apodado popularmente como “IonBanana”. La amenaza, descubierta por los investigadores de la firma de ciberseguridad Nebula Security, compromete de manera directa la integridad de las instalaciones no actualizadas del navegador Tor. Debido a que esta herramienta de anonimato crítico se edifica sobre la infraestructura base de Mozilla Firefox, cualquier falla grave dentro del motor de renderizado termina repercutiendo con un impacto devastador para disidentes, periodistas y profesionales de la seguridad en todo el mundo. La gravedad de esta nueva Tor Browser vulnerabilidad radica en su capacidad para ejecutar código arbitrario en el proceso de contenido con solo visitar una página web maliciosa, abriendo la puerta a la desanonimización completa de los usuarios.

Anatomía del exploit IonBanana: El origen de la Tor Browser vulnerabilidad en SpiderMonkey

Para comprender la magnitud de la falla, es indispensable sumergirse en la arquitectura del motor JavaScript de Mozilla, conocido como SpiderMonkey, y particularmente en su pipeline de compilación Just-In-Time (JIT) denominado IonMonkey/Warp. Las infraestructuras JIT modernas están diseñadas para convertir código interpretado de alto nivel en instrucciones de máquina altamente optimizadas durante el tiempo de ejecución. Sin embargo, el afán por exprimir el máximo rendimiento posible crea una superficie de ataque sumamente compleja, donde las asunciones lógicas del optimizador pueden distorsionar la realidad de la memoria física.

En el corazón de IonMonkey residen múltiples fases de optimización intermedia (MIR – Intermediate Representation). Entre ellas destacan el análisis de alias (Alias Analysis) y la numeración global de valores (Global Value Numbering o GVN). El análisis de alias se encarga de determinar qué instrucciones de código leen o escriben en regiones específicas de la memoria del montón (heap). Si el optimizador asume de forma errónea que una instrucción es completamente “pura” o “libre de efectos secundarios” (side-effect-free), determinará que no modifica el estado de los objetos existentes y reordenará o eliminará lecturas posteriores de memoria, reutilizando punteros que considera válidos.

El mecanismo del fallo: Reemplazo escalar y MObjectToIterator

El fallo crítico de CVE-2026-10702 ocurre específicamente durante la fase de reemplazo escalar (scalar replacement) aplicada sobre las llamadas a la función global Object.keys(). Cuando el compilador JIT analiza la enumeración de las claves de un objeto, transforma la operación emitiendo un nodo interno en la representación intermedia llamado MObjectToIterator. En la implementación defectuosa de SpiderMonkey, esta instrucción se declaró a sí misma bajo un conjunto de alias (alias set) marcado como de solo lectura y exento de modificar la estructura de la memoria.

No obstante, esta declaración resultó ser una contradicción lógica devastadora frente al comportamiento real del motor. Cuando el código fuente intenta enumerar las propiedades de un objeto que representa una función de JavaScript, SpiderMonkey no mantiene todas sus propiedades creadas previamente en memoria por razones de eficiencia. En su lugar, el motor resuelve de manera “perezosa” (lazy resolution) propiedades universales como length, name y prototype en el instante exacto en que son requeridas por la enumeración.

Si el búfer interno de ranuras (slot buffer) del objeto se encuentra completamente lleno al momento de forzar esta resolución perezosa, el motor de JavaScript se ve obligado a realizar una reasignación de memoria (memory reallocation). Este proceso destruye el búfer anterior para asignar un bloque de memoria contiguo más grande en el heap. Dado que la instrucción MObjectToIterator le aseguró falsamente al optimizador GVN que la operación no producía efectos secundarios ni alteraba punteros, el código compilado a lenguaje máquina continuó utilizando los punteros cacheados que apuntaban a la dirección de memoria original recién liberada. Esta discrepancia entre el estado conceptual del compilador y el estado real de la RAM desencadena de inmediato una condición de Use-After-Free (UAF).

TN

Escrito por

TempMail Ninja

Experto en privacidad digital y seguridad en línea. Apasionado por crear herramientas que protejan la identidad de los usuarios en internet.