Análisis técnico de la fuga del Valor Sentinel que elude HardenProtect de Chrome V8
El valor centinela es un valor especial en algoritmos, que generalmente existe como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome hay muchos valores centinela. Recientemente, se ha demostrado que, a través de la filtración del objeto TheHole, se puede lograr la ejecución de código arbitrario en la sandbox para CVE-2021-38003 y CVE-2022-1364. El equipo de Google luego actualizó estas dos vulnerabilidades en el entorno salvaje.
Además del objeto TheHole, hay otros objetos nativos en V8 que no deben ser revelados a JavaScript. Este artículo discute el objeto Uninitialized Oddball, que actualmente aún se puede utilizar en la última versión de V8.
La mayoría de los objetos nativos de V8 están definidos en el archivo v8/src/roots/roots.h, y estos objetos están dispuestos de manera contigua en la memoria. Una vez que se filtra un objeto nativo que no debería ser expuesto a JavaScript, podría lograrse la ejecución de código arbitrario dentro de la sandbox.
Para verificar este método, se puede modificar la función nativa de V8 para filtrar Uninitialized Oddball en JavaScript. En concreto, se puede modificar el desplazamiento relativo de la función %TheHole() respecto al isolate, para que devuelva Uninitialized Oddball.
El uso de Uninitialized Oddball permite lograr lecturas y escrituras relativamente arbitrarias. La función read de JavaScript optimizada calculará directamente el desplazamiento según la semántica de JavaScript, obteniendo el valor del arreglo, lo que resulta en confusión de tipos y permite lecturas arbitrarias.
La solución recomendada es agregar una verificación del mapa del arreglo al devolver elementos del arreglo optimizado en la función, evitando calcular directamente el desplazamiento para devolver los valores del arreglo.
Cabe destacar que este método no solo es aplicable a Chrome, sino que otros software que utilizan el motor V8 también pueden verse afectados. Por ejemplo, Skype aún no ha solucionado esta vulnerabilidad. En x86, debido a la falta de compresión de direcciones, la lectura y escritura arbitrarias son directamente relativas a todo el proceso.
En general, se puede lograr la lectura arbitraria de primitivos a través de la filtración de uninitialized_Oddball en el valor Sentinel. En V8 hay otros valores Sentinel que pueden causar problemas similares. Se recomienda agregar estos valores Sentinel como variables en el fuzzer para descubrir más potenciales primitivos de explotación. Independientemente de si se consideran oficialmente como problemas de seguridad, este tipo de problemas acortará significativamente el ciclo para que los hackers logren una explotación completa.
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.
11 me gusta
Recompensa
11
4
Compartir
Comentar
0/400
TommyTeacher
· 07-20 16:35
Ciertamente es un poco peligroso, ¿eh?
Ver originalesResponder0
BrokeBeans
· 07-20 16:22
Pasar todo el día pensando en cavar agujeros, ¿no es mejor practicar con un libro de ejercicios?
Análisis y defensa de la vulnerabilidad de fuga de Sentinel Value del motor Chrome V8
Análisis técnico de la fuga del Valor Sentinel que elude HardenProtect de Chrome V8
El valor centinela es un valor especial en algoritmos, que generalmente existe como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome hay muchos valores centinela. Recientemente, se ha demostrado que, a través de la filtración del objeto TheHole, se puede lograr la ejecución de código arbitrario en la sandbox para CVE-2021-38003 y CVE-2022-1364. El equipo de Google luego actualizó estas dos vulnerabilidades en el entorno salvaje.
Además del objeto TheHole, hay otros objetos nativos en V8 que no deben ser revelados a JavaScript. Este artículo discute el objeto Uninitialized Oddball, que actualmente aún se puede utilizar en la última versión de V8.
La mayoría de los objetos nativos de V8 están definidos en el archivo v8/src/roots/roots.h, y estos objetos están dispuestos de manera contigua en la memoria. Una vez que se filtra un objeto nativo que no debería ser expuesto a JavaScript, podría lograrse la ejecución de código arbitrario dentro de la sandbox.
Para verificar este método, se puede modificar la función nativa de V8 para filtrar Uninitialized Oddball en JavaScript. En concreto, se puede modificar el desplazamiento relativo de la función %TheHole() respecto al isolate, para que devuelva Uninitialized Oddball.
El uso de Uninitialized Oddball permite lograr lecturas y escrituras relativamente arbitrarias. La función read de JavaScript optimizada calculará directamente el desplazamiento según la semántica de JavaScript, obteniendo el valor del arreglo, lo que resulta en confusión de tipos y permite lecturas arbitrarias.
La solución recomendada es agregar una verificación del mapa del arreglo al devolver elementos del arreglo optimizado en la función, evitando calcular directamente el desplazamiento para devolver los valores del arreglo.
Cabe destacar que este método no solo es aplicable a Chrome, sino que otros software que utilizan el motor V8 también pueden verse afectados. Por ejemplo, Skype aún no ha solucionado esta vulnerabilidad. En x86, debido a la falta de compresión de direcciones, la lectura y escritura arbitrarias son directamente relativas a todo el proceso.
En general, se puede lograr la lectura arbitraria de primitivos a través de la filtración de uninitialized_Oddball en el valor Sentinel. En V8 hay otros valores Sentinel que pueden causar problemas similares. Se recomienda agregar estos valores Sentinel como variables en el fuzzer para descubrir más potenciales primitivos de explotación. Independientemente de si se consideran oficialmente como problemas de seguridad, este tipo de problemas acortará significativamente el ciclo para que los hackers logren una explotación completa.