
Reproducteur PoC pour la vulnérabilité de dépassement de tampon basé sur le tas dans dhclient de FreeBSD lors de l'analyse de l'option DHCP 119 (CVE-2020-7461)
Auteurs : Moshe Kol, Shlomi Oberman
Reproduction (PoC) de la vulnérabilité de dépassement de tas de dhclient de FreeBSD lors de l'analyse de l'option DHCP 119 (CVE-2020-7461).
Le problème se trouve dans la fonction find_search_domain_name_len du fichier sbin/dhclient/options.c.
Cette fonction est appelée par expand_domain_search lorsque l'option DHCP 119 (domain search, RFC 3397) est fournie par le serveur.
Lorsqu'un schéma de compression est utilisé, la fonction find_search_domain_name_len est appelée récursivement à partir de l'emplacement pointé, mais ne vérifie pas la valeur de retour de l'appel récursif. Si l'appel récursif échoue, une valeur de retour de -1 est utilisée, qui est simplement ajoutée à la variable de longueur cumulative.
Voici le code buggé (lignes 299-301, options.c, dernier commit 70066b9) :
299: pointed_len = find_search_domain_name_len(option,
300: &pointer);
301: domain_name_len += pointed_len;
Plus tard dans la fonction expand_domain_search, un tampon est alloué avec la longueur calculée à l'aide de find_search_domain_name_len, puis le nom développé est écrit dans ce tampon à l'aide de la fonction expand_search_domain_name. Puisque cette dernière fonction n'effectue aucune vérification sur la valeur du pointeur dans le schéma de compression, il est possible de dépasser le tampon alloué.
Vous pouvez trouver l'avis de sécurité FreeBSD ici.