
FreeBSD dhclientにおけるDHCPオプション119の解析時のヒープベースのバッファオーバーフローの脆弱性(CVE-2020-7461)の再現PoC
著者: Moshe Kol, Shlomi Oberman
FreeBSD dhclient における DHCP オプション 119 の解析時のヒープベースのバッファオーバーフロー脆弱性 (CVE-2020-7461) の再現PoC。
問題は sbin/dhclient/options.c ファイル内の関数 find_search_domain_name_len にあります。
この関数は、サーバから DHCP オプション 119 (ドメイン検索, RFC 3397) が提供されたときに expand_domain_search によって呼び出されます。
圧縮方式が使用されると、関数 find_search_domain_name_len は指定された位置から再帰的に呼び出されますが、再帰呼び出しの戻り値をチェックしません。再帰呼び出しが失敗すると、戻り値 -1 が使用され、そのまま累積長変数に加算されます。
以下がバグのあるコードです (options.c の 299-301 行、最終コミット 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 セキュリティアドバイザリはこちらからご覧いただけます。