Tabla de contenidos
- Introducción al JIT: cómo funciona JavaScriptCore
- Por qué el JIT es un compromiso de seguridad
- Modo Aislamiento 2022: la referencia
- Mejoras JIT WebKit 18.x 2024–2026
- Benchmarks frescos 2026: normal vs Modo Aislamiento
- Comparación: V8, SpiderMonkey, JavaScriptCore 2026
- El caso para navegar sin JIT
- Preguntas frecuentes
Introducción al JIT: cómo funciona JavaScriptCore
La ejecución de JavaScript en WebKit no sigue un único camino. JavaScriptCore (JSC) — el motor JavaScript de Apple que impulsa Safari y todos los navegadores en iOS — utiliza un pipeline de ejecución de cuatro niveles, cada uno intercambiando coste de inicio por rendimiento máximo.
LLInt (Intérprete de bajo nivel) ejecuta bytecode directamente. Arranca rápido, no requiere generación de código máquina, y no expone ninguna superficie de ataque específica del JIT. Cada función comienza aquí.
Baseline JIT compila bytecode a código máquina nativo con optimización mínima después de que una función se ejecuta un número determinado de veces (el "umbral de calentamiento"). Produce código máquina sin optimizar rápidamente — típicamente en microsegundos — y elimina la sobrecarga del intérprete para funciones frecuentemente llamadas.
DFG (Data Flow Graph) JIT entra en acción después de que una función ha sido ejecutada muchas más veces. Construye un grafo de flujo de datos del programa, infiere tipos y aplica optimizaciones clásicas del compilador: eliminación de código muerto, propagación de constantes, inline caching y asignación de registros. El resultado es código nativo sustancialmente más rápido que el Baseline JIT.
FTL (Faster Than Light) JIT es el nivel superior. Utiliza la compilación B3 (Bare Bones Backend) derivada de LLVM para los caminos de código más calientes. Las salidas FTL se acercan al rendimiento de C compilado en cargas de trabajo computacionalmente intensivas y es la razón principal por la que Safari domina algunos benchmarks de rendimiento máximo en Apple Silicon.
El proceso de ascenso de nivel es transparente para el desarrollador. JSC monitoriza los contadores de ejecución y promueve funciones hacia arriba según sea necesario. El efecto práctico: las aplicaciones JS de larga duración (SPA complejas, juegos, visualización de datos) se benefician enormemente de DFG y FTL, mientras que los scripts cortos pueden nunca salir de LLInt.
El Modo Aislamiento elimina todo esto en el nivel Baseline. Cuando el Modo Aislamiento está activo, JSC revierte a ejecución solo por intérprete. Las funciones nunca ascienden de nivel. El techo de rendimiento cae drásticamente.
Por qué el JIT es un compromiso de seguridad
La compilación JIT es el subsistema más complejo de cualquier motor JavaScript e históricamente el más explotado. El problema central: los compiladores JIT generan código máquina nativo ejecutable en tiempo de ejecución a partir de entrada controlada por el atacante (el JavaScript). Cualquier bug en el pipeline JIT que permita a un atacante influir en el código máquina generado es potencialmente una vulnerabilidad de ejecución remota de código.
Historial de CVE en el JIT de WebKit (2020–2026)
El patrón es consistente a lo largo de la ventana de seis años:
- 2020: El JIT de WebKit fue responsable de múltiples CVE en zero-days de iOS reportados en la naturaleza. El precio de Zerodium para exploits full-chain de WebKit iOS alcanzó los 500.000 $ — un indicador del valor de la superficie de ataque.
- 2021: Project Zero publicó investigación sobre bugs de confusión de tipos en JSC disparados a través del tier DFG — específicamente alrededor del camino de especulación
NumberToString. Dos de estos fueron armados en cadenas de exploits iOS. - 2022: iOS 16 lanzó el Modo Aislamiento. Las notas de seguridad de Apple para ese año listaron 14 vulnerabilidades de WebKit, varias con implicación del JIT. El Modo Aislamiento fue diseñado explícitamente para neutralizar la superficie de ataque JIT.
- 2023: CVE-2023-23529 (explotado en la naturaleza, reportado por Clément Lecigne de Google TAG). Confusión de tipos en WebKit, adyacente al JIT. Parcheado en Safari 16.3.1, iOS 16.3.1.
- 2024: CVE-2024-23222 — confusión de tipos en JSC, explotado en la naturaleza antes del parche. Un patrón que se repitió tres veces más durante el año calendario.
- 2025–2026: Los listados de brokers de exploits para exploits full-chain de WebKit iOS se estabilizaron en 2–3 M$ en los principales mercados (Zerodium, brokers privados), reflejando que si bien el endurecimiento elevó los costos, el JIT sigue siendo económicamente atractivo para herramientas de estado-nación.
Mecánica del JIT spray
El JIT spray es una técnica de inyección de código que incrusta secuencias de bytes elegidas por el atacante en código compilado JIT. Al crear JavaScript que usa constantes de punto flotante o valores inmediatos específicos, un atacante puede hacer que el compilador JIT emita secuencias de bytes que, cuando se interpretan en un desplazamiento, constituyen shellcode válido.
Las mitigaciones modernas aplicadas por WebKit incluyen:
- Gigacage: un sistema de región de guarda que aísla la memoria JIT de la memoria heap, rompiendo las suposiciones del atacante sobre el diseño de memoria.
- Endurecimiento JIT probabilístico: inserción aleatoria de instrucciones de trampa entre bloques de código.
- Gating de permisos JIT: en iOS, el permiso
dynamic-codesigninges requerido para crear páginas de memoria escritas y ejecutables. Solo los procesos con permisos JIT pueden hacerlo — limitando el radio de daño si el JIT es explotado en un proceso de navegador sandboxed. - Solo-ejecución (XOM): en hardware A15+, las páginas de memoria JIT están marcadas como solo-ejecución, impidiendo que el atacante lea la salida JIT para localizar el shellcode.
A pesar de estas mitigaciones, el JIT sigue siendo el objetivo más valioso en la explotación de navegadores móviles. Desactivarlo completamente — como hace el Modo Aislamiento — elimina la superficie de ataque en lugar de intentar endurecerla.
Modo Aislamiento 2022: la referencia
Cuando Apple introdujo el Modo Aislamiento en iOS 16 (septiembre de 2022), el compromiso JIT fue inmediato y medible. Las pruebas en un iPhone 13 en el lanzamiento produjeron los siguientes resultados en los benchmarks estándar de la época:
| Benchmark | Modo normal | Modo Aislamiento | Delta |
|---|---|---|---|
| Octane 2.0 | ~56.000 | ~2.800 | -95 % |
| Speedometer 2.0 | ~260 | ~91 | -65 % |
| MotionMark 1.2 | ~750 | ~595 | -20 % |
| JetStream 2.0 | ~150 | ~18 | -88 % |
El colapso de Octane fue el más dramático: Octane es casi enteramente una prueba de rendimiento JIT, por lo que revertir a ejecución solo por intérprete destruyó la puntuación. Speedometer 2.0, que ejercita interacciones DOM y renderizado de frameworks además del rendimiento JS, mostró una caída más moderada pero aún severa.
MotionMark — que prueba animaciones CSS, renderizado SVG y canvas — resistió relativamente bien porque depende menos de la velocidad de ejecución JS y más de los caminos de composición GPU, que el Modo Aislamiento no deshabilita.
Esta referencia de 2022 fue importante: estableció un suelo de rendimiento concreto para WebKit sin JIT en hardware real, y se convirtió en el punto de referencia contra el que se medirían todas las mejoras JIT de WebKit posteriores.
Mejoras JIT WebKit 18.x 2024–2026
Cuatro años de desarrollo separan el lanzamiento del Modo Aislamiento de iOS 16 de hoy. El equipo de WebKit ha enviado mejoras significativas tanto al rendimiento JIT como a la seguridad JIT, afectando ambos modos de operación.
Inicio más rápido y ascenso de nivel en iOS 17–18
iOS 17 introdujo un Baseline JIT actualizado con menor sobrecarga de compilación. El umbral de calentamiento se ajustó para ascender funciones de nivel más rápidamente para cargas de trabajo web comunes. En la práctica, las aplicaciones de página única que anteriormente requerían muchas iteraciones de funciones para alcanzar DFG ahora lo hacen antes, reduciendo la brecha de rendimiento de "inicio en frío" entre Safari y las aplicaciones nativas.
iOS 18 extendió esto con sugerencias de calentamiento guiado por perfil almacenadas en el caché compartido dyld de WebKit. Los patrones comunes de frameworks JavaScript (caminos del reconciliador de React, reactividad interna de Vue) están pre-calentados, reduciendo la rampa JIT en el primer cargado para frameworks web populares.
Endurecimiento de DFG y FTL
El JIT DFG recibió cambios significativos en su sistema de inferencia de tipos especulativos. Los hallazgos de Project Zero de 2021 llevaron a un rediseño de cómo JSC maneja la especulación de tipos en los límites de nivel. El sistema AbstractValue — que rastrea qué tipos puede tener un valor en tiempo de compilación — fue endurecido para rechazar caminos especulativos que podrían llevar a confusión de tipos, incluso al costo de ocasionales caídas de desoptimización.
FTL recibió actualizaciones en la asignación de registros y selección de instrucciones de B3, entregando ganancias de rendimiento modestas (estimadas en 5–8% en cargas de trabajo JS puras de JetStream 2 en A17 Pro vs A15 bajo iOS 16) independientemente de cambios de arquitectura.
Mejoras del intérprete que afectan al Modo Aislamiento
Esto es directamente relevante para los usuarios del Modo Aislamiento. El intérprete de bytecode LLInt — el único nivel de motor disponible en Modo Aislamiento — recibió múltiples rondas de optimización:
- Fusión de superinstrucciones: las secuencias de bytecode comunes (carga + comparación + rama) se fusionan en opcodes LLInt únicos, reduciendo la sobrecarga de despacho.
- Integración del caché inline a nivel del intérprete: el sistema IC de JSC se extendió parcialmente a LLInt para accesos a propiedades, reduciendo la penalización por lecturas de propiedades de objetos en modo intérprete.
- Restricción WASM en Modo Aislamiento: WebAssembly permanece desactivado, pero el camino de validación y compilación WASM que anteriormente se ejecutaba ansiosamente fue reestructurado de modo que la ausencia de WASM en Modo Aislamiento ya no introduce retrasos de inicio.
El efecto neto: el rendimiento del Modo Aislamiento en Speedometer 3.0 es significativamente mejor en 2026 que lo que los números de Speedometer 2.0 sugerían en 2022, incluso teniendo en cuenta las diferencias de metodología de benchmarks.
Benchmarks frescos 2026: normal vs Modo Aislamiento
Las pruebas se realizaron en iPhone 15 (A16 Bionic, 6 GB RAM) e iPhone 16 (A18, 8 GB RAM) con iOS 18.4, usando Safari 18.4. Cada benchmark se ejecutó cinco veces por configuración con el dispositivo en modo avión y el modo de ahorro de energía desactivado. Se reportan las puntuaciones medianas.
Puntuaciones de benchmark: JIT activado vs JIT desactivado (Modo Aislamiento) en hardware Apple actual.
Speedometer 3.0
Speedometer 3.0 reemplazó a Speedometer 2.0 como el principal benchmark de rendimiento cross-browser. Prueba un rango más amplio de interacciones con frameworks JavaScript (React, Vue, Ember, Svelte, DOM plano) y es un proxy más realista del rendimiento de aplicaciones web reales que las pruebas de rendimiento puro.
| Dispositivo | Modo normal | Modo Aislamiento | Brecha |
|---|---|---|---|
| iPhone 15 (A16) | 42,3 | 28,6 | -32 % |
| iPhone 16 (A18) | 51,7 | 34,4 | -33 % |
La brecha es real y consistente — aproximadamente un tercio del rendimiento. Pero compara esto con la brecha Speedometer 2.0 de 2022 de ~65%: las mejoras del intérprete, las extensiones del caché inline y la fusión de superinstrucciones han reducido materialmente el déficit.
JetStream 2
JetStream 2 es explícitamente un benchmark de rendimiento máximo de JS. Incluye cargas de trabajo asm.js, pruebas de latencia y pruebas de rendimiento máximo, que todas se benefician enormemente de la compilación DFG y FTL. Este benchmark muestra la división más marcada.
| Dispositivo | Modo normal | Modo Aislamiento | Brecha |
|---|---|---|---|
| iPhone 15 (A16) | 156 | 19 | -88 % |
| iPhone 16 (A18) | 189 | 23 | -88 % |
La brecha de JetStream apenas se ha movido desde 2022. Esto es esperado: JetStream está diseñado para estresar precisamente los niveles de optimización que el Modo Aislamiento elimina. Las mejoras del intérprete ayudan a la navegación rutinaria pero no pueden compensar la ausencia de DFG/FTL en cargas de trabajo computacionalmente intensivas.
MotionMark 1.3
MotionMark prueba el rendimiento de renderizado: transformaciones CSS, animación SVG, composición canvas y efectos de filtro. La mayor parte de esta carga de trabajo se ejecuta en el pipeline de composición GPU, no en el motor JS.
| Dispositivo | Modo normal | Modo Aislamiento | Brecha |
|---|---|---|---|
| iPhone 15 (A16) | 880 | 740 | -16 % |
| iPhone 16 (A18) | 1.050 | 885 | -16 % |
La brecha de ~16% es menor que en 2022 (que era ~20%), sugiriendo que las mejoras del pipeline GPU benefician igualmente a ambos modos. Para usuarios cuya navegación principal involucra páginas ricas en medios pero ligeras en JS, el Modo Aislamiento conlleva un coste de renderizado tolerable.
Carga de páginas real (media geométrica, 50 sitios Alexa)
Las puntuaciones de benchmark puras no siempre se traducen directamente en velocidad percibida por el usuario. Una prueba suplementaria de carga de páginas usando metodología equivalente a WebPageTest en los 50 sitios más visitados por tráfico mostró:
| Métrica | Normal | Aislamiento | Brecha |
|---|---|---|---|
| Time to Interactive (mediana) | 1,8 s | 2,4 s | +0,6 s |
| First Contentful Paint (mediana) | 0,9 s | 1,1 s | +0,2 s |
| Largest Contentful Paint (mediana) | 2,1 s | 2,8 s | +0,7 s |
En la navegación real, la brecha se traduce en un retraso perceptible pero no debilitante — aproximadamente medio segundo en el Time to Interactive. Para los usuarios preocupados por la privacidad, este es probablemente un coste aceptable. Para el uso cotidiano, es una fricción constante.
Comparación: V8, SpiderMonkey, JavaScriptCore 2026
WebKit no opera en aislamiento. Otros dos motores JavaScript principales compiten en las mismas suites de benchmarks y apuntan a hardware superpuesto.
Comparación de arquitectura de motores JavaScript: JSC, V8 y SpiderMonkey hacen compromisos diferentes entre velocidad de inicio, rendimiento máximo y endurecimiento de seguridad.
V8 (Chrome, Edge)
V8 usa una arquitectura JIT de dos niveles: Sparkplug (Baseline, inicio rápido) y TurboFan (optimizador, alto rendimiento), con Maglev como nivel intermedio añadido en 2023. En hardware Android (Snapdragon 8 Gen 3), V8 con Maglev muestra puntuaciones Speedometer 3.0 competitivas con JSC en Apple Silicon, pero el rendimiento máximo de JetStream 2 favorece a JSC en hardware A18 en aproximadamente un 10–15%.
La postura de seguridad de V8 también ha evolucionado: el sandbox de V8 (finalizado en 2024) aísla el heap JIT del heap del proceso del navegador, creando una capa de contención análoga al Gigacage de JSC. V8 no ofrece un modo "JIT desactivado" para usuarios finales comparable al Modo Aislamiento de iOS.
SpiderMonkey (Firefox)
SpiderMonkey usa un enfoque de tres niveles: un intérprete base, Baseline JIT e IonMonkey (optimizador). Mozilla ha invertido masivamente en endurecimiento de seguridad — Warp (el sistema de inferencia de tipos actual que reemplaza IonIR) fue diseñado con la seguridad como objetivo co-igual al rendimiento después de una serie de CVE JIT en 2019–2021.
Firefox en escritorio no expone un interruptor de desactivación JIT a los usuarios. javascript.options.jit.content puede configurarse a false en about:config, y SpiderMonkey volverá al intérprete base — análogo al efecto del Modo Aislamiento en JSC. La degradación del rendimiento en ese camino refleja el panorama de JSC: severa en JetStream, moderada en Speedometer.
Resumen Speedometer 3.0 cross-motor (escritorio, hardware comparable)
| Motor | Navegador | Puntuación (aprox.) |
|---|---|---|
| JavaScriptCore | Safari 18 (macOS, M3) | 560 |
| V8 | Chrome 124 (macOS, M3) | 530 |
| SpiderMonkey | Firefox 126 (macOS, M3) | 310 |
JSC en Apple Silicon lidera en Speedometer 3.0, probablemente porque las cargas de trabajo del benchmark se superponen con patrones que Apple ha optimizado específicamente en FTL y en el motor de maquetación de WebKit. Firefox con SpiderMonkey queda rezagado por un margen mayor, en parte debido a diferencias en el motor de maquetación más allá del puro rendimiento JS.
En iOS específicamente, solo las puntuaciones de JSC son relevantes — Chrome y Firefox en iOS 18 todavía usan WebKit bajo el capó, por lo que su rendimiento JS iguala al de Safari en la práctica.
El caso para navegar sin JIT
Cuatro años después, la pregunta de quién debería usar el Modo Aislamiento se ha vuelto más matizada, no menos.
El argumento de seguridad sigue siendo sólido. Los CVE del JIT de WebKit siguen apareciendo en 2025–2026. El mercado comercial de exploits valora los exploits full-chain de WebKit en iOS en siete cifras, indicando inversión sostenida del atacante. Deshabilitar el JIT elimina la superficie de ataque de mayor valor en la pila del navegador. Para cualquiera en el modelo de amenaza que Apple describió en 2022 — periodistas, trabajadores de derechos humanos, disidentes políticos, ejecutivos con acceso a sistemas sensibles — ese compromiso es claro.
El coste de rendimiento ha disminuido pero no desaparecido. La brecha Speedometer 2.0 de 2022 de ~65% se ha reducido a ~33% en Speedometer 3.0 en 2026. En la navegación real, la brecha está más cerca de 0,5–0,7 segundos en el Time to Interactive. Las mejoras del intérprete de WebKit son reales. Pero las cargas de trabajo de clase JetStream todavía caen ~88% — las aplicaciones web computacionalmente intensivas (juegos WebAssembly, editores de video en el navegador, dashboards de datos complejos) permanecen significativamente degradadas.
El panorama de compatibilidad es estable, no resuelto. El Modo Aislamiento sigue desactivando WebAssembly, una proporción creciente de la funcionalidad de las aplicaciones web. Los sitios que usan WASM para procesamiento de imágenes, worklets de audio o tareas computacionales fallarán o recurrirán a caminos más lentos. Esta es una decisión deliberada de seguridad, no un bug, pero significa que los usuarios del Modo Aislamiento ocasionalmente encontrarán experiencias rotas en aplicaciones web modernas.
El marco de decisión
Considera el Modo Aislamiento si:
- Eres un objetivo de alto perfil para vigilancia de nivel gubernamental o espionaje corporativo.
- Accedes regularmente a comunicaciones sensibles, sistemas financieros o documentos confidenciales desde tu iPhone.
- Las aplicaciones y sitios que más usas son compatibles — la mayoría de los casos de uso de lectura de contenido funcionan bien en Modo Aislamiento.
Pospón el Modo Aislamiento si:
- Usas aplicaciones web complejas (herramientas dependientes de WASM, IDEs en el navegador, plataformas de datos interactivas).
- No estás en un modelo de amenaza elevado para ataques dirigidos.
- El coste de rendimiento en tu flujo de trabajo específico es prohibitivo.
La trayectoria futura es hacia una brecha más pequeña. La inversión continua de Apple en endurecimiento de LLInt, extensión IC a nivel del intérprete y codiseño hardware-software en Apple Silicon sugiere que la brecha de Speedometer podría cerrarse más para 2027–2028. La brecha de JetStream permanecerá estructural hasta que el benchmark mismo o las cargas de trabajo que representa sean menos dependientes del JIT.
Para una visión más amplia de dónde se encuentra la privacidad del navegador en todas las plataformas, consulta el informe pilar Estado de la privacidad del navegador 2026. Para las mediciones originales de 2022 que establecieron la referencia, ver El impacto del Modo Aislamiento iOS 16 en Safari. Para la retrospectiva completa de cuatro años sobre lo que el Modo Aislamiento cambió en iOS, ver Modo Aislamiento iOS — cuatro años después. Y para una comparación cross-browser que cubre Brave, Tor Browser, Mullvad y LibreWolf, ver Navegadores de privacidad 2026.
Preguntas frecuentes
¿Cuánto más lento es Safari en Modo Aislamiento en 2026? En Speedometer 3.0, el Modo Aislamiento puntúa aproximadamente un 30–35% menos que Safari estándar en iPhone 15/16. Es una mejora significativa respecto a la brecha Speedometer 2.0 del ~65% medida en 2022, gracias a las mejoras del intérprete WebKit y el trabajo en el tier Baseline en iOS 17–18.
¿Se sigue explotando el JIT de WebKit en 2026? Sí. Los CVE relacionados con el JIT de WebKit siguen apareciendo en 2025–2026, aunque la tasa ha disminuido. Los esfuerzos de endurecimiento de Apple (Gigacage, BoundsChecking, gating de permisos JIT) han elevado la barrera de explotación, pero el JIT sigue siendo la principal superficie de ataque en exploits móviles dirigidos.
¿Qué es el JIT spray y cómo afecta a WebKit? El JIT spray es una técnica de inyección de código que incrusta shellcode dentro de código compilado JIT mediante la creación de JavaScript con valores constantes específicos. Las mitigaciones de WebKit como Gigacage y el posicionamiento aleatorio del código dificultan el JIT spray clásico, pero variantes creativas siguen apareciendo en investigación avanzada de amenazas.
¿Cuál es la diferencia de puntuación JetStream 2 entre modo normal y Modo Aislamiento? JetStream 2 es muy sensible al JIT. El Modo Aislamiento típicamente puntúa un 85–90% menos en iPhone 15, ya que la mayoría de las cargas de trabajo JetStream dependen de los tiers DFG y FTL. Speedometer 3.0 muestra una brecha menor porque incluye trabajo de DOM y maquetación más allá del rendimiento JS puro.
¿Se puede activar el JIT en Modo Aislamiento en iOS 18? No. A partir de iOS 18, el Modo Aislamiento continúa desactivando el JIT en todos los navegadores basados en WebKit. Apple no ha introducido una lista blanca JIT por sitio en el Modo Aislamiento.
¿Es JavaScriptCore más rápido que V8 en 2026? En benchmarks de rendimiento máximo (JetStream 2, cargas de trabajo tipo Octane), V8 con TurboFan generalmente lidera en hardware Android. En Apple Silicon (iPhone 15/16 con A17/A18 Pro), JSC obtiene resultados competitivos o superiores gracias al codiseño hardware-software, especialmente en las cargas de trabajo realistas de Speedometer 3.0.
¿Qué benchmark refleja mejor el rendimiento de navegación real? Speedometer 3.0 es el mejor predictor del rendimiento real hoy. Simula un amplio conjunto de interacciones con frameworks JavaScript y operaciones DOM. JetStream 2 prueba el rendimiento máximo de JS, que importa para aplicaciones web con uso intensivo de cómputo. MotionMark se centra en la fidelidad de renderizado.
¿Debería usar el Modo Aislamiento para la navegación diaria? El Modo Aislamiento está diseñado para personas de alto riesgo — periodistas, activistas, ejecutivos que enfrentan ataques dirigidos. Para los usuarios cotidianos, impone costes notables de rendimiento y compatibilidad (aplicaciones web rotas, APIs desactivadas) que superan el modelo de amenaza. Actívalo solo si tienes razones fundadas para creer que eres objetivo de ataques sofisticados.