Valor centinela en las vulnerabilidades de seguridad de Chrome V8
El valor centinela es un valor especial en algoritmos, a menudo utilizado como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome, existen varios valores centinela, algunos de los cuales, si se filtraran al entorno de JavaScript, podrían causar problemas de seguridad.
Investigaciones anteriores han demostrado que la filtración del objeto TheHole puede permitir la ejecución de código arbitrario dentro de una sandbox. El equipo de Google ha corregido esto. Sin embargo, en realidad, hay otros objetos nativos en V8 que no deberían filtrarse a JS, como el objeto Uninitialized Oddball.
La fuga de objetos Oddball no inicializados puede llevar a una fuga de la sandbox. Este problema apareció por primera vez en la Issue1352549 y aún no se ha solucionado. Este método tiene cierta generalidad y ha aparecido en varias vulnerabilidades.
Los objetos nativos en 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 se filtran al entorno de JavaScript, podría lograrse una fuga de la sandbox.
Para verificar este problema, se puede modificar la función nativa de V8 para filtrar Oddball no inicializado en JavaScript. En concreto, se puede modificar la implementación de la función %TheHole().
El uso de objetos Oddball no inicializados puede eludir la protección HardenType. Al construir un código JavaScript específico, se puede lograr una lectura y escritura de memoria relativamente arbitraria. Esto se debe a que el código optimizado no verifica adecuadamente las propiedades de los objetos.
Para las sugerencias de reparación, se debe agregar una verificación del mapa del arreglo al devolver elementos del arreglo en la función optimizada, evitando calcular directamente el desplazamiento para devolver el valor.
Este problema también nos recuerda prestar atención a PatchGap, es decir, ciertos programas pueden estar utilizando versiones de V8 que no han corregido esta vulnerabilidad. Por ejemplo, Skype aún no ha solucionado este problema. En la arquitectura x86, debido a la falta de compresión de direcciones, se puede lograr lectura y escritura arbitrarias dentro del rango de procesos.
En general, en V8 también pueden existir varios valores centinela que podrían tener riesgos de seguridad similares. Se sugiere investigar más a fondo el impacto de otras fugas de Oddball no inicializados, considerando incluir este tipo de objetos en el alcance de las pruebas de fuzzing para descubrir más posibles formas de explotación. De todos modos, este tipo de problemas podría acortar significativamente el ciclo de explotación de vulnerabilidades para los atacantes.
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.
5 me gusta
Recompensa
5
5
Compartir
Comentar
0/400
DuckFluff
· hace13h
¡Vaya! Este error suena genial~
Ver originalesResponder0
ShitcoinConnoisseur
· 07-11 14:18
¿Y aún no se apuran a arreglar esto? ¿Qué está haciendo v8?
Chrome V8 Sentinel Value riesgo de seguridad: La fuga de objetos Oddball no inicializados puede llevar a la evasión de la sandbox
Valor centinela en las vulnerabilidades de seguridad de Chrome V8
El valor centinela es un valor especial en algoritmos, a menudo utilizado como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome, existen varios valores centinela, algunos de los cuales, si se filtraran al entorno de JavaScript, podrían causar problemas de seguridad.
Investigaciones anteriores han demostrado que la filtración del objeto TheHole puede permitir la ejecución de código arbitrario dentro de una sandbox. El equipo de Google ha corregido esto. Sin embargo, en realidad, hay otros objetos nativos en V8 que no deberían filtrarse a JS, como el objeto Uninitialized Oddball.
La fuga de objetos Oddball no inicializados puede llevar a una fuga de la sandbox. Este problema apareció por primera vez en la Issue1352549 y aún no se ha solucionado. Este método tiene cierta generalidad y ha aparecido en varias vulnerabilidades.
Los objetos nativos en 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 se filtran al entorno de JavaScript, podría lograrse una fuga de la sandbox.
Para verificar este problema, se puede modificar la función nativa de V8 para filtrar Oddball no inicializado en JavaScript. En concreto, se puede modificar la implementación de la función %TheHole().
El uso de objetos Oddball no inicializados puede eludir la protección HardenType. Al construir un código JavaScript específico, se puede lograr una lectura y escritura de memoria relativamente arbitraria. Esto se debe a que el código optimizado no verifica adecuadamente las propiedades de los objetos.
Para las sugerencias de reparación, se debe agregar una verificación del mapa del arreglo al devolver elementos del arreglo en la función optimizada, evitando calcular directamente el desplazamiento para devolver el valor.
Este problema también nos recuerda prestar atención a PatchGap, es decir, ciertos programas pueden estar utilizando versiones de V8 que no han corregido esta vulnerabilidad. Por ejemplo, Skype aún no ha solucionado este problema. En la arquitectura x86, debido a la falta de compresión de direcciones, se puede lograr lectura y escritura arbitrarias dentro del rango de procesos.
En general, en V8 también pueden existir varios valores centinela que podrían tener riesgos de seguridad similares. Se sugiere investigar más a fondo el impacto de otras fugas de Oddball no inicializados, considerando incluir este tipo de objetos en el alcance de las pruebas de fuzzing para descubrir más posibles formas de explotación. De todos modos, este tipo de problemas podría acortar significativamente el ciclo de explotación de vulnerabilidades para los atacantes.