O motor Chrome V8 revela uma vulnerabilidade de segurança: a fuga do Valor Sentinel pode contornar a sandbox

robot
Geração do resumo em andamento

Contornar o HardenProtect do Chrome V8 através da divulgação do Sentinel Value

O valor Sentinel é um valor especial em algoritmos, frequentemente utilizado como condição de término em algoritmos de loop ou recursivos. No código-fonte do Chrome, existem múltiplos valores Sentinel. Pesquisas anteriores indicaram como utilizar o objeto TheHole para vazar e executar código arbitrário dentro do sandbox. Este artigo discutirá outro objeto nativo do V8 - Uninitialized Oddball, que ainda pode ser utilizado na versão mais recente do V8.

Este método tem uma universalidade:

  1. O Issue1216437 introduziu primeiro o conceito de vazamento de internal uninitialized oddball.

  2. O Issue1314616 também revelou diretamente o UninitializedOddball, embora a forma de exploração na altura não fosse clara.

  3. A emissão 1352549 merece atenção pelo seu impacto potencial.

Atualmente, alguns softwares ainda não corrigiram essa vulnerabilidade.

A maioria dos objetos nativos no V8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos adjacentes na memória. Uma vez que objetos nativos que não deveriam ser revelados são expostos ao JavaScript, pode-se potencialmente realizar a execução de qualquer código dentro do sandbox.

Para verificar este método, pode-se modificar a função nativa do V8, vazando Uninitialized Oddball para o JavaScript. Especificamente, pode-se modificar o deslocamento relativo ao isolate na função %TheHole().

O código principal do método de contorno é o seguinte:

javascript function read(obj, prop) { return obj[prop]; }

let uninitialized_oddball = %TheHole(); let arr = [1.1, 2.2, 3.3];

for (let i = 0; i < 100000; i++) { read(arr, 0);
}

let val = read(uninitialized_oddball, 0); console.log(val);

Nos testes do V8 11.0.0, quando %TheHole() retorna UninitializedOddball, ainda é possível realizar leitura relativamente arbitrária.

Revelação exclusiva sobre como contornar o HardenProtect do Chrome v8 através da revelação do Sentinel Value

A montagem chave da função read otimizada é a seguinte:

0x558b20004086 mov r11,rdi 0x558b20004089 movzx edi,byte ptr [r11+0xb] 0x558b2000408d cmp edi,0x81 0x558b20004093 jnz 0x558b200040d8 0x558b20004095 mov r9,qword ptr [r11+0xf] 0x558b20004099 test esi,esi 0x558b2000409b js 0x558b200040d8 0x558b2000409d movsxd r11,esi 0x558b200040a0 cmp r11,qword ptr [r9+0xf] 0x558b200040a4 jae 0x558b200040d8 0x558b200040a6 vmovsd xmm0,[r9+r11*8+0x7]

Quando um uninitialized_oddball é passado, o cálculo começa a partir de obj em 0x558b20004086, e termina com uma leitura arbitrária na instrução vmovsd, com os dados armazenados no registrador xmm0.

Revelação exclusiva sobre como contornar o HardenProtect do Chrome v8 através da divulgação do Sentinel Value

A sugestão de método de correção é adicionar uma verificação do mapa do array ao retornar elementos do array da função otimizada, evitando o cálculo direto do deslocamento para retornar valores do array.

É importante notar que alguns softwares ainda não corrigiram essa vulnerabilidade. A forma de exploração na plataforma x86 é ligeiramente diferente; devido à ausência de compressão de endereços, a leitura e escrita arbitrárias são relativas a todo o processo. Mesmo que o ASLR esteja ativado, devido ao tamanho do arquivo, ainda há uma grande probabilidade de ler e escrever no conteúdo alvo.

Este novo método de contorno reduziu significativamente a dificuldade de exploração de vulnerabilidades semelhantes anteriores. Recomenda-se revisar todas as vulnerabilidades que divulgam uninitialized_oddball.

Existem outros valores Sentinel no V8 que também podem causar problemas semelhantes. Isso nos traz a seguinte lição:

  1. Outras vazamentos uninitialized_Oddball são também fáceis de realizar RCE no V8.

  2. A questão de saber se tais problemas devem ser formalmente considerados como questões de segurança ainda é controversa.

  3. Deverá o Fuzzer incluir o valor Sentinel como variável para descobrir novos primitivas de exploração.

De qualquer forma, este tipo de problema irá reduzir significativamente o período em que os hackers podem explorar totalmente.

Revelação exclusiva sobre como contornar o Chrome v8 HardenProtect através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o HardenProtect do Chrome v8 através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o Chrome v8 HardenProtect através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o HardenProtect do Chrome v8 através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o Chrome v8 HardenProtect através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o Chrome v8 HardenProtect através da divulgação do Sentinel Value

Revelação exclusiva sobre como contornar o Chrome v8 HardenProtect através da divulgação do Sentinel Value

Ver original
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.
  • Recompensa
  • 5
  • Compartilhar
Comentário
0/400
ZKProofEnthusiastvip
· 07-09 11:53
Como todos sabem, V8 impulsiona o mundo
Ver originalResponder0
SleepyValidatorvip
· 07-06 23:01
Chrome realmente não é brincadeira, é estável.
Ver originalResponder0
FlashLoanLordvip
· 07-06 17:06
Como é que uma falha tão grande ainda não foi corrigida?
Ver originalResponder0
ForkItAllvip
· 07-06 17:00
a vulnerabilidade v8 é realmente ybb.
Ver originalResponder0
FudVaccinatorvip
· 07-06 16:51
Mais uma falha grave. Sempre usei o Firefox, é realmente ótimo.
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)