
PoC reproductora para la vulnerabilidad de desbordamiento de búfer basado en montón en FreeBSD dhclient al analizar la opción DHCP 119 (CVE-2020-7461)
Autores: Moshe Kol, Shlomi Oberman
PoC de reproducción de la vulnerabilidad de desbordamiento de búfer del heap en dhclient de FreeBSD al analizar la opción 119 de DHCP (CVE-2020-7461).
El problema reside en la función find_search_domain_name_len del archivo sbin/dhclient/options.c.
Esta función es llamada por expand_domain_search cuando la opción 119 de DHCP (búsqueda de dominio, RFC 3397) es suministrada por el servidor.
Cuando se utiliza un esquema de compresión, la función find_search_domain_name_len se llama recursivamente a partir de la ubicación señalada, pero no verifica el valor de retorno de la llamada recursiva. Si la llamada recursiva falla, se utiliza un valor de retorno de -1, que simplemente se suma a la variable de longitud acumulativa.
Aquí está el código con el error (líneas 299-301, options.c, último commit 70066b9):
299: pointed_len = find_search_domain_name_len(option,
300: &pointer);
301: domain_name_len += pointed_len;
Más adelante en la función expand_domain_search, se asigna un buffer con la longitud calculada usando ,
y luego el nombre expandido se escribe en este buffer usando la función . Dado que esta última función no
tiene ninguna comprobación sobre el valor del puntero en el esquema de compresión, es posible sobrepasar el buffer asignado.
find_search_domain_name_lenexpand_search_domain_namePuede encontrar el aviso de seguridad de FreeBSD aquí.