A equipe do Project Zero (GPZ) do Google revelou uma falha de segurança de alta gravidade nas GPUs Qualcomm Adreno. Como a fabricante do chip não conseguiu desenvolver um patch de correção no prazo de 90 dias após o reporte da vulnerabilidade, o Google divulgou publicamente os detalhes do bug.
De acordo com a política de divulgação revisada, o GPZ precisa esperar pelo menos 90 dias antes de revelar publicamente os detalhes de uma falha de segurança, mesmo que o bug seja corrigido antes desse prazo.
Além disso, os fornecedores podem solicitar um período de carência adicional de 14 dias ao Google se acreditarem que não serão capazes de corrigir a vulnerabilidade relatada em 90 dias.
O driver Adreno GPU associa uma estrutura de dispositivo privada (process_priv) a cada descritor de arquivo KGSL, que contém as tabelas de página que são usadas para alternar o contexto da GPU.
Essa estrutura está ligada ao PID do processo de chamada e pode ser reutilizada várias vezes por descritores de arquivo KGSL adicionais no mesmo processo, presumivelmente para economizar o custo de realizar uma alternância de contexto de GPU entre contextos de desenho no mesmo processo.
Quando um processo se bifurca, o filho herda os descritores de arquivo KGSL do pai junto com a estrutura privada associada ao PID do pai.
Se um processo filho contém um descritor de arquivo KGSL que foi originalmente aberto em um processo pai, e se esse processo pai sai, o filho ainda mantém uma referência à estrutura privada associada ao PID do pai.
No entanto, se o PID dos pais for reutilizado por um processo de vítima, a vítima reutilizará a estrutura privada existente em vez de criar uma nova.
Na prática, isso dá ao processo filho que pode ser usado por um invasor, a capacidade de ler quaisquer mapeamentos compartilhados de GPU subsequentes que o processo de vítima cria, uma vez que seus contextos de desenho são considerados em execução no mesmo contexto de GPU.
De acordo com o Project Zero, "um ataque no mundo real exigiria que o invasor fizesse um loop do PID e, em seguida, acione uma intenção bem-cronometrada ou reinicie o serviço do sistema por meio de um bug de falha.
A exploração provavelmente tentaria recuperar o conteúdo da composição de GPU da vítima (ou os resultados de outras operações de GPU)."
Em 15 de setembro de 2020, a equipe de pesquisa do Google entrou em contato com a Qualcomm para relatar a vulnerabilidade junto com sugestões de correção de bug.
A equipe de pesquisa deu à Qualcomm um prazo de 90 dias para corrigir o problema antes de revelar publicamente os detalhes do bug, de acordo com a política de divulgação revisada. No entanto, o prazo expirou em 14 de dezembro.
Além disso, em 7 de dezembro de 2020, a Qualcomm informou ao Project Zero que o problema (CVE-2020-11311) foi resolvido e compartilhado no boletim OEM privado com um comunicado público planejado para janeiro de 2021.
A isso, a equipe de pesquisa do Google respondeu que o problema será divulgado em 14 de dezembro e solicitado um link para os patches relevantes, que foi prontamente fornecido pela Qualcomm.
Mas, ao investigar o patch proposto, o Google descobriu que ele introduziu um problema de contagem de referência levando a um UAF explorável.
Por exemplo, o patch para este bug de vazamento de informações está introduzindo um bug de escalonamento de privilégios de kernel.
O Project Zero compartilhou detalhes do novo UAF que o patch introduziu em 10 de dezembro de 2020, ao qual a Qualcomm respondeu que está investigando as novas informações.
Como o prazo final de 14 de dezembro não foi cumprido pela Qualcomm, o Project Zero foi em frente e expôs publicamente a falha de alta gravidade no driver da GPU Adreno.
Embora sob a política de divulgação revisada, os fornecedores podem solicitar um período de carência adicional de 14 dias para corrigir a falha, não está claro no boletim do Google se a Qualcomm o fez.
Com o bug de segurança agora público, a Qualcomm precisa trabalhar ainda mais em uma solução rápida para o processador, antes que qualquer invasor encontre uma maneira eficaz de explorar a falha.
Fonte: Chromium