En una reciente vulnerabilidad reportada, CVE-2024-3833, se descubrió un error de corrupción de objetos en V8, el motor de JavaScript de Chrome, que permite la ejecución remota de código (RCE) en el sandbox del renderizador de Chrome con una sola visita a un sitio malicioso. Este error, junto con otra vulnerabilidad similar, CVE-2024-3832, fueron reportados en marzo de 2024 y ya se han corregido en la versión 124.0.6367.60/.61 del navegador.
Estos fallos reflejan problemas fundamentales en cómo Chrome maneja las características experimentales conocidas como «origin trials». Las características de «origin trials» permiten a los desarrolladores web registrar sus orígenes y probar nuevas funcionalidades antes de que estén disponibles para todos los usuarios. Sin embargo, la implementación de estas características ha estado plagada de errores que pueden ser explotados antes de que el JavaScript del usuario sea ejecutado, abriendo brechas de seguridad significativas.
Un ejemplo destacado es CVE-2021-30561, reportado anteriormente por Sergei Glazunov de Google Project Zero. Este fallo permitía la creación de propiedades duplicadas en el objeto WebAssembly de JavaScript, lo cual podía ser explotado para causar confusión de tipo y lograr RCE. En un contexto similar, CVE-2024-3833 y CVE-2024-3832 exhiben debilidades al crear las propiedades «Suspender» y «Function» en el objeto WebAssembly.
El proceso de explotación de CVE-2024-3833 es complejo y se fundamenta en la manipulación de objetos internamente utilizando las características de origin trials. Al analizar uno de los problemas, se descubrió que el código que definía nuevas propiedades en WebAssembly no verificaba correctamente si alguna propiedad ya existía. Modificando el objeto WebAssembly global, se podía engañar al mecanismo de verificación para crear propiedades duplicadas.
La explotación de estos fallos implica, en última instancia, la creación de objetos en el motor V8 de Chrome que presenten propiedades duplicadas, lo cual permite la ejecución de código malicioso. Un caso ilustrativo fue el uso de un array de propiedades de JavaScript (PropertyArray) para lograr escritura fuera de límites y sobrescribir valores críticos en otros objetos, llevando eventualmente a la ejecución de código arbitrario dentro del sandbox de Chrome.
Para potenciar el alcance del código malicioso más allá de las restricciones del sandbox de V8, se utilizó una innovación reciente llamada «v8 heap sandbox». A través del redireccionamiento de funciones importadas por WebAssembly, que se almacenan en el heap de V8, los investigadores fueron capaces de ejecutar código shell arbitrario. Este enfoque aprovecha el hecho de que las funciones de matemáticas importadas, al ser ejecutadas desde WebAssembly, permiten redirigir las llamadas de manera precisa a través de manipulaciones bien calculadas de los objetos en la memoria.
Finalmente, esta cadena de ataques destaca la sofisticación y los desafíos de mantener la seguridad en navegadores web modernos como Chrome. Las implicaciones de descubrir y explotar tales vulnerabilidades subrayan la importancia de actualizar constantemente los navegadores y mejorar las tecnologías de aislamiento y protección de memoria. La comunidad de seguridad y desarrollo web debe permanecer vigilante y continuar innovando en los métodos para fortalecer estas defensas contra ataques cada vez más complejos y dirigidos.