Sentinel Value e a contornagem do HardenProtect do Chrome v8
Valor sentinel é um valor especial em algoritmos, comumente usado como condição de término para loops ou algoritmos recursivos. Este tipo de valor especial é amplamente utilizado no código-fonte do Chrome. Pesquisas recentes indicam que a divulgação de certos objetos de valor sentinel pode permitir a execução de código arbitrário dentro do sandbox do Chrome.
Este artigo irá explorar métodos para contornar o mecanismo HardenProtect do Chrome v8 utilizando objetos Uninitialized Oddball. Este método foi inicialmente proposto por membros do Project0 na Issue1352549 e ainda está disponível na versão mais recente do V8, com a Google ainda não tendo corrigido isso.
Vale a pena notar que este método possui uma forte versatilidade:
O Issue1216437(CVE-2021-30551) apresentou pela primeira vez o poc que vaza internal uninitialized oddball.
Issue1314616(CVE-2022-1486) também revelou diretamente o objeto UninitializedOddball.
Issue1352549( não apresenta CVE) e demonstra a cadeia completa de exploração desse método.
Estes casos mostram que este método de contorno pode afetar várias versões de software. Até agora, softwares como o Skype ainda não corrigiram essa vulnerabilidade.
Valor Sentinel no V8
O código-fonte do V8 define uma grande quantidade de objetos nativos, incluindo vários valores Sentinel. Esses objetos estão dispostos adjacentes na memória. Uma vez que um objeto nativo que não deve ser vazado é exposto ao JavaScript, pode-se realizar a execução de qualquer código dentro da sandbox.
Para validar este método, podemos modificar a função V8 %TheHole() para que retorne um objeto Oddball Não Inicializado.
Contornar HardenType
O código abaixo demonstra como utilizar objetos Uninitialized Oddball vazados para realizar leituras arbitrárias:
javascript
function read(obj, idx) {
return obj[idx];
}
let uninitialized_oddball = %GetUninitialized();
let ab = new ArrayBuffer(8);
let f64 = new Float64Array(ab);
let u32 = new Uint32Array(ab);
para (deixe i = 0; i < 0x10000; i++) {
read({prop: 1.1}, 0);
}
%OptimizeFunctionOnNextCall(read);
let val = read({prop: uninitialized_oddball}, 0x1234);
f64[0] = val;
console.log(u32[0].toString(16), u32[1].toString(16));
O código de montagem da função read otimizado mostra que a função apenas verificou a propriedade prop do obj, sem verificar o valor de obj.prop, e calculou diretamente o deslocamento, causando confusão de tipos e permitindo leitura arbitrária.
Sugestão de solução: ao retornar elementos de um array na função otimizada, adicionar uma verificação ao map do array para evitar cálculos diretos de deslocamento.
Aviso de PatchGap
Este método de contorno não apenas afeta vulnerabilidades históricas, mas também pode impactar o software atual. Por exemplo, o Skype ainda não corrigiu este problema. Na plataforma x86, devido à falta de compressão de endereços, o intervalo de leitura e escrita arbitrária é maior.
Este PatchGap não só envolve o Issue1352549, como também reduz drasticamente a dificuldade de exploração de problemas semelhantes como o Issue1314616 e o Issue1216437. Recomenda-se que os fabricantes realizem uma verificação completa das vulnerabilidades relacionadas.
Resumo
Este artigo apresenta um método para realizar leituras arbitrárias no V8 usando Uninitialized Oddball. Existem outros valores Sentinel no V8 que podem apresentar riscos de segurança semelhantes. Recomenda-se uma investigação adicional:
É possível a exploração de RCE V8 devido a vazamento de outros valores Sentinel?
Adicionar o valor Sentinel como variável ao Fuzzer, explorando novos primitivas de exploração.
Encarar os riscos de segurança que estes tipos de problemas podem trazer
Independentemente de a questão ser formalmente classificada como uma vulnerabilidade de segurança, ela pode encurtar significativamente o ciclo de exploração completo dos hackers. Espera-se que este artigo chame a atenção das partes relevantes.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
14 gostos
Recompensa
14
6
Republicar
Partilhar
Comentar
0/400
WinterWarmthCat
· 08-10 01:53
Post de detalhes fortes deve ser elogiado
Ver originalResponder0
StakeOrRegret
· 08-08 15:35
Descobri novamente uma vulnerabilidade no navegador.
Ver originalResponder0
LayerZeroHero
· 08-07 02:24
Uma vulnerabilidade um pouco legal.
Ver originalResponder0
Web3ProductManager
· 08-07 02:23
Caso extremo super arriscado aqui
Ver originalResponder0
GhostWalletSleuth
· 08-07 02:11
As vulnerabilidades são realmente difíceis de prevenir.
Chrome v8 HardenProtect bypass: usando o Valor Sentinel para executar código arbitrário
Sentinel Value e a contornagem do HardenProtect do Chrome v8
Valor sentinel é um valor especial em algoritmos, comumente usado como condição de término para loops ou algoritmos recursivos. Este tipo de valor especial é amplamente utilizado no código-fonte do Chrome. Pesquisas recentes indicam que a divulgação de certos objetos de valor sentinel pode permitir a execução de código arbitrário dentro do sandbox do Chrome.
Este artigo irá explorar métodos para contornar o mecanismo HardenProtect do Chrome v8 utilizando objetos Uninitialized Oddball. Este método foi inicialmente proposto por membros do Project0 na Issue1352549 e ainda está disponível na versão mais recente do V8, com a Google ainda não tendo corrigido isso.
Vale a pena notar que este método possui uma forte versatilidade:
O Issue1216437(CVE-2021-30551) apresentou pela primeira vez o poc que vaza internal uninitialized oddball.
Issue1314616(CVE-2022-1486) também revelou diretamente o objeto UninitializedOddball.
Issue1352549( não apresenta CVE) e demonstra a cadeia completa de exploração desse método.
Estes casos mostram que este método de contorno pode afetar várias versões de software. Até agora, softwares como o Skype ainda não corrigiram essa vulnerabilidade.
Valor Sentinel no V8
O código-fonte do V8 define uma grande quantidade de objetos nativos, incluindo vários valores Sentinel. Esses objetos estão dispostos adjacentes na memória. Uma vez que um objeto nativo que não deve ser vazado é exposto ao JavaScript, pode-se realizar a execução de qualquer código dentro da sandbox.
Para validar este método, podemos modificar a função V8 %TheHole() para que retorne um objeto Oddball Não Inicializado.
Contornar HardenType
O código abaixo demonstra como utilizar objetos Uninitialized Oddball vazados para realizar leituras arbitrárias:
javascript function read(obj, idx) { return obj[idx]; }
let uninitialized_oddball = %GetUninitialized(); let ab = new ArrayBuffer(8); let f64 = new Float64Array(ab); let u32 = new Uint32Array(ab);
para (deixe i = 0; i < 0x10000; i++) { read({prop: 1.1}, 0);
}
%OptimizeFunctionOnNextCall(read);
let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = val; console.log(u32[0].toString(16), u32[1].toString(16));
O código de montagem da função read otimizado mostra que a função apenas verificou a propriedade prop do obj, sem verificar o valor de obj.prop, e calculou diretamente o deslocamento, causando confusão de tipos e permitindo leitura arbitrária.
Sugestão de solução: ao retornar elementos de um array na função otimizada, adicionar uma verificação ao map do array para evitar cálculos diretos de deslocamento.
Aviso de PatchGap
Este método de contorno não apenas afeta vulnerabilidades históricas, mas também pode impactar o software atual. Por exemplo, o Skype ainda não corrigiu este problema. Na plataforma x86, devido à falta de compressão de endereços, o intervalo de leitura e escrita arbitrária é maior.
Este PatchGap não só envolve o Issue1352549, como também reduz drasticamente a dificuldade de exploração de problemas semelhantes como o Issue1314616 e o Issue1216437. Recomenda-se que os fabricantes realizem uma verificação completa das vulnerabilidades relacionadas.
Resumo
Este artigo apresenta um método para realizar leituras arbitrárias no V8 usando Uninitialized Oddball. Existem outros valores Sentinel no V8 que podem apresentar riscos de segurança semelhantes. Recomenda-se uma investigação adicional:
Independentemente de a questão ser formalmente classificada como uma vulnerabilidade de segurança, ela pode encurtar significativamente o ciclo de exploração completo dos hackers. Espera-se que este artigo chame a atenção das partes relevantes.