Compartir:
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.