Explorando el uso de Sentinel Value para superar el mecanismo de protección de Chrome V8
El valor centinela es un valor especial en algoritmos, que se utiliza generalmente como una condición de terminación para algoritmos de bucle o recursivos. En el código fuente de Chrome, existen varios valores centinela. Investigaciones anteriores han demostrado que se puede lograr la ejecución de código arbitrario dentro de un sandbox de ciertos CVE mediante la filtración del objeto TheHole. El equipo de Google actualizó rápidamente los CVE relacionados en GitHub aproximadamente una semana después de que publicamos sobre la elusión de mitigación.
En el código fuente de Chrome se puede ver una solución de mitigación para la ejecución de código arbitrario que involucra el objeto TheHole. Sin embargo, en V8 todavía hay muchos otros objetos nativos que no deberían ser expuestos a JS. Este artículo discutirá el objeto Uninitialized Oddball, cuyo método de bypass apareció por primera vez en Issue1352549. Es importante destacar que, actualmente, este método aún se puede utilizar en la última versión de V8, y Google no ha realizado ninguna corrección al respecto.
Este método tiene una fuerte versatilidad:
El POC presentado por primera vez en CVE-2021-30551( es la filtración de un oddball interno no inicializado.
Issue1314616)CVE-2022-1486( también filtró directamente UninitializedOddball.
El impacto de Issue1352549)NoCVE( no debe ser ignorado.
Todo esto demuestra la necesidad de revisar el software que podría verse afectado por PatchGap.
![Exclusiva revelación sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp(
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 están dispuestos de manera adyacente en la memoria. Una vez que estos objetos nativos, que no deberían ser divulgados, se filtran a JavaScript, pueden provocar la ejecución de código arbitrario dentro de la sandbox.
Para verificar la efectividad de este método en la última versión de V8, podemos modificar la función nativa de V8 %TheHole)( para que devuelva Uninitialized Oddball.
![Revelación exclusiva sobre cómo el valor Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(
Eludir HardenType
En el Issue1352549 se proporcionó el código completo, lo extraímos y simplificamos, y aún se puede lograr la lectura relativamente arbitraria en V8 11.0.0.
En el desensamblaje de la función read de JavaScript optimizada, se puede ver que al verificar obj.prop, no se revisa el valor con obj.prop como clave, sino que se calcula directamente el desplazamiento para obtener el valor del arreglo según la semántica de JavaScript. Esto lleva a una confusión de tipos durante el cálculo, lo que permite una lectura arbitraria.
![Revelación exclusiva sobre cómo eludir Chrome v8 HardenProtect a través de la filtración de Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Al pasar un uninitialized_oddball, se calcula a partir de obj, y finalmente se completa la lectura arbitraria en la instrucción vmovsd xmm0,[r9+r11*8+0x7], con los datos guardados en el registro xmm0.
Debido a que uninitialized_oddball está clasificado más alto y es más primitivo en la memoria de V8, la falsificación es más fácil y es el método preferido para eludir. La escritura arbitraria puede referirse al análisis de construcción de Issue1352549.
![Revelación exclusiva sobre cómo el valor del centinela filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
La sugerencia de reparación es agregar una verificación del mapa de la matriz al devolver los elementos de la matriz en la función optimizada, evitando el cálculo directo del desplazamiento para devolver los valores de la matriz.
Advertencia de PatchGap
Después de analizar el Issue1352549, investigamos el software que podría tener PatchGap y descubrimos que Skype aún no ha reparado esta vulnerabilidad. La lectura y escritura arbitrarias en x86 son ligeramente diferentes, ya que no hay compresión de direcciones, es directamente relativa a todo el proceso.
En el uso de Skype, aunque se activó ASLR, debido a que el archivo es demasiado grande, un hacker solo necesita leer y escribir en una dirección fija, lo que probablemente le permitirá leer y escribir el contenido del archivo de Skype. Combinando esto con el análisis PE y otros enfoques tradicionales, no es difícil completar toda la cadena de explotación de vulnerabilidades.
![Revelación exclusiva sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
Esta vez, PatchGap no solo involucra el Issue1352549, la divulgación del nuevo método de bypass también ha reducido considerablemente la dificultad de explotación de problemas similares como el Issue1314616 y el Issue1216437. Los hackers prácticamente no necesitan costo de investigación para lograr una explotación completa de cualquier fuga del agujero de seguridad uninitialized_oddball que antes existía.
![Revelación exclusiva sobre cómo el valor Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
Resumen
Este artículo discute brevemente cómo lograr una lectura arbitraria utilizando la fuga de uninitialized_Oddball. Hay muchos otros valores centinela en V8, y es fácil encontrar fallos que no sean int3 durante las pruebas. Dado que Uninitialized_Oddball y TheHole pueden eludir la protección de V8, otros valores centinela también pueden tener problemas similares.
Esto nos da algunas pistas:
Si otras fugas de uninitialized_Oddball también pueden facilitar la RCE de V8.
Google rápidamente solucionó la elusión de TheHole, pero el problema de eludir ASLR mediante la recolección de basura ha estado en espera durante mucho tiempo, lo que indica que aún existe una frontera difusa sobre si problemas similares se consideran un problema de seguridad formal.
Si se considera como un problema de seguridad formal, ¿es necesario en el fuzzer considerar la inclusión de valores centinela como %TheHole/uninitialized_Oddball como variables para explorar otros primitivos de explotación?
Independientemente de si este tipo de problemas se considera formalmente un problema de seguridad, acortará significativamente el ciclo en el que los hackers pueden aprovecharse por completo.
![Revelación exclusiva sobre cómo el valor de Sentinel se utiliza para eludir Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
![Revelación exclusiva sobre cómo el valor de Sentinel se filtró para eludir Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
![Revelación exclusiva sobre cómo eludir Chrome v8 HardenProtect a través de la filtración de Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 me gusta
Recompensa
16
6
Compartir
Comentar
0/400
OptionWhisperer
· hace3h
Esta vulnerabilidad es muy grave, un pequeño detalle puede ser mortal.
Ver originalesResponder0
OnchainFortuneTeller
· hace4h
Este bug es increíble.
Ver originalesResponder0
ExpectationFarmer
· hace4h
¡Las vulnerabilidades son realmente imposibles de prevenir!
Ver originalesResponder0
MysteryBoxBuster
· hace4h
v8 se volvió a salir de control, ¡está caliente!
Ver originalesResponder0
BlockchainFries
· hace4h
Eché un vistazo al título y me mareé.
Ver originalesResponder0
alpha_leaker
· hace4h
Código ejecutado alcista, hermano de vulnerabilidades.
Exploración de la vulnerabilidad Sentinel Value del motor V8: eludir la protección para lograr la ejecución de código arbitrario
Explorando el uso de Sentinel Value para superar el mecanismo de protección de Chrome V8
El valor centinela es un valor especial en algoritmos, que se utiliza generalmente como una condición de terminación para algoritmos de bucle o recursivos. En el código fuente de Chrome, existen varios valores centinela. Investigaciones anteriores han demostrado que se puede lograr la ejecución de código arbitrario dentro de un sandbox de ciertos CVE mediante la filtración del objeto TheHole. El equipo de Google actualizó rápidamente los CVE relacionados en GitHub aproximadamente una semana después de que publicamos sobre la elusión de mitigación.
En el código fuente de Chrome se puede ver una solución de mitigación para la ejecución de código arbitrario que involucra el objeto TheHole. Sin embargo, en V8 todavía hay muchos otros objetos nativos que no deberían ser expuestos a JS. Este artículo discutirá el objeto Uninitialized Oddball, cuyo método de bypass apareció por primera vez en Issue1352549. Es importante destacar que, actualmente, este método aún se puede utilizar en la última versión de V8, y Google no ha realizado ninguna corrección al respecto.
Este método tiene una fuerte versatilidad:
El POC presentado por primera vez en CVE-2021-30551( es la filtración de un oddball interno no inicializado.
Issue1314616)CVE-2022-1486( también filtró directamente UninitializedOddball.
El impacto de Issue1352549)NoCVE( no debe ser ignorado.
Todo esto demuestra la necesidad de revisar el software que podría verse afectado por PatchGap.
![Exclusiva revelación sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp(
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 están dispuestos de manera adyacente en la memoria. Una vez que estos objetos nativos, que no deberían ser divulgados, se filtran a JavaScript, pueden provocar la ejecución de código arbitrario dentro de la sandbox.
Para verificar la efectividad de este método en la última versión de V8, podemos modificar la función nativa de V8 %TheHole)( para que devuelva Uninitialized Oddball.
![Revelación exclusiva sobre cómo el valor Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(
Eludir HardenType
En el Issue1352549 se proporcionó el código completo, lo extraímos y simplificamos, y aún se puede lograr la lectura relativamente arbitraria en V8 11.0.0.
En el desensamblaje de la función read de JavaScript optimizada, se puede ver que al verificar obj.prop, no se revisa el valor con obj.prop como clave, sino que se calcula directamente el desplazamiento para obtener el valor del arreglo según la semántica de JavaScript. Esto lleva a una confusión de tipos durante el cálculo, lo que permite una lectura arbitraria.
![Revelación exclusiva sobre cómo eludir Chrome v8 HardenProtect a través de la filtración de Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Al pasar un uninitialized_oddball, se calcula a partir de obj, y finalmente se completa la lectura arbitraria en la instrucción vmovsd xmm0,[r9+r11*8+0x7], con los datos guardados en el registro xmm0.
Debido a que uninitialized_oddball está clasificado más alto y es más primitivo en la memoria de V8, la falsificación es más fácil y es el método preferido para eludir. La escritura arbitraria puede referirse al análisis de construcción de Issue1352549.
![Revelación exclusiva sobre cómo el valor del centinela filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
La sugerencia de reparación es agregar una verificación del mapa de la matriz al devolver los elementos de la matriz en la función optimizada, evitando el cálculo directo del desplazamiento para devolver los valores de la matriz.
Advertencia de PatchGap
Después de analizar el Issue1352549, investigamos el software que podría tener PatchGap y descubrimos que Skype aún no ha reparado esta vulnerabilidad. La lectura y escritura arbitrarias en x86 son ligeramente diferentes, ya que no hay compresión de direcciones, es directamente relativa a todo el proceso.
En el uso de Skype, aunque se activó ASLR, debido a que el archivo es demasiado grande, un hacker solo necesita leer y escribir en una dirección fija, lo que probablemente le permitirá leer y escribir el contenido del archivo de Skype. Combinando esto con el análisis PE y otros enfoques tradicionales, no es difícil completar toda la cadena de explotación de vulnerabilidades.
![Revelación exclusiva sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
Esta vez, PatchGap no solo involucra el Issue1352549, la divulgación del nuevo método de bypass también ha reducido considerablemente la dificultad de explotación de problemas similares como el Issue1314616 y el Issue1216437. Los hackers prácticamente no necesitan costo de investigación para lograr una explotación completa de cualquier fuga del agujero de seguridad uninitialized_oddball que antes existía.
![Revelación exclusiva sobre cómo el valor Sentinel filtrado elude Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
Resumen
Este artículo discute brevemente cómo lograr una lectura arbitraria utilizando la fuga de uninitialized_Oddball. Hay muchos otros valores centinela en V8, y es fácil encontrar fallos que no sean int3 durante las pruebas. Dado que Uninitialized_Oddball y TheHole pueden eludir la protección de V8, otros valores centinela también pueden tener problemas similares.
Esto nos da algunas pistas:
Si otras fugas de uninitialized_Oddball también pueden facilitar la RCE de V8.
Google rápidamente solucionó la elusión de TheHole, pero el problema de eludir ASLR mediante la recolección de basura ha estado en espera durante mucho tiempo, lo que indica que aún existe una frontera difusa sobre si problemas similares se consideran un problema de seguridad formal.
Si se considera como un problema de seguridad formal, ¿es necesario en el fuzzer considerar la inclusión de valores centinela como %TheHole/uninitialized_Oddball como variables para explorar otros primitivos de explotación?
Independientemente de si este tipo de problemas se considera formalmente un problema de seguridad, acortará significativamente el ciclo en el que los hackers pueden aprovecharse por completo.
![Revelación exclusiva sobre cómo el valor de Sentinel se utiliza para eludir Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
![Revelación exclusiva sobre cómo el valor de Sentinel se filtró para eludir Chrome v8 HardenProtect])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
![Revelación exclusiva sobre cómo eludir Chrome v8 HardenProtect a través de la filtración de Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(