Análise do problema de segurança causado pela divulgação de Sentinel Value no motor Chrome v8
O valor Sentinel é um valor especial em algoritmos, geralmente usado como condição de término em algoritmos de loop ou recursivos. No código-fonte do Chrome, existem vários valores Sentinel, e alguns deles, se forem expostos ao ambiente JavaScript, podem causar problemas de segurança.
Estudos anteriores mostraram que a divulgação do objeto TheHole pode permitir a execução de código arbitrário dentro do sandbox do Chrome. A equipe do Google rapidamente corrigiu o CVE relacionado. No entanto, além do objeto TheHole, existem outros objetos nativos no v8 que não devem ser divulgados para o JS. Este artigo discutirá o objeto Uninitialized Oddball, cuja técnica de contorno ainda pode ser usada na versão mais recente do V8.
É importante notar que este método tem uma certa generalidade:
No CVE-2021-30551, o POC inicial era a divulgação de um oddball interno não inicializado.
No CVE-2022-1486, o POC também revelou diretamente o UninitializedOddball.
Issue1352549( apresentou o código de exploração completo para o CVE) não atribuído.
Estes casos demonstram que a revelação do Uninitialized Oddball pode levar a sérios problemas de segurança.
Valor Sentinel no V8
A maior parte dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos sequencialmente na memória. Se objetos nativos que não devem ser expostos forem expostos ao JavaScript, pode-se conseguir a execução de qualquer código dentro do sandbox.
Para verificar isso, podemos modificar a função nativa do V8, vazando o Oddball Não Inicializado para o JavaScript. Especificamente, podemos modificar o deslocamento relativo do %TheHole() em relação ao isolate, de modo que retorne o Oddball Não Inicializado.
Contornar a proteção HardenType
Aproveitar o Uninitialized Oddball permite realizar leituras relativamente arbitrárias. O código chave é o seguinte:
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]);
No código de montagem otimizado, será calculado diretamente o deslocamento segundo a semântica do JavaScript e retornado o valor do array, sem verificar se obj.prop é o Valor da chave. Isso leva a uma confusão de tipos, permitindo a leitura arbitrária.
Devido ao Uninitialized Oddball estar mais à frente e ser mais primitivo na memória V8, é mais fácil de falsificar do que o objeto TheHole, sendo o método preferido para contornar o HardenType.
A solução de correção sugerida é adicionar uma verificação do map do array ao retornar os elementos do array da função otimizada, evitando o cálculo direto do deslocamento para retornar os valores do array.
Aviso de PatchGap
Após a análise do Issue1352549, descobriu-se que alguns softwares podem ter problemas de PatchGap. Por exemplo, o Skype ainda não corrigiu essa vulnerabilidade. Na plataforma x86, devido à ausência de compressão de endereços, a leitura e escrita arbitrárias são relativas a todo o processo.
Embora o Skype tenha ativado o ASLR, devido ao tamanho dos arquivos, os hackers só precisam ler e escrever em um endereço fixo, o que aumenta muito a probabilidade de ler e escrever o conteúdo dos arquivos do Skype. Combinando com métodos tradicionais como a análise PE, é possível completar toda a cadeia de exploração de vulnerabilidades.
Esta atualização do PatchGap não só envolve a Issue1352549, como também reduzirá significativamente a dificuldade de exploração de vulnerabilidades semelhantes a CVE-2022-1486 e CVE-2021-30551. Os hackers quase não precisam de pesquisa adicional para conseguir uma exploração completa.
Resumo
Este artigo discute brevemente o método para realizar leituras arbitrárias através da exploração da revelação de Uninitialized Oddball. Existem muitos outros valores Sentinel no V8, que podem apresentar riscos de segurança semelhantes. Isso nos dá a seguinte reflexão:
Outras falhas de Uninitialized Oddball podem também permitir facilmente a execução remota de código (RCE) no V8.
A questão de saber se tais problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
É necessário incluir %TheHole/Uninitialized Oddball como variáveis no Fuzzer para explorar novos primitivas de exploração?
De qualquer forma, este tipo de problema irá encurtar significativamente o ciclo de exploração completa por parte dos hackers, merecendo a nossa elevada atenção.
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.
6 gostos
Recompensa
6
5
Partilhar
Comentar
0/400
HallucinationGrower
· 07-27 06:25
Caramba, como é que ainda pode vazar?
Ver originalResponder0
CodeAuditQueen
· 07-27 06:24
Outro vetor de ataque de variante CVE, tsk tsk
Ver originalResponder0
WhaleWatcher
· 07-27 06:19
O Google está a brincar com fogo? A voltar atrás na história.
Ver originalResponder0
BearMarketSurvivor
· 07-27 06:19
Realmente, é um bug que nunca se acaba.
Ver originalResponder0
CryptoAdventurer
· 07-27 06:14
Já é hora de pagar o imposto de inteligência? Quem entende, entende.
A divulgação do Valor Sentinel do motor V8 gera riscos de segurança. Oddball não inicializado torna-se um novo vetor de ataque.
Análise do problema de segurança causado pela divulgação de Sentinel Value no motor Chrome v8
O valor Sentinel é um valor especial em algoritmos, geralmente usado como condição de término em algoritmos de loop ou recursivos. No código-fonte do Chrome, existem vários valores Sentinel, e alguns deles, se forem expostos ao ambiente JavaScript, podem causar problemas de segurança.
Estudos anteriores mostraram que a divulgação do objeto TheHole pode permitir a execução de código arbitrário dentro do sandbox do Chrome. A equipe do Google rapidamente corrigiu o CVE relacionado. No entanto, além do objeto TheHole, existem outros objetos nativos no v8 que não devem ser divulgados para o JS. Este artigo discutirá o objeto Uninitialized Oddball, cuja técnica de contorno ainda pode ser usada na versão mais recente do V8.
É importante notar que este método tem uma certa generalidade:
No CVE-2021-30551, o POC inicial era a divulgação de um oddball interno não inicializado.
No CVE-2022-1486, o POC também revelou diretamente o UninitializedOddball.
Issue1352549( apresentou o código de exploração completo para o CVE) não atribuído.
Estes casos demonstram que a revelação do Uninitialized Oddball pode levar a sérios problemas de segurança.
Valor Sentinel no V8
A maior parte dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos sequencialmente na memória. Se objetos nativos que não devem ser expostos forem expostos ao JavaScript, pode-se conseguir a execução de qualquer código dentro do sandbox.
Para verificar isso, podemos modificar a função nativa do V8, vazando o Oddball Não Inicializado para o JavaScript. Especificamente, podemos modificar o deslocamento relativo do %TheHole() em relação ao isolate, de modo que retorne o Oddball Não Inicializado.
Contornar a proteção HardenType
Aproveitar o Uninitialized Oddball permite realizar leituras relativamente arbitrárias. O código chave é o seguinte:
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;
%PrepareFunctionForOptimization(read); ler(mal, 0); ler(mal, 1); %OptimizeFunctionOnNextCall(ler); ler(mal, 0);
let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);
No código de montagem otimizado, será calculado diretamente o deslocamento segundo a semântica do JavaScript e retornado o valor do array, sem verificar se obj.prop é o Valor da chave. Isso leva a uma confusão de tipos, permitindo a leitura arbitrária.
Devido ao Uninitialized Oddball estar mais à frente e ser mais primitivo na memória V8, é mais fácil de falsificar do que o objeto TheHole, sendo o método preferido para contornar o HardenType.
A solução de correção sugerida é adicionar uma verificação do map do array ao retornar os elementos do array da função otimizada, evitando o cálculo direto do deslocamento para retornar os valores do array.
Aviso de PatchGap
Após a análise do Issue1352549, descobriu-se que alguns softwares podem ter problemas de PatchGap. Por exemplo, o Skype ainda não corrigiu essa vulnerabilidade. Na plataforma x86, devido à ausência de compressão de endereços, a leitura e escrita arbitrárias são relativas a todo o processo.
Embora o Skype tenha ativado o ASLR, devido ao tamanho dos arquivos, os hackers só precisam ler e escrever em um endereço fixo, o que aumenta muito a probabilidade de ler e escrever o conteúdo dos arquivos do Skype. Combinando com métodos tradicionais como a análise PE, é possível completar toda a cadeia de exploração de vulnerabilidades.
Esta atualização do PatchGap não só envolve a Issue1352549, como também reduzirá significativamente a dificuldade de exploração de vulnerabilidades semelhantes a CVE-2022-1486 e CVE-2021-30551. Os hackers quase não precisam de pesquisa adicional para conseguir uma exploração completa.
Resumo
Este artigo discute brevemente o método para realizar leituras arbitrárias através da exploração da revelação de Uninitialized Oddball. Existem muitos outros valores Sentinel no V8, que podem apresentar riscos de segurança semelhantes. Isso nos dá a seguinte reflexão:
Outras falhas de Uninitialized Oddball podem também permitir facilmente a execução remota de código (RCE) no V8.
A questão de saber se tais problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
É necessário incluir %TheHole/Uninitialized Oddball como variáveis no Fuzzer para explorar novos primitivas de exploração?
De qualquer forma, este tipo de problema irá encurtar significativamente o ciclo de exploração completa por parte dos hackers, merecendo a nossa elevada atenção.