Análisis de los problemas de seguridad causados por la filtración de Sentinel Value en el motor Chrome v8
El valor centinela es un valor especial en algoritmos, que se utiliza generalmente como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome existen múltiples valores centinela, algunos de los cuales, si se filtran al entorno de JavaScript, pueden 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 del sandbox de Chrome. Poco después, el equipo de Google corrigió el CVE relacionado. Sin embargo, además del objeto TheHole, hay otros objetos nativos en V8 que no deberían filtrarse a JS. Este artículo discutirá el objeto Uninitialized Oddball, que actualmente todavía se puede utilizar como un método de bypass en la última versión de V8.
Es importante señalar que este método tiene cierta universalidad:
En CVE-2021-30551, el POC inicial es la filtración de un oddball interno no inicializado.
En CVE-2022-1486, el POC también filtró directamente UninitializedOddball.
Issue1352549( se proporciona el código de explotación completo en CVE) no asignado.
Estos casos indican que la filtración de Uninitialized Oddball puede provocar graves problemas de seguridad.
Valor Sentinel en 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 secuencialmente en la memoria. Si se filtran objetos nativos que no deberían ser expuestos a JavaScript, podría permitir la ejecución de código arbitrario dentro de la sandbox.
Para verificar esto, podemos modificar la función nativa de V8 para filtrar Oddball no inicializado a JavaScript. En concreto, se puede modificar el desplazamiento relativo de la función %TheHole() con respecto al aislamiento para que devuelva Oddball no inicializado.
Evitar la protección HardenType
Utilizando Uninitialized Oddball se puede lograr una lectura relativamente arbitraria. El código clave es el siguiente:
javascript
function read(obj, idx) {
return obj[idx];
}
let uninitialized_oddball = %TheHole();
let ab = new ArrayBuffer(8);
let fa = new Float64Array(ab);
let ia = new BigInt64Array(ab);
let val = read(uninitialized_oddball, "prop");
fa[0] = val;
console.log(ia[0]);
En el código ensamblador optimizado, se calculará directamente el desplazamiento según la semántica de JavaScript y se devolverán los valores del arreglo, sin verificar el Value de obj.prop como clave. Esto llevó a una confusión de tipos, lo que permite una lectura arbitraria.
Debido a que Uninitialized Oddball está ordenado más adelante y es más primitivo en la memoria de V8, es más fácil de falsificar que el objeto TheHole, lo que lo convierte en el método preferido para eludir HardenType.
La solución de reparación sugerida es agregar una verificación del mapa de la matriz al devolver los elementos de la matriz en la función optimizada, evitando calcular directamente el desplazamiento para devolver los valores de la matriz.
Advertencia de PatchGap
Después de analizar el Issue1352549, se encontró que algunos software pueden tener problemas de PatchGap. Por ejemplo, Skype aún no ha solucionado esta vulnerabilidad. En la plataforma x86, debido a que no hay compresión de direcciones, la lectura y escritura arbitraria es relativa a todo el proceso.
Aunque Skype ha habilitado ASLR, debido al gran tamaño del archivo, los hackers solo necesitan leer y escribir en una dirección fija para tener una alta probabilidad de acceder al contenido del archivo de Skype. Combinando métodos tradicionales como el análisis PE, se puede completar toda la cadena de explotación de vulnerabilidades.
Esta vez, PatchGap no solo está relacionado con el Issue1352549, sino que también reducirá significativamente la dificultad para explotar vulnerabilidades similares a CVE-2022-1486 y CVE-2021-30551. Los hackers prácticamente no necesitarán investigar adicionalmente para lograr una explotación completa.
Resumen
Este artículo discute brevemente el método para lograr la lectura arbitraria a través de la filtración de Uninitialized Oddball. En V8 hay muchos otros valores centinela que pueden presentar riesgos de seguridad similares. Esto nos da las siguientes enseñanzas:
Otras filtraciones de Uninitialized Oddball también pueden lograr fácilmente RCE en V8.
Existe controversia sobre si este tipo de problemas debería considerarse oficialmente como problemas de seguridad.
¿Es necesario incluir %TheHole/Uninitialized Oddball como variables en Fuzzer para descubrir nuevos primitivas de explotación?
En cualquier caso, este tipo de problemas acortará significativamente el período en que los hackers pueden aprovecharse completamente, 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.
6 me gusta
Recompensa
6
5
Compartir
Comentar
0/400
HallucinationGrower
· hace15h
¡Vaya! ¿Cómo puede haberse filtrado?
Ver originalesResponder0
CodeAuditQueen
· hace15h
Otra superficie de ataque de variante CVE, tsk tsk.
Ver originalesResponder0
WhaleWatcher
· hace15h
¿Google está jugando con fuego? ¿Retrocediendo en la historia?
Ver originalesResponder0
BearMarketSurvivor
· hace15h
Realmente hay errores que nunca se acaban de corregir.
Ver originalesResponder0
CryptoAdventurer
· hace15h
¿Es otra vez un buen momento para pagar el impuesto de inteligencia? Los que entienden, entienden.
La filtración del Valor Sentinel del motor V8 provoca riesgos de seguridad. Un Oddball no inicializado se convierte en un nuevo vector de ataque.
Análisis de los problemas de seguridad causados por la filtración de Sentinel Value en el motor Chrome v8
El valor centinela es un valor especial en algoritmos, que se utiliza generalmente como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome existen múltiples valores centinela, algunos de los cuales, si se filtran al entorno de JavaScript, pueden 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 del sandbox de Chrome. Poco después, el equipo de Google corrigió el CVE relacionado. Sin embargo, además del objeto TheHole, hay otros objetos nativos en V8 que no deberían filtrarse a JS. Este artículo discutirá el objeto Uninitialized Oddball, que actualmente todavía se puede utilizar como un método de bypass en la última versión de V8.
Es importante señalar que este método tiene cierta universalidad:
En CVE-2021-30551, el POC inicial es la filtración de un oddball interno no inicializado.
En CVE-2022-1486, el POC también filtró directamente UninitializedOddball.
Issue1352549( se proporciona el código de explotación completo en CVE) no asignado.
Estos casos indican que la filtración de Uninitialized Oddball puede provocar graves problemas de seguridad.
Valor Sentinel en 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 secuencialmente en la memoria. Si se filtran objetos nativos que no deberían ser expuestos a JavaScript, podría permitir la ejecución de código arbitrario dentro de la sandbox.
Para verificar esto, podemos modificar la función nativa de V8 para filtrar Oddball no inicializado a JavaScript. En concreto, se puede modificar el desplazamiento relativo de la función %TheHole() con respecto al aislamiento para que devuelva Oddball no inicializado.
Evitar la protección HardenType
Utilizando Uninitialized Oddball se puede lograr una lectura relativamente arbitraria. El código clave es el siguiente:
javascript function read(obj, idx) { return obj[idx]; }
let uninitialized_oddball = %TheHole(); let ab = new ArrayBuffer(8); let fa = new Float64Array(ab); let ia = new BigInt64Array(ab);
let evil = [1.1, 2.2, 3.3]; evil.prop = 1;
%PrepararFunciónParaOptimización(leer); read(evil, 0); leer(malvado, 1); %OptimizeFunctionOnNextCall(leer); leer(malvado, 0);
let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);
En el código ensamblador optimizado, se calculará directamente el desplazamiento según la semántica de JavaScript y se devolverán los valores del arreglo, sin verificar el Value de obj.prop como clave. Esto llevó a una confusión de tipos, lo que permite una lectura arbitraria.
Debido a que Uninitialized Oddball está ordenado más adelante y es más primitivo en la memoria de V8, es más fácil de falsificar que el objeto TheHole, lo que lo convierte en el método preferido para eludir HardenType.
La solución de reparación sugerida es agregar una verificación del mapa de la matriz al devolver los elementos de la matriz en la función optimizada, evitando calcular directamente el desplazamiento para devolver los valores de la matriz.
Advertencia de PatchGap
Después de analizar el Issue1352549, se encontró que algunos software pueden tener problemas de PatchGap. Por ejemplo, Skype aún no ha solucionado esta vulnerabilidad. En la plataforma x86, debido a que no hay compresión de direcciones, la lectura y escritura arbitraria es relativa a todo el proceso.
Aunque Skype ha habilitado ASLR, debido al gran tamaño del archivo, los hackers solo necesitan leer y escribir en una dirección fija para tener una alta probabilidad de acceder al contenido del archivo de Skype. Combinando métodos tradicionales como el análisis PE, se puede completar toda la cadena de explotación de vulnerabilidades.
Esta vez, PatchGap no solo está relacionado con el Issue1352549, sino que también reducirá significativamente la dificultad para explotar vulnerabilidades similares a CVE-2022-1486 y CVE-2021-30551. Los hackers prácticamente no necesitarán investigar adicionalmente para lograr una explotación completa.
Resumen
Este artículo discute brevemente el método para lograr la lectura arbitraria a través de la filtración de Uninitialized Oddball. En V8 hay muchos otros valores centinela que pueden presentar riesgos de seguridad similares. Esto nos da las siguientes enseñanzas:
Otras filtraciones de Uninitialized Oddball también pueden lograr fácilmente RCE en V8.
Existe controversia sobre si este tipo de problemas debería considerarse oficialmente como problemas de seguridad.
¿Es necesario incluir %TheHole/Uninitialized Oddball como variables en Fuzzer para descubrir nuevos primitivas de explotación?
En cualquier caso, este tipo de problemas acortará significativamente el período en que los hackers pueden aprovecharse completamente, lo cual merece nuestra alta atención.