Cómo el valor centinela filtrado elude la protección HardenProtect de Chrome V8
Introducción
El valor centinela es un valor especial en algoritmos, comúnmente utilizado en algoritmos de bucle o recursivos como condición de terminación. Este tipo de valor se utiliza ampliamente en el código fuente de Chrome. Recientemente, investigadores de seguridad descubrieron que, al filtrar el objeto TheHole, se puede lograr la ejecución de código arbitrario dentro de la sandbox de Chrome. El equipo de Google rápidamente solucionó estas dos vulnerabilidades en el entorno.
Sin embargo, también existen otros objetos nativos en V8 que no deberían filtrarse a JavaScript. Este artículo discutirá un nuevo objeto: Uninitialized Oddball. Este método de elusión apareció por primera vez en un problema presentado por un miembro de Project0, y todavía está disponible en la última versión de V8.
Es importante señalar que este método tiene una gran versatilidad:
En CVE-2021-30551, el primer POC es la filtración de un oddball interno no inicializado.
El POC de CVE-2022-1486 también reveló directamente UninitializedOddball.
Un problema sin CVE asignado también utilizó este método.
Estos casos son suficientes para ilustrar la importancia del problema y vale la pena revisar el software que podría verse afectado.
Valor centinela en V8
La mayoría de los objetos nativos de V8 están definidos en el archivo v8/src/roots/roots.h y se disponen de manera adyacente en la memoria. Una vez que estos objetos nativos, que no deberían ser filtrados, se filtran a JavaScript, pueden llevar a la ejecución de código arbitrario dentro del sandbox.
Podemos filtrar el Oddball no inicializado en JavaScript modificando la función nativa de V8. El método específico consiste en cambiar el desplazamiento relativo del aislante en la función %TheHole() para que devuelva el Oddball no inicializado.
Evitar HardenType
El uso de Uninitialized Oddball permite realizar lecturas y escrituras relativamente arbitrarias. La clave está en que la función read optimizada solo verifica la propiedad prop del objeto, pero no verifica el valor de obj.prop como clave. Esto provoca una confusión de tipos durante el cálculo, lo que permite lecturas arbitrarias.
Bajo la arquitectura x86, debido a la falta de compresión de direcciones, la lectura y escritura arbitrarias son respecto a todo el proceso. Aunque se carece de la conveniencia que ofrece la compresión de direcciones, aún se puede leer y escribir el contenido objetivo con una alta probabilidad debido al tamaño considerable de ciertos archivos de software.
Advertencia de PatchGap
Este parche PatchGap no solo se refiere al Issue1352549, sino que también incluye múltiples vulnerabilidades como el Issue1314616 y el Issue1216437. Después de que se hiciera público el nuevo método de evasión, la dificultad para explotar estas vulnerabilidades se redujo drásticamente. Los hackers pueden completar una cadena de explotación completa casi sin necesidad de investigación adicional.
Resumen
En V8 hay muchos otros valores Sentinel, que también pueden tener problemas similares. Esto nos da algunas pistas:
¿Se puede lograr RCE en V8 con otras filtraciones de uninitialized_Oddball?
¿Deberían estos problemas considerarse formalmente como problemas de seguridad?
¿Debería incluirse el valor centinela como variable en las pruebas Fuzzer?
De todos modos, este tipo de problemas acortará significativamente el ciclo para que los hackers logren una explotación completa, lo cual merece nuestra alta atención.
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
18 me gusta
Recompensa
18
6
Republicar
Compartir
Comentar
0/400
ContractTester
· 08-15 05:19
Un nuevo problema del viejo agujero ha vuelto.
Ver originalesResponder0
BlockchainWorker
· 08-13 17:55
la vulnerabilidad v8 es muy grave
Ver originalesResponder0
SocialFiQueen
· 08-12 12:23
Se requiere seguir la solución de problemas graves.
Nueva vulnerabilidad del motor Chrome V8: filtración de Oddball no inicializado que elude la sandbox
Cómo el valor centinela filtrado elude la protección HardenProtect de Chrome V8
Introducción
El valor centinela es un valor especial en algoritmos, comúnmente utilizado en algoritmos de bucle o recursivos como condición de terminación. Este tipo de valor se utiliza ampliamente en el código fuente de Chrome. Recientemente, investigadores de seguridad descubrieron que, al filtrar el objeto TheHole, se puede lograr la ejecución de código arbitrario dentro de la sandbox de Chrome. El equipo de Google rápidamente solucionó estas dos vulnerabilidades en el entorno.
Sin embargo, también existen otros objetos nativos en V8 que no deberían filtrarse a JavaScript. Este artículo discutirá un nuevo objeto: Uninitialized Oddball. Este método de elusión apareció por primera vez en un problema presentado por un miembro de Project0, y todavía está disponible en la última versión de V8.
Es importante señalar que este método tiene una gran versatilidad:
En CVE-2021-30551, el primer POC es la filtración de un oddball interno no inicializado.
El POC de CVE-2022-1486 también reveló directamente UninitializedOddball.
Un problema sin CVE asignado también utilizó este método.
Estos casos son suficientes para ilustrar la importancia del problema y vale la pena revisar el software que podría verse afectado.
Valor centinela en V8
La mayoría de los objetos nativos de V8 están definidos en el archivo v8/src/roots/roots.h y se disponen de manera adyacente en la memoria. Una vez que estos objetos nativos, que no deberían ser filtrados, se filtran a JavaScript, pueden llevar a la ejecución de código arbitrario dentro del sandbox.
Podemos filtrar el Oddball no inicializado en JavaScript modificando la función nativa de V8. El método específico consiste en cambiar el desplazamiento relativo del aislante en la función %TheHole() para que devuelva el Oddball no inicializado.
Evitar HardenType
El uso de Uninitialized Oddball permite realizar lecturas y escrituras relativamente arbitrarias. La clave está en que la función read optimizada solo verifica la propiedad prop del objeto, pero no verifica el valor de obj.prop como clave. Esto provoca una confusión de tipos durante el cálculo, lo que permite lecturas arbitrarias.
Bajo la arquitectura x86, debido a la falta de compresión de direcciones, la lectura y escritura arbitrarias son respecto a todo el proceso. Aunque se carece de la conveniencia que ofrece la compresión de direcciones, aún se puede leer y escribir el contenido objetivo con una alta probabilidad debido al tamaño considerable de ciertos archivos de software.
Advertencia de PatchGap
Este parche PatchGap no solo se refiere al Issue1352549, sino que también incluye múltiples vulnerabilidades como el Issue1314616 y el Issue1216437. Después de que se hiciera público el nuevo método de evasión, la dificultad para explotar estas vulnerabilidades se redujo drásticamente. Los hackers pueden completar una cadena de explotación completa casi sin necesidad de investigación adicional.
Resumen
En V8 hay muchos otros valores Sentinel, que también pueden tener problemas similares. Esto nos da algunas pistas:
¿Se puede lograr RCE en V8 con otras filtraciones de uninitialized_Oddball?
¿Deberían estos problemas considerarse formalmente como problemas de seguridad?
¿Debería incluirse el valor centinela como variable en las pruebas Fuzzer?
De todos modos, este tipo de problemas acortará significativamente el ciclo para que los hackers logren una explotación completa, lo cual merece nuestra alta atención.