
OPNsense 26.7.6 - عالية - عن بُعد - صلاحيات متبقية - مرآة برامج ثابتة مخصصة تتخطى بصمات pkg عبر sed
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-firmware-mirror-sed
التصنيف: تخطي التوقيع الوصول: عن بُعد
OPNsense core 26.7.6 (a842fe48) - opnsense.org
النظام: Firmware set يرسل mirror / flavour مخصصين. Core FILTER_SANITIZE_URL يحتفظ بـ \|#;". opnsense-update -m / -n يُدخل تلك السلسلة في sed على OPNsense.conf ويمكنه قلب signature_type من "fingerprints" إلى "none". ثم pkg install كـ root من عنوان URL الخاص بالمهاجم. صفحة الإعدادات توفر مرآة مخصصة لحزم OPNsense الموقّعة. لا تحتوي على عنصر تحكم "تعطيل التوقيعات". الصلاحية هي page-system-firmware-manualupdate، وليس page-all.
Sed موجود في opnsense-update خارج التثبيت. Core في هذا التثبيت هو الحقل غير المُعقَّم بالإضافة إلى تمرير -m. المختبر يعيد تشغيل نص برنامج s||| ذلك باستخدام GNU sed.
تبقى حزمة GitHub هذه خاصة حتى الإفصاح المنسّق.
| ID | لا يوجد CVE بعد |
| Class | تخطي التوقيع |
| Reach | عن بُعد (WebGUI / API مُصادَق عليه) |
| CWE | CWE-74 / CWE-347 |
| CVSS | مرتفع: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H |
| Product | OPNsense core |
| Affected | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) Firmware set مرآة مخصصة |
| Auth | جلسة WebGUI أو مفتاح API مع page-system-firmware-manualupdate |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 فقط |
ثبّتُ الوسم 26.7.6 peel a842fe48. المختبر عبارة عن أداة PHP من FILTER_SANITIZE_URL بالإضافة إلى sed الخاص بـ mod_mirrorurl في opnsense-update، HTTP على loopback على 127.0.0.1:18860. PR:H لأن صفحة firmware مسموح لها بالفعل بتثبيت حزم موقّعة. النتيجة 8.8 إذا تم التعامل مع تلك الصفحة كـ PR:L.
| Method | Sink | Privilege |
|---|---|---|
FILTER_SANITIZE_URL على مرآة مخصصة مع | ثم sed بنمط opnsense-update | إعادة كتابة OPNsense.conf | النزاهة (مُثبتة مختبريًا): signature_type "none". مرآة التحكم تبقى "fingerprints". المختبر: sanitize-keeps-pipe=yes signature_type=none fingerprints-control=yes. |
| نفس المجموعة، حقل plugins | setAction يتجاهل plugins | سلبي (مُثبت مختبريًا): يتم تجاهل plugins قبل الحفظ. |
ثم POST /api/core/firmware/install/<pkg> | pkg install -y كـ root من عنوان URL الخاص بالمهاجم | النزاهة (مُستنتجة): حزمة غير موقّعة كـ root. صفحة firmware تثبّت بالفعل حزمًا موقّعة؛ هذه البقايا هي تخطي التحقق. لا حمولة غير موقّعة في المختبر. |
ثم POST /api/core/firmware/update أو /upgrade | opnsense-update -pt / -u كـ root | النزاهة (مُستنتجة): مجموعات base/kernel مع تخطي التحقق (DO_INSECURE). |
GET /api/core/firmware/info، /running، /upgradestatus | firmware API | استطلاع (مُستنتج): قوائم الحزم، سجل التحديث، خيارات المرآة. مخصص لهذا ACL. |
POST /api/core/firmware/reboot، /poweroff، /remove/<pkg> | إجراءات configd firmware | التوافر (مُستنتج): إعادة تشغيل/إيقاف/إزالة. مخصص لهذا ACL، وليس للبقايا. |
مُثبت مختبريًا مقابل مُستنتج: sanitize يحتفظ بـ | و signature_type none هما نجاح مختبري. pkg install المباشر لحزمة غير موقّعة مُستنتج. أداة، وليست OPNsense FreeBSD VM كاملة. لا حمولة حزمة غير موقّعة.
يتطلب: مستخدم مسجّل الدخول أو مفتاح API المحلي لذلك المستخدم مع page-system-firmware-manualupdate وبدون page-all. CSRF على POST الجلسة. ليس غير مُصادَق. ليس dashboard-only.
| Surface | Lab |
|---|---|
| Firmware غير مُصادَق | 401 |
| Dashboard-only | 403 |
مرآة التحكم https://pkg.opnsense.org | signature_type يبقى "fingerprints" |
| اجتياز اسم plugin | filter_pkgname |
| جلب Changelog | لا يزال opnsense-verify |
user-config-readonly على save() | throwReadOnly() |
| مرايا HTTP العادية بدون تخطي تحقق | MITM للنقل؛ لا تزال البصمات مطلوبة |
| XMLRPC firmware | سلاسل الإصدار فقط |
لا يوجد غير مُصادَق. لا يوجد dashboard-only. Changelog لا يزال موقّعًا.
cd lab
./run.sh
Loopback 127.0.0.1:18860. مشروع Compose opnsense-firmware-mirror-sed. الشاهد OPNSENSE-FIRMWARE-MIRROR-SED-WITNESS. السطر الأخير:
SUCCESS opnsense-firmware-mirror-sed sanitize-keeps-pipe=yes signature_type=none fingerprints-control=yes OPNSENSE-FIRMWARE-MIRROR-SED-WITNESS
مشغّل الجذر: python3 opnsense-firmware-mirror-sed-Abraxas-Labs.py.
شكل مرآة الهجوم المستخدم في المختبر (شاهد فقط، لا حزمة غير موقّعة):
https://example.invalid/|;/signature_type/s/"fingerprints"/"none"/;#
ارفض مرآة مخصصة ليست عنوان URL. أزل محارف sed الوصفية (|، ;، #، ") قبل opnsense-update -m / -n، أو مرّر عنوان URL كملف بحيث لا يراه sed كنص برنامج. أبقِ signature_type: "fingerprints" إلا إذا قام عنصر تحكم منفصل ومُدقَّق بإيقاف التحقق. لا تدع Firmware set يعيد كتابة البصمات إلى "none".
a842fe48c21288d11a422cb944678e8eb308becfFirmwareController.php setAction FILTER_SANITIZE_URLscripts/firmware/repos/OPNsense.php opnsense-update -sd -mOPNsense.conf.shadow.in stock signature_type: "fingerprints"opnsense-update mod_mirrorurl (s\|\| على سطر url:)