El pasado mes de marzo de 2024, un investigador destacó dos vulnerabilidades críticas en el motor de JavaScript de Chrome, conocido como v8, catalogadas como CVE-2024-3833 y CVE-2024-3832. Ambas fallas, que permitían la ejecución remota de código (RCE) al navegar en sitios maliciosos, fueron solucionadas con una actualización a la versión 124.0.6367.60/.61 del navegador.
Particularmente, la vulnerabilidad CVE-2024-3833 surgía de un error de corrupción de objetos que permitía la creación de propiedades duplicadas en objetos de v8. Esta técnica facilitaba la ejecución remota de código dentro del entorno aislado (sandbox) del renderizador de Chrome, simplemente al visitar un sitio web malicioso.
El investigador mostró cómo las nuevas características en Chrome suelen ser implementadas como pruebas de origen antes de ser lanzadas al público. Los desarrolladores web pueden registrarse para probar estas funciones en sus sitios y brindar retroalimentación sobre ellas. Sin embargo, este proceso conlleva riesgos de seguridad. Un caso previo involucraba la gestión de excepciones de WebAssembly, catalogado como CVE-2021-30561. En esa situación, se logró una confusión de tipos al crear propiedades de excepción duplicadas en WebAssembly, lo que permitía la ejecución de código arbitrario.
La nueva vulnerabilidad, CVE-2024-3833, surgió con la integración de promesas de JavaScript en WebAssembly como una característica de prueba de origen. El investigador ilustró cómo generar propiedades duplicadas en objetos WebAssembly utilizando esta integración, similar al mecanismo explotado en la CVE-2021-30561. Cambiando la variable global WebAssembly
a un objeto diferente y activando la prueba de origen, se podía crear un objeto con propiedades duplicadas.
También se explicó cómo un parche de endurecimiento previo había impedido la creación directa de objetos rápidos con propiedades duplicadas. Sin embargo, el investigador detalló cómo aprovechar la falla para crear objetos de diccionario con propiedades duplicadas y luego convertirlos en objetos rápidos.
La explotación de esta vulnerabilidad permitía una escritura fuera de límites (OOB) en el PropertyArray
de un objeto v8 específico. Este tipo de escritura OOB reconfigura objetos en la memoria de v8, llevando a una confusión de tipos y proporcionando acceso fuera de los límites.
El investigador concluyó que, a pesar de que v8 ahora cuenta con 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 destaca los riesgos y la complejidad asociada a la implementación y prueba de nuevas características en navegadores, subrayando la importancia de la seguridad en el desarrollo de software.
vía: GitHub Security