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.