El pasado marzo de 2024, un investigador reportó dos vulnerabilidades crÃticas en el motor de JavaScript de Chrome, v8, catalogadas como CVE-2024-3833 y CVE-2024-3832. Ambas vulnerabilidades, que permitÃan la ejecución remota de código (RCE) al visitar un sitio malicioso, fueron corregidas con la actualización a la versión 124.0.6367.60/.61 del navegador.
En particular, la vulnerabilidad CVE-2024-3833 se originaba en un fallo de corrupción de objetos que permitÃa crear propiedades duplicadas en objetos de v8. Esta técnica permitÃa la ejecución remota de código en el entorno aislado (sandbox) del renderizador de Chrome mediante un único acceso a un sitio malicioso.
El investigador describió cómo las nuevas caracterÃsticas en Chrome a veces se implementan como caracterÃsticas de prueba de origen antes de estar disponibles para el público en general. Los desarrolladores web pueden registrarse para probar estas caracterÃsticas en sus sitios y proporcionar retroalimentación a Chrome. Sin embargo, este proceso contiene riesgos de seguridad inherentes. Un ejemplo previo de una vulnerabilidad similar involucraba la gestión de excepciones de WebAssembly, reportada como CVE-2021-30561. En ese caso, se pudo producir una confusión de tipos al crear propiedades de excepción duplicadas en WebAssembly, lo que también permitÃa ejecutar código arbitrario.
El nuevo fallo, CVE-2024-3833, implicó la adición de la integración de promesas de JavaScript en WebAssembly como una caracterÃstica de prueba de origen. El investigador ilustró un método para generar propiedades duplicadas en objetos WebAssembly utilizando esta integración de promesas, similar al mecanismo que se explotó en la CVE-2021-30561. Al cambiar la variable global WebAssembly a un objeto diferente y luego activar la prueba de origen, se podÃa crear un objeto con propiedades duplicadas.
El investigador también explicó cómo un parche de endurecimiento previo habÃa impedido la creación de objetos rápidos con propiedades duplicadas directamente. Sin embargo, detalló cómo podÃa aprovechar el fallo para crear objetos de diccionario con propiedades duplicadas y luego convertirlos en objetos rápidos.
Al explotar la vulnerabilidad, se podrÃa conseguir una escritura fuera de los lÃmites (OOB) en la PropertyArray de un objeto v8 especÃfico. Este tipo de escritura OOB permite la reconfiguración de objetos en la memoria de v8, llevando potencialmente a una confusión de tipos y proporcionando un acceso fuera de los lÃmites.
Finalmente, el investigador señaló que a pesar de que v8 ahora tiene un sandbox de memoria que aÃsla el heap de v8 del resto de la memoria del proceso, pudo eludir esta medida de seguridad. Manipuló la tabla de funciones importadas en instancias de WebAssembly para redirigir la ejecución a ubicaciones de memoria controladas, logrando asà la ejecución de código arbitrario.
Este conjunto de vulnerabilidades ilustra los riesgos y complejidades involucradas en la implementación y prueba de caracterÃsticas de nuevos navegadores, subrayando la importancia de la seguridad durante el desarrollo de software.