CVE-2023-40547 – evite confiar incorretamente em cabeçalhos HTTP
Uma vulnerabilidade crítica (CVE-2023-40547) no bootloader shim usado para Secure Boot no Linux permite gravações fora dos limites quando ele confia nos cabeçalhos HTTP `Content-Length`, potencialmente permitindo que atacantes contornem o Secure Boot em cenários de network boot e em certos cenários locais ou de MITM. Comentadores explicam como o shim se encaixa na cadeia do Secure Boot, por que o tratamento de HTTP/HTTPS no nível de firmware é complicado e por que esse bug é grave apesar de aparecer apenas em um caminho menos comum de HTTP boot. A thread também revisita preocupações de longa data sobre o controle da Microsoft sobre chaves de assinatura UEFI, os requisitos anti‑tivoização da GPLv3 e se o Secure Boot realmente protege os usuários ou apenas impõe controle do fornecedor.
Vulnerabilidade e contexto
- O bug está no código de boot HTTP do shim: ele aloca um buffer com base no cabeçalho
Content-Length, mas copia com base no tamanho real do corpo recebido, permitindo uma gravação fora dos limites se o cabeçalho mentir. - Isso existe em builds do shim que incluem suporte a HTTP boot; o shim é usado principalmente como um carregador Secure Boot assinado pela Microsoft que depois impõe sua própria política via Machine Owner Keys (MOK).
- Manchetes anteriores sugerindo “todo bootloader Linux” foram corrigidas: trata-se de um bug do shim, introduzido há cerca de 8 anos.
Superfície de ataque e gravidade
- Não se limita ao HTTP boot explícito:
- Local: malware com privilégios pode sobrescrever a EFI System Partition ou variáveis EFI e forçar HTTP boot ou fazer chain shim→GRUB2→shim via HTTP.
- Rede adjacente: PXE boot mais MITM pode ser encadeado para carregar o shim via HTTP.
- Remoto: MITM no HTTP boot contra uma vítima que use HTTP boot.
- Alguns argumentam que, uma vez que um atacante pode modificar variáveis EFI/ESP, outros ataques (por exemplo, adicionar MOKs, usar binários assinados mais antigos) já seriam possíveis; outros respondem que o objetivo do Secure Boot é justamente resistir a esse tipo de adulteração.
- Há discordância sobre a classificação “Critical”: alguns veem isso como defesa em profundidade essencial, outros acham que é menos significativo se o servidor ou o sistema local já estiverem fortemente comprometidos.
HTTP vs HTTPS e detalhes de implementação
- HTTPS não impede servidores maliciosos; ele principalmente bloqueia MITM.
- Vários comentaristas observam que o código de UEFI/boot pode pular a validação adequada de certificados HTTPS (tamanho da CA store, complexidades de atualização e revogação, desvio de horário), tornando MITM realista mesmo em HTTPS.
- Debate sobre a semântica de HTTP: em HTTP/1.1,
Content-Lengthdeveria ser a autoridade; se uma implementação em vez disso confiar em uma medição separada de “bodyLength”, ambas precisam ser reconciliadas cuidadosamente — essa divergência levou ao bug.
Shim, Secure Boot, MOK e revogação
- O uso típico é shim → GRUB → kernel no disco local; HTTP boot é nichado, mas existe.
- O shim verifica o binário da próxima etapa contra sua própria lista MOK; a revogação do Secure Boot via UEFI DBX pode invalidar binários vulneráveis do shim, mas muitos sistemas provavelmente nunca atualizam o DBX.
- Measured boot e TPM podem, em princípio, vincular chaves de descriptografia do disco a componentes específicos do boot, mas isso é visto como complexo e raramente usado por usuários típicos.
GPLv3, anti‑tivoization e política de assinatura da Microsoft
- Grande subthread sobre por que a Microsoft evita assinar bootloaders GPLv3 como o GRUB:
- A cláusula de “Installation Information” da GPLv3 é citada: distribuidores de dispositivos com componentes GPLv3 devem fornecer quaisquer métodos/chaves de autorização necessários para os usuários instalarem e executarem versões modificadas nesse dispositivo.
- Alguns inicialmente duvidam que isso se aplique a chaves de assinatura, mas depois concedem que a linguagem (“authorization keys”) junto com comentários da FSF sobre anti‑tivoization apoia essa interpretação.
- Outros argumentam que permitir que os usuários registrem suas próprias chaves (em vez de fornecer chaves privadas do fornecedor) deveria satisfazer a licença, e observam que implementações ruins de Secure Boot que bloqueiam chaves do usuário são o verdadeiro problema.
- Há debate sobre se assinaturas têm alguma relevância para copyright e se simplesmente assinar um binário (sem distribuí-lo) pode disparar obrigações da GPL; as opiniões divergem, e o status legal continua descrito como incerto.
- O shim é licenciado sob MIT para contornar restrições da GPLv3, permitindo que seja assinado pela Microsoft enquanto aplica sua própria política de confiança (MOK).
Visões sobre Secure Boot e o ecossistema
- Alguns veem Secure Boot como defesa em profundidade válida, especialmente contra ataques “evil maid” em ESPs não criptografadas, e argumentam que os fornecedores devem permitir controle do usuário sobre as chaves.
- Outros são fortemente críticos:
- Alegam que o Secure Boot principalmente consolida o controle do fornecedor (especialmente a chave padrão da Microsoft) e se assemelha mais a DRM do que a segurança do usuário.
- Citam dispositivos em que o Secure Boot não pode ser desativado ou as chaves do usuário não podem ser adicionadas, e em que ativá-lo causa problemas de usabilidade (por exemplo, hibernação, avisos “assustadores”, atrito com Linux).
- Preocupam-se com a plataforma PC caminhando para um jardim murado, comparando isso a problemas antitruste anteriores.
Boot de rede e escolhas de design
- HTTP/PXE boot são descritos por vários como “pesadelos de segurança” ou pelo menos altamente arriscados, embora outros observem que são úteis para testes de laboratório e provisionamento.
- Alguns questionam por que o shim implementa diretamente HTTP boot em vez de delegar a um binário EFI separado, assinado com MOK.
- Há críticas de que um bug tão óbvio de confiança em cabeçalho não deveria ter passado pela revisão de código, com comentários comparando-o a um erro de iniciante, além de observações laterais sobre pequenas limpezas (por exemplo, correções de typo) no patch.