
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 find_search_domain_name_len,
y luego el nombre expandido se escribe en este buffer usando la función expand_search_domain_name. 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.
Puede encontrar el aviso de seguridad de FreeBSD aquí.