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:
O Issue1216437 introduziu primeiro o conceito de vazamento de internal uninitialized oddball.
O Issue1314616 também revelou diretamente o UninitializedOddball, embora a forma de exploração na altura não fosse clara.
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.
A montagem chave da função read otimizada é a seguinte:
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.
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:
Outras vazamentos uninitialized_Oddball são também fáceis de realizar RCE no V8.
A questão de saber se tais problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
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.
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.
10 Curtidas
Recompensa
10
5
Compartilhar
Comentário
0/400
ZKProofEnthusiast
· 07-09 11:53
Como todos sabem, V8 impulsiona o mundo
Ver originalResponder0
SleepyValidator
· 07-06 23:01
Chrome realmente não é brincadeira, é estável.
Ver originalResponder0
FlashLoanLord
· 07-06 17:06
Como é que uma falha tão grande ainda não foi corrigida?
Ver originalResponder0
ForkItAll
· 07-06 17:00
a vulnerabilidade v8 é realmente ybb.
Ver originalResponder0
FudVaccinator
· 07-06 16:51
Mais uma falha grave. Sempre usei o Firefox, é realmente ótimo.
O motor Chrome V8 revela uma vulnerabilidade de segurança: a fuga do Valor Sentinel pode contornar a sandbox
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:
O Issue1216437 introduziu primeiro o conceito de vazamento de internal uninitialized oddball.
O Issue1314616 também revelou diretamente o UninitializedOddball, embora a forma de exploração na altura não fosse clara.
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.
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.
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:
Outras vazamentos uninitialized_Oddball são também fáceis de realizar RCE no V8.
A questão de saber se tais problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
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.