No carregador GRUB2 foram corrigidas 7 vulnerabilidades que permitiam contornar o mecanismo UEFI Secure Boot e iniciar código não verificado, como a injeção de malware que opera no nível do carregador ou do kernel. Além disso, foi identificada uma vulnerabilidade no módulo shim, que também permite contornar o UEFI Secure Boot. O grupo de vulnerabilidades recebeu o codinome Boothole 3, assim como problemas semelhantes anteriormente identificados no carregador.
Para resolver os problemas no GRUB2 e no shim, as distribuições poderão utilizar o mecanismo SBAT (UEFI Secure Boot Advanced Targeting), cuja suporte foi implementada para GRUB2, shim e fwupd. O SBAT foi desenvolvido em conjunto com a Microsoft e implica a adição de metadados executáveis nos arquivos dos componentes UEFI, que incluem informações sobre o fabricante, produto, componente e versão. Esses metadados são assinados digitalmente e podem ser incluídos separadamente nas listas de componentes autorizados ou proibidos para o UEFI Secure Boot.
Na maioria das distribuições Linux, para a inicialização verificada em modo UEFI Secure Boot, é utilizado um pequeno módulo shim, assinado digitalmente pela Microsoft. Este módulo verifica o GRUB2 com seu próprio certificado, permitindo que os desenvolvedores de distribuições não precisem assinar cada atualização do kernel e do GRUB com a Microsoft. As vulnerabilidades no GRUB2 permitem a execução de código próprio após a verificação bem-sucedida do shim, mas antes do carregamento do sistema operacional, inserindo-se na cadeia de confiança com o modo Secure Boot ativo e assumindo controle total sobre o processo de inicialização subsequente, incluindo a inicialização de outro sistema operacional, modificação de componentes do sistema operacional e contorno da proteção Lockdown.
Para resolver os problemas no carregador, as distribuições terão que criar novas assinaturas digitais internas e atualizar instaladores, carregadores, pacotes do kernel, firmwares fwupd e o módulo shim. Antes da implementação do SBAT, a atualização da lista de certificados revogados (dbx, UEFI Revocation List) era uma condição obrigatória para bloquear completamente a vulnerabilidade, pois um atacante, independentemente do sistema operacional usado, poderia comprometer o UEFI Secure Boot utilizando um meio de inicialização com uma versão antiga vulnerável do GRUB2, assinada digitalmente.
Em vez de revogar a assinatura, o SBAT permite bloquear seu uso para versões específicas de componentes sem a necessidade de revogar chaves para o Secure Boot. O bloqueio de vulnerabilidades através do SBAT não requer o uso da lista de certificados revogados do UEFI (dbx) e é feito ao nível de substituição da chave interna para a formação de assinaturas e atualização do GRUB2, shim e outros artefatos de inicialização fornecidos pelas distribuições. Atualmente, o suporte ao SBAT já foi adicionado na maioria das distribuições populares do Linux.
Vulnerabilidades identificadas:
- CVE-2021-3696, CVE-2021-3695 - estouros de buffer na heap ao processar imagens PNG especialmente formatadas, que teoricamente podem ser usados para organizar a execução de código pelo atacante e contornar o UEFI Secure Boot. Observa-se que o problema é difícil de explorar, já que a criação de um exploit funcional requer levar em conta muitos fatores e ter informações sobre o layout de memória.
- CVE-2021-3697 - estouro por underflow de buffer no código de processamento de imagens JPEG. A exploração do problema requer a obtenção de informações sobre o layout de memória e está aproximadamente no mesmo nível de complexidade que o problema com PNG (CVSS 7.5).
- CVE-2022-28733 - estouro de inteiros na função grub_net_recv_ip4_packets(), permitindo impactar o parâmetro rsm->total_len através do envio de um pacote IP especialmente formatado. O problema é considerado o mais grave dentre as vulnerabilidades apresentadas (CVSS 8.1). Em caso de exploração bem-sucedida, a vulnerabilidade permite gravar dados além dos limites do buffer, devido à alocação de memória intencionalmente menor.
- CVE-2022-28734 - estouro de buffer de um byte ao processar cabeçalhos HTTP segmentados. O problema pode levar à corrupção dos metadados do GRUB2 (gravação de um byte nulo imediatamente após o final do buffer) ao analisar requisições HTTP especialmente formatadas.
- CVE-2022-28735 - problema no verificador shim_lock, permitindo o carregamento de arquivos não relacionados ao kernel. A vulnerabilidade pode ser utilizada para carregar módulos do kernel ou código não verificado em modo UEFI Secure Boot sem assinatura digital.
- CVE-2022-28736 — acesso a uma área de memória já liberada na função grub_cmd_chainloader() através da reinicialização do comando chainloader, utilizado para carregar sistemas operacionais não suportados no GRUB2. A exploração pode levar à execução de código por um atacante, caso o invasor consiga determinar as características da distribuição de memória no GRUB2.
- CVE-2022-28737 — estouro de buffer na camada shim, que ocorre na função handle_image() ao carregar e executar imagens EFI especialmente manipuladas.
Fonte: opennet.ru
