
Воспроизводящий PoC для уязвимости кучевого переполнения буфера в FreeBSD dhclient при разборе DHCP option 119 (CVE-2020-7461)
Авторы: Моше Коль, Шломи Оберман
Воспроизводитель PoC для уязвимости переполнения кучи в FreeBSD dhclient при разборе DHCP-опции 119 (CVE-2020-7461).
Проблема находится в функции find_search_domain_name_len в файле sbin/dhclient/options.c.
Эта функция вызывается expand_domain_search, когда DHCP-опция 119 (domain search, RFC 3397) предоставляется сервером.
При использовании схемы сжатия функция find_search_domain_name_len вызывается рекурсивно, начиная с указанного
местоположения, но не проверяет возвращаемое значение рекурсивного вызова. Если рекурсивный вызов завершается неудачей,
используется возвращаемое значение -1, которое просто прибавляется к переменной накопленной длины.
Вот ошибочный код (строки 299-301, options.c, последний коммит 70066b9):
299: pointed_len = find_search_domain_name_len(option,
300: &pointer);
301: domain_name_len += pointed_len;
Позже в функции expand_domain_search выделяется буфер размером, вычисленным с помощью find_search_domain_name_len,
а затем расширенное имя записывается в этот буфер с помощью функции expand_search_domain_name. Поскольку последняя
функция не имеет проверок значения указателя в схеме сжатия, возможно переполнение выделенного буфера.
Вы можете найти уведомление безопасности FreeBSD здесь.