Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/borahll/cve-2021-21220
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubborahll/cve-2021-21220

CVE-2021-21220

Presentación educativa que detalla la explotación de CVE-2021-21220, un bug de confusión de tipos del compilador JIT de V8 que conduce a acceso fuera de límites, lectura/escritura arbitraria de memoria y ejecución remota de código a través de WebAssembly.

Ver Repositorio
hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Explotación de CVE-2021-21220

Desde un Comportamiento Incorrecto de JIT hasta la Ejecución Remota de Código

Resumen

Esta presentación explica la explotación de CVE-2021-21220, una vulnerabilidad en el motor JavaScript V8 de Google Chrome causada por suposiciones incorrectas del compilador JIT durante la optimización.

La presentación recorre:

  • Cómo V8 realiza la compilación Just-In-Time (JIT)
  • Cómo aparece un error de confusión de tipos con signo/sin signo durante la optimización
  • Cómo el error conduce a una primitiva de matriz fuera de límites (OOB)
  • Cómo los atacantes pueden aprovechar el acceso OOB para filtrar direcciones y lograr escrituras arbitrarias de memoria
  • Cómo WebAssembly (Wasm) se convierte en un objetivo para la ejecución de código nativo
  • Mitigaciones existentes y defensas modernas de los navegadores

Objetivos de la Presentación

El objetivo de esta presentación es demostrar cómo un sutil error de optimización dentro de un motor JavaScript moderno puede escalar a:

  • Corrupción de memoria
  • Primitivas de lectura/escritura arbitrarias
  • Modificación de código nativo
  • Posible Ejecución Remota de Código (RCE)

La cadena de explotación resalta cómo los motores JIT equilibran el rendimiento y la seguridad, y cómo las suposiciones de optimización incorrectas pueden volverse explotables.


Temas Cubiertos

1. Arquitectura de V8

La presentación introduce los principales componentes de V8:

Intérprete Ignition

  • Ejecuta bytecode de JavaScript
  • Recopila retroalimentación en tiempo de ejecución
  • Almacena información de tipos en vectores de retroalimentación

Optimizador TurboFan

  • Construye grafos optimizados a partir de la retroalimentación en tiempo de ejecución
  • Inserta suposiciones especulativas y protecciones (guards)
  • Realiza pases de optimización agresivos

Backend de Código Máquina

  • Emite instrucciones nativas de la CPU
  • Produce código máquina optimizado para funciones "calientes" (hot)

El diagrama de arquitectura en la presentación ilustra cómo JavaScript se mueve desde:

root@kitploit:~
Parsing → Bytecode → Optimization → Execution

2. Por qué JavaScript es difícil de optimizar

JavaScript es un desafío para la ejecución de alto rendimiento porque:

  • Las variables cambian de tipo dinámicamente
  • Los arreglos cambian de estructura y tipos de elementos
  • Operadores como + pueden tener múltiples significados
  • Las comprobaciones en tiempo de ejecución son costosas

V8 utiliza la compilación JIT para optimizar patrones de ejecución comunes especulando sobre el comportamiento en tiempo de ejecución.


3. Causa Raíz de CVE-2021-21220

La vulnerabilidad se origina en una discrepancia de enteros con signo y sin signo durante la optimización JIT.

Conceptos clave demostrados:

  • Uint32Array
  • Word32Xor
  • Propagación de tipos incorrecta
  • ChangeInt32ToInt64
  • Selección incorrecta de instrucciones de ensamblador

El exploit abusa del valor:

root@kitploit:~
0x80000000

4. Desajuste de Optimización

La vulnerabilidad ocurre porque TurboFan optimiza:

root@kitploit:~
x ^ 0

por completo.

Durante esta optimización:

  • La operación XOR desaparece
  • La información de tipo se pierde
  • Los valores con signo se interpretan como sin signo
  • El comportamiento de JIT diverge del comportamiento del intérprete

Esto resulta en una generación incorrecta de código máquina y valores controlados por el atacante.


5. Construyendo una Primitiva OOB

El exploit convierte el resultado incorrecto de JIT en control sobre el comportamiento del arreglo.

La presentación demuestra:

  1. Valor entero optimizado incorrecto
  2. Conversión en la variable de control i
  3. Desajuste entre la ejecución de calentamiento (warmup) y la de activación (trigger)
  4. Subdesbordamiento de longitud con Array.shift()
  5. Creación de un arreglo capaz de OOB

Conceptos importantes de explotación mostrados:

  • Optimización de calentamiento
  • Optimización especulativa
  • Confusión de tipos
  • Corrupción de la longitud del arreglo

6. Acceso Fuera de Límites

Una vez que la longitud del arreglo se convierte en -1, el atacante obtiene:

  • Lecturas fuera de límites
  • Escrituras fuera de límites
  • Acceso a objetos vecinos del heap de V8

El exploit luego demuestra:

  • Filtraciones de punteros
  • Descubrimiento de direcciones de objetos
  • Arreglos superpuestos
  • Extracción de punteros sin procesar de V8

7. Abuso de WebAssembly

La presentación explica cómo los atacantes pueden apuntar a:

  • Páginas de código compilado de WebAssembly
  • Memoria ejecutable nativa generada por V8

Flujo de ataque:

  1. Crear una función Wasm
  2. Localizar memoria ejecutable
  3. Sobrescribir el código máquina compilado
  4. Re-ejecutar Wasm
  5. Lograr ejecución nativa arbitraria

Esto demuestra cómo un error del motor JavaScript puede transicionar a la ejecución de código a nivel de proceso.


Defensas y Mitigaciones

La sección final cubre las defensas modernas de los navegadores:

Punteros Comprimidos

Reducen la exposición directa de punteros y la previsibilidad del heap.

Indirección de Punteros

Previenen el acceso directo a direcciones de memoria sin procesar.

Sandboxing del Heap

Aíslan regiones de memoria y reducen el impacto del exploit.

W^X (Write XOR Execute)

Previenen que las páginas sean escribibles y ejecutables simultáneamente.

La presentación también incluye el diff real del parche de V8 que muestra la corrección del problema de extensión con signo.


Conclusiones Clave

Esta presentación demuestra cómo:

  • Pequeños errores de optimización pueden convertirse en vulnerabilidades críticas
  • Los compiladores JIT aumentan significativamente la complejidad de la superficie de ataque
  • La especulación en tiempo de ejecución puede introducir inconsistencias peligrosas
  • WebAssembly cambia el panorama de la explotación
  • Los navegadores modernos requieren múltiples defensas en capas

Tecnologías Discutidas

  • JavaScript
  • Motor Google V8
  • TurboFan
  • Ignition
  • WebAssembly (Wasm)
  • Compilación JIT
  • Corrupción de memoria
  • Acceso fuera de límites
  • Explotación de navegadores

Propósito Educativo

Este material está destinado estrictamente para:

  • Investigación en seguridad
  • Demostraciones educativas
  • Aprendizaje de internos del navegador
  • Análisis de vulnerabilidades

No utilice esta información contra sistemas que no posea o para los que no tenga permiso de prueba.


Referencia

  • CVE-2021-21220
  • Motor Google Chrome V8
  • Internos del Compilador TurboFan
  • Seguridad en Tiempo de Ejecución de WebAssembly
  • https://www.zerodayinitiative.com/blog/2021/12/15/exploitation-of-cve-2021-21220-from-incorrect-jit-behavior-to-rce
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
Descargar herramienta