
Reproducer PoC para a vulnerabilidade de estouro de buffer baseado em heap no dhclient do FreeBSD ao analisar a opção 119 do DHCP (CVE-2020-7461)
Autores: Moshe Kol, Shlomi Oberman
PoC de reprodução para a vulnerabilidade de estouro de buffer baseado em heap no dhclient do FreeBSD ao analisar a opção 119 do DHCP (CVE-2020-7461).
O problema reside na função find_search_domain_name_len no arquivo sbin/dhclient/options.c.
Esta função é chamada por expand_domain_search quando a opção 119 do DHCP (domain search, RFC 3397) é fornecida pelo servidor.
Quando um esquema de compressão é usado, a função find_search_domain_name_len é chamada recursivamente a partir da localização
apontada, mas não verifica o valor de retorno da chamada recursiva. Se a chamada recursiva falhar, um valor de retorno de -1 é usado,
que é simplesmente adicionado à variável de comprimento cumulativo.
Aqui está o código com bug (linhas 299-301, options.c, último commit 70066b9):
299: pointed_len = find_search_domain_name_len(option,
300: &pointer);
301: domain_name_len += pointed_len;
Mais adiante na função expand_domain_search, um buffer é alocado com o comprimento calculado usando find_search_domain_name_len,
e então o nome expandido é escrito neste buffer usando a função expand_search_domain_name. Como esta última função não
possui nenhuma verificação no valor do ponteiro no esquema de compressão, é possível extrapolar o buffer alocado.
Você pode encontrar o Aviso de Segurança do FreeBSD aqui.