ASA-2019-00481 – Das U-Boot: memcpy sem definição de limite com falha na verificação de tamanho nas funções nfs_read_reply() / store_block()


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00481

Identificador(es)

ASA-2019-00481, CVE-2019-14194

Título

memcpy sem definição de limite com falha na verificação de tamanho nas funções nfs_read_reply() / store_block().

Fabricante(s)

DENX Software Engineering

Produto(s)

Das U-Boot

Versão(ões) afetada(s)

Desconhecido

Versão(ões) corrigida(s)

Desconhecido

Prova de conceito

Desconhecido

Descrição

Existe uma chamada memcpy sem definição de limite com comprimento não validado em nfs_readlink_reply(), no bloco if após calcular o novo path len.

Detalhes técnicos

O problema existe na função nfs_readlink_reply() que analisa uma resposta nfs vinda da rede. Ela analisa 4 bytes e, sem qualquer validação adicional, usa-os como comprimento para um memcpy em dois locais diferentes.

static int nfs_readlink_reply(uchar *pkt, unsigned len)
{
           [...]

           /* new path length */
           rlen = ntohl(rpc_pkt.u.reply.data[1 + nfsv3_data_offset]);

           if (*((char *)&(rpc_pkt.u.reply.data[2 + nfsv3_data_offset])) != '/') {
                      int pathlen;

                      strcat(nfs_path, "/");
                      pathlen = strlen(nfs_path);
                      memcpy(nfs_path + pathlen,
                                       (uchar *)&(rpc_pkt.u.reply.data[2 + nfsv3_data_offset]),
                                               rlen);
                      nfs_path[pathlen + rlen] = 0;
           } else {
                      memcpy(nfs_path,
                                               (uchar *)&(rpc_pkt.u.reply.data[2 + nfsv3_data_offset]),
                                               rlen);
                      nfs_path[rlen] = 0;
           }
           return 0;
}

O buffer de destino nfs_path é global e suporta até 2048 bytes.

Créditos

Fermín Serna, Pavel Avgustinov e Kevin Backhouse

Referência(s)

U-Boot RCE Vulnerabilities Affecting IoT Devices
https://blog.semmle.com/uboot-remote-code-execution-vulnerability/

U-Boot NFS RCE Vulnerabilities (CVE-2019-14192)
https://blog.semmle.com/uboot-rce-nfs-vulnerability/

[U-Boot] Remote code execution vulnerabilities in U-Boot’s NFS and other IP parsing code
https://lists.denx.de/pipermail/u-boot/2019-July/378001.html

CVE-2019-14193
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14193

CVE-2019-14193
https://nvd.nist.gov/vuln/detail/CVE-2019-14193

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

Última modificação: 8 agosto 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.