Revelación de la vulnerabilidad de Chrome v8: cómo utilizar el Valor Centinela para lograr la evasión de la sandbox

robot
Generación de resúmenes en curso

Revelando cómo el Valor Centinela elude el mecanismo de protección de seguridad de Chrome v8

El valor centinela es un valor especial en algoritmos, que generalmente se utiliza como condición de terminación en algoritmos de bucle o recursivos. En el código fuente de Chrome existen múltiples valores centinela. Investigaciones anteriores han demostrado que la filtración del objeto TheHole puede permitir la ejecución de código arbitrario dentro de la sandbox. El equipo de Google posteriormente corrigió estas dos vulnerabilidades.

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 en la última versión de V8, y Google aún no lo ha corregido.

Cabe destacar que este método tiene cierta universalidad:

  1. El problema 1216437 menciona primero la filtración de internal uninitialized oddball.

  2. El poc del Issue1314616 también filtró directamente UninitializedOddball.

  3. El Issue1352549 detalla el método de uso.

Estos casos indican que es necesario revisar el software que podría verse afectado. Actualmente, algunas aplicaciones aún no han corregido la vulnerabilidad.

Revelación exclusiva sobre cómo el valor de Sentinel se filtró para eludir Chrome v8 HardenProtect

Valor centinela en V8

En el archivo v8/src/roots/roots.h se enumeran la mayoría de los objetos nativos de v8, que están dispuestos de manera adyacente en la memoria. Una vez que estos objetos se filtran a Javascript, puede ser posible ejecutar cualquier código dentro de la sandbox.

Podemos filtrar Uninitialized Oddball en JavaScript modificando la función nativa de v8. En concreto, se puede modificar el desplazamiento relativo al isolate en la función %TheHole() para que devuelva Uninitialized Oddball.

Exclusiva: Cómo el valor de Sentinel se filtra para eludir Chrome v8 HardenProtect

Eludir la protección HardenType

El método de uso es el siguiente:

javascript const uninitialized = %TheHole(); const float_array = new Float64Array(1); float_array[0] = 1.1;

función read(obj, desplazamiento) { return float_array[obj.prop]; }

const obj = {prop: no inicializado};

para (let i = 0; i < 100000; i++) { read(obj, 0);
}

%OptimizeFunctionOnNextCall(leer); const value = read(obj, 0x12345);

En la prueba de v8-11.0.0, cuando %TheHole() devuelve UninitializedOddball, aún se puede lograr una lectura relativamente arbitraria.

Revelación exclusiva sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect

El código de ensamblaje del función read optimizada muestra que se revisó la propiedad prop del objeto, pero no se verificó el valor de obj.prop que es key, lo que llevó a calcular el desplazamiento directamente según la semántica de JavaScript, causando confusión de tipos que permite lecturas arbitrarias.

La sugerencia de solución es agregar una verificación de map del arreglo al devolver elementos del arreglo en la función optimizada, para evitar el cálculo directo del desplazamiento que devuelve los valores del arreglo.

Revelación exclusiva sobre cómo el valor de Sentinel se filtró para eludir Chrome v8 HardenProtect

Aviso de riesgo de PatchGap

No solo necesitamos prestar atención a las vulnerabilidades históricas, sino también a las vulnerabilidades que los fabricantes están arreglando silenciosamente en los componentes básicos. Después de una revisión, se ha descubierto que cierto software aún no ha solucionado esta vulnerabilidad.

En la arquitectura x86, debido a la falta de compresión de direcciones, la lectura y escritura arbitrarias son directas en relación con todo el proceso. Aunque ASLR está habilitado, cuando el archivo es grande, un hacker solo necesita leer y escribir en direcciones fijas, lo que tiene una gran probabilidad de acceder al contenido del archivo. Combinando con el análisis de 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 se filtró para eludir Chrome v8 HardenProtect

Esta vez, PatchGap no solo involucra el Issue1352549, sino que también ha reducido significativamente la dificultad de explotación de problemas similares como el Issue1314616 y el Issue1216437. Los hackers casi no necesitan costos de investigación para llevar a cabo una explotación completa de cualquier vulnerabilidad de uninitialized_oddball que se haya filtrado anteriormente.

Resumen

Este artículo presenta brevemente cómo lograr una lectura arbitraria a través de la filtración de uninitialized_Oddball en el valor Sentinel. En v8 hay muchos otros valores Sentinel, y es muy probable que existan problemas similares. Esto nos da algunas reflexiones:

  1. ¿Se puede lograr fácilmente RCE de v8 con otras filtraciones de uninitialized_Oddball?

  2. ¿Se deberían tratar problemas similares oficialmente como problemas de seguridad?

  3. ¿Es necesario incluir valores centinela como %TheHole/uninitialized_Oddball como variables en el fuzzer para descubrir otros usos de primitivas?

De todos modos, este tipo de problemas acortará significativamente el período en que los hackers pueden lograr una explotación completa.

Revelación exclusiva sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect

Revelación exclusiva sobre cómo el valor de Sentinel filtrado elude Chrome v8 HardenProtect

Revelación exclusiva sobre cómo burlar Chrome v8 HardenProtect a través de la filtración de Sentinel Value

Revelación exclusiva sobre cómo eludir Chrome v8 HardenProtect a través de la filtración de Sentinel Value

SENC-3.37%
Ver originales
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.
  • Recompensa
  • 5
  • Republicar
  • Compartir
Comentar
0/400
UnluckyValidatorvip
· 07-10 22:09
¿Qué? v8 tiene una vulnerabilidad tan grande.
Ver originalesResponder0
ShibaMillionairen'tvip
· 07-09 05:56
Otra vez un bug de v8, me voy, me voy.
Ver originalesResponder0
UncommonNPCvip
· 07-09 05:54
Hacker juega tan hábilmente, no es de extrañar que sea v8
Ver originalesResponder0
GateUser-4745f9cevip
· 07-09 05:47
Se ha descubierto una cavidad de alto riesgo.
Ver originalesResponder0
ProposalDetectivevip
· 07-09 05:38
¿Qué está haciendo Google?
Ver originalesResponder0
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)