Como contornar o HardenProtect do Chrome V8 através da divulgação do Valor Sentinel
Introdução
O valor sentinel é um tipo especial de valor em algoritmos, frequentemente utilizado em algoritmos de loop ou recursivos como condição de término. Este tipo de valor é amplamente utilizado no código-fonte do Chrome. Recentemente, pesquisadores de segurança descobriram que a divulgação do objeto TheHole poderia permitir a execução de código arbitrário dentro do sandbox do Chrome. A equipe do Google rapidamente corrigiu essas duas vulnerabilidades em estado selvagem.
No entanto, existem outros objetos nativos no V8 que não devem ser expostos ao JavaScript. Este artigo discutirá um novo objeto: Uninitialized Oddball. Este método de contorno apareceu pela primeira vez em um Issue submetido por um membro do Project0 e ainda está disponível na versão mais recente do V8.
É importante notar que este método possui uma forte universalidade:
No CVE-2021-30551, o primeiro POC é a divulgação de oddball interno não inicializado.
O POC do CVE-2022-1486 também revelou diretamente o UninitializedOddball.
Um problema não atribuído a um CVE também utilizou este método.
Estes casos são suficientes para demonstrar a importância do problema, valendo a pena rever o software que pode ser afetado.
Valor Sentinel no V8
A maioria dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e eles estão dispostos sequencialmente na memória. Uma vez que esses objetos nativos, que não devem vazar, sejam vazados para o JavaScript, isso pode levar à execução de código arbitrário dentro do sandbox.
Podemos vazar Oddball Não Inicializado para o JavaScript modificando a função nativa do V8. O método específico é alterar o deslocamento relativo do isolate na função %TheHole() para que retorne Oddball Não Inicializado.
Contornar HardenType
A utilização de Uninitialized Oddball permite a leitura e escrita relativamente arbitrária. A chave está no fato de que a função de leitura otimizada apenas verifica a propriedade prop do obj, sem verificar o valor de obj.prop como chave. Isso leva a uma confusão de tipos durante os cálculos, permitindo assim uma leitura arbitrária.
Na arquitetura x86, devido à falta de compressão de endereços, a leitura e escrita aleatória são relativas a todo o processo. Embora a conveniência trazida pela falta de compressão de endereços não esteja disponível, devido ao tamanho de alguns arquivos de software grandes, ainda é possível ler e escrever o conteúdo alvo com uma probabilidade relativamente alta.
Aviso PatchGap
Este PatchGap não só envolve o Issue1352549, mas também múltiplas vulnerabilidades, incluindo questões semelhantes a Issue1314616 e Issue1216437. Após a divulgação do novo método de bypass, a dificuldade de exploração dessas vulnerabilidades diminuiu significativamente. Os hackers quase não precisam de pesquisa adicional para completar a cadeia de exploração.
Resumo
Existem muitos outros valores Sentinel no V8, que também podem ter problemas semelhantes. Isso nos dá algumas pistas:
A divulgação de outros uninitialized_Oddball pode também permitir RCE no V8?
Estas questões devem ser formalmente consideradas como problemas de segurança?
Deverá o valor Sentinel ser adicionado como variável no teste Fuzzer?
De qualquer forma, este tipo de problema irá encurtar significativamente o ciclo para que os hackers consigam uma exploração completa, o que merece a nossa alta atenção.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
Nova vulnerabilidade do motor Chrome V8: vaza Oddball não inicializado contornando a sandbox
Como contornar o HardenProtect do Chrome V8 através da divulgação do Valor Sentinel
Introdução
O valor sentinel é um tipo especial de valor em algoritmos, frequentemente utilizado em algoritmos de loop ou recursivos como condição de término. Este tipo de valor é amplamente utilizado no código-fonte do Chrome. Recentemente, pesquisadores de segurança descobriram que a divulgação do objeto TheHole poderia permitir a execução de código arbitrário dentro do sandbox do Chrome. A equipe do Google rapidamente corrigiu essas duas vulnerabilidades em estado selvagem.
No entanto, existem outros objetos nativos no V8 que não devem ser expostos ao JavaScript. Este artigo discutirá um novo objeto: Uninitialized Oddball. Este método de contorno apareceu pela primeira vez em um Issue submetido por um membro do Project0 e ainda está disponível na versão mais recente do V8.
É importante notar que este método possui uma forte universalidade:
No CVE-2021-30551, o primeiro POC é a divulgação de oddball interno não inicializado.
O POC do CVE-2022-1486 também revelou diretamente o UninitializedOddball.
Um problema não atribuído a um CVE também utilizou este método.
Estes casos são suficientes para demonstrar a importância do problema, valendo a pena rever o software que pode ser afetado.
Valor Sentinel no V8
A maioria dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e eles estão dispostos sequencialmente na memória. Uma vez que esses objetos nativos, que não devem vazar, sejam vazados para o JavaScript, isso pode levar à execução de código arbitrário dentro do sandbox.
Podemos vazar Oddball Não Inicializado para o JavaScript modificando a função nativa do V8. O método específico é alterar o deslocamento relativo do isolate na função %TheHole() para que retorne Oddball Não Inicializado.
Contornar HardenType
A utilização de Uninitialized Oddball permite a leitura e escrita relativamente arbitrária. A chave está no fato de que a função de leitura otimizada apenas verifica a propriedade prop do obj, sem verificar o valor de obj.prop como chave. Isso leva a uma confusão de tipos durante os cálculos, permitindo assim uma leitura arbitrária.
Na arquitetura x86, devido à falta de compressão de endereços, a leitura e escrita aleatória são relativas a todo o processo. Embora a conveniência trazida pela falta de compressão de endereços não esteja disponível, devido ao tamanho de alguns arquivos de software grandes, ainda é possível ler e escrever o conteúdo alvo com uma probabilidade relativamente alta.
Aviso PatchGap
Este PatchGap não só envolve o Issue1352549, mas também múltiplas vulnerabilidades, incluindo questões semelhantes a Issue1314616 e Issue1216437. Após a divulgação do novo método de bypass, a dificuldade de exploração dessas vulnerabilidades diminuiu significativamente. Os hackers quase não precisam de pesquisa adicional para completar a cadeia de exploração.
Resumo
Existem muitos outros valores Sentinel no V8, que também podem ter problemas semelhantes. Isso nos dá algumas pistas:
A divulgação de outros uninitialized_Oddball pode também permitir RCE no V8?
Estas questões devem ser formalmente consideradas como problemas de segurança?
Deverá o valor Sentinel ser adicionado como variável no teste Fuzzer?
De qualquer forma, este tipo de problema irá encurtar significativamente o ciclo para que os hackers consigam uma exploração completa, o que merece a nossa alta atenção.