Vulnerabilidade remota na camada Shim que permite contornar o UEFI Secure Boot

Na camada Shim, utilizada na maioria das distribuições Linux para inicialização verificada em modo UEFI Secure Boot, foi identificada uma vulnerabilidade (CVE-2023-40547) que pode levar à execução remota de código e à contorno do mecanismo de inicialização verificada UEFI Secure Boot. Um atacante que controla o servidor HTTP acessado pelo Shim pode retornar uma resposta especialmente formatada, levando a uma gravação controlada fora dos limites do buffer para execução de código em um estágio inicial da inicialização.

A vulnerabilidade é causada por um erro no código de inicialização de arquivos via HTTP, que se manifesta ao processar respostas incorretas retornadas pelo servidor HTTP acessado pelo shim. O modo HTTPBoot no Shim é suportado desde 2016 e permite a inicialização pela rede, utilizando o protocolo HTTP para recuperar o arquivo do carregador chamado na etapa seguinte. O Shim, ao inicializar arquivos via HTTP, aloca um buffer para os dados recebidos, considerando não o tamanho real dos dados, mas o tamanho especificado no cabeçalho HTTP 'Content-Length'. Portanto, ao retornar um valor menor no cabeçalho Content-Length, pode-se alcançar a gravação do final da requisição na memória além do limite do buffer.

O Shim é assinado digitalmente pela Microsoft e verifica o GRUB2 com seu próprio certificado, permitindo que os desenvolvedores de distribuições não assinem cada atualização do kernel e do GRUB na Microsoft. A vulnerabilidade no Shim oferece a possibilidade de interferir na cadeia de confiança durante o modo Secure Boot ativo e obter controle total sobre o processo de inicialização subsequente, por exemplo, para iniciar outro sistema operacional, modificar componentes do sistema operacional e contornar a proteção Lockdown.

A vulnerabilidade foi corrigida na versão 15.8 do Shim, mas para bloquear completamente o ataque através do Shim, uma nova versão precisa ser assinada pela Microsoft e implementada nas distribuições. O status da correção da vulnerabilidade nas distribuições pode ser avaliado nas seguintes páginas: Debian, Ubuntu, SUSE, RHEL, Fedora. O problema é que sem a revogação da assinatura da versão antiga, a correção é inútil, uma vez que o atacante pode usar um meio de inicialização com a versão vulnerável do Shim para comprometer o UEFI Secure Boot. No entanto, a revogação da assinatura levará à impossibilidade de inicialização verificada das distribuições que continuarem a usar a versão antiga do Shim.

Para bloquear a vulnerabilidade sem revogar a assinatura digital, as distribuições podem usar o mecanismo SBAT (UEFI Secure Boot Advanced Targeting), cujo suporte é implementado para GRUB2, shim e fwupd na maioria das distribuições populares do Linux. O SBAT foi desenvolvido em conjunto com a Microsoft e implica a adição de metadados adicionais nos arquivos executáveis 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 permitidos ou bloqueados para o UEFI Secure Boot.

O SBAT permite bloquear o uso de assinaturas digitais para versões específicas dos componentes sem a necessidade de revogar chaves para o Secure Boot. O bloqueio de vulnerabilidades por meio do SBAT não requer o uso da lista de certificados revogados do UEFI (dbx), sendo realizado ao nível da 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.

Além da vulnerabilidade discutida, na versão 15.8 do Shim também foram corrigidos vários problemas menos graves explorados localmente:

  • CVE-2023-40548 — estouro de inteiro na função verify_sbat_section, levando a um estouro de buffer em sistemas de 32 bits.
  • CVE-2023-40546 — leitura de área de memória fora do buffer ao emitir mensagens de erro pela função LogError().
  • CVE-2023-40549 — leitura de área de memória fora do buffer ao processar um arquivo especialmente formatado no formato PE na função verify_buffer_authenticode().
  • CVE-2023-40550 — leitura de área de memória fora do buffer na função verify_buffer_sbat().
  • CVE-2023-40551 — leitura de área de memória fora do buffer ao analisar arquivos no formato MZ.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster