ASA-2018-00022 – U-Boot: Verificações de limite insuficientes na inicialização da imagem via rede


For the English version of this alert, click here.

Allele Security Alert

ASA-2018-00022

Identificador(es)

ASA-2018-00022, CVE-2018-18439

Título

Verificações de limite insuficientes na inicialização da imagem via rede

Produto(s)

U-Boot

Versão(ões) afetada(s)

Todas as versões lançadas do U-Boot

Versão(ões) corrigida(s)

Desconhecido

Prova de conceito

Desconhecido

Descrição

O bootloader U-Boot suporta o carregamento do kernel a partir de uma variedade de fontes de rede, como o TFTP através do comando `tftpboot`.

Este comando não protege a memória do sistema de ser sobrescrita durante o carregamento de arquivos de um tamanho que excede os limites da região de memória U-Boot relocada, preenchida com o arquivo carregado a partir da variável passada `loadAddr`.

Portanto, uma imagem de inicialização excessivamente grande, servida por TFTP, pode ser criada para sobrescrever todos os segmentos de memória de tempo de execução e estáticos do U-Boot e, em geral, toda a memória endereçável do dispositivo a partir do argumento de endereço de carregamento `loadAddr`.

A sobrescrita de memória pode levar diretamente à execução de código arbitrário, totalmente controlada pelo conteúdo da imagem carregada.

Quando a inicialização verificada é implementada, o problema permite ignorar sua validação pretendida, pois a substituição da memória acontece antes que qualquer validação possa ocorrer.

O problema pode ser explorado por vários meios:

– Um arquivo de imagem de inicialização criado excessivamente grande é analisado pela função `tftp_handler` que não possui verificações de tamanho, permitindo a sobrescrita de memória.

– Um servidor malicioso pode manipular números de seqüência de pacotes TFTP para armazenar partes de arquivos baixados em locais de memória arbitrária, dado que o número de sequência é usado diretamente pela função `tftp_handler` para calcular o endereço de destino para pedaços de arquivos baixados.

Além disso, a função `store_block`, usada para armazenar pedaços de arquivos baixados na memória, quando invocada por` tftp_handler` com um valor de `tftp_cur_block` de 0, aciona um integer underflow sem checagem.

Isso permite potencialmente apagar a memória localizada antes do `loadAddr` quando um pacote é enviado com um nulo, seguindo pelo menos de um pacote válido.

Referência(s)

Security advisory: U-Boot verified boot bypass
https://github.com/inversepath/usbarmory/blob/master/software/secure_boot/Security_Advisory-Ref_IPVR2018-0001.txt

CVE-2018-18439, CVE-2018-18440 – U-Boot verified boot bypass vulnerabilities
https://seclists.org/oss-sec/2018/q4/125

CVE-2018-18440
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-18440

CVE-2018-18440
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-18440


Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 9 de novembro de 2018