
OPNsense 26.7.6 - عالي - عن بُعد - حقن سطر التكوين - محمّل المعاملات القابلة للضبط
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
المقال التقني: https://abraxaslabs.tech/research/opnsense-tunables-loader
الفئة: حقن سطر في ملف الإعدادات الوصول: عن بُعد
نواة OPNsense 26.7.6 (a842fe48) - opnsense.org
لا يزال مسار System: Advanced: Tunables يُدرج الاسم/القيمة داخل /boot/loader.conf. وهو أثر متبقٍ شقيق لـ GHSA-fq94. حقول tunable / value في Tunables.xml هي TextField مجرّدة (الأسطر الجديدة مفعّلة). وتكتب system_login_configure() السطر {$param}="{$value}". كما أن إعادة تهيئة Tunables تعيد تشغيل login. أما sysctl(8) الحيّ فيمر عبر shell_safe مع مرشّح OID، لذا فإن تلك المرحلة ليست حقنًا عبر الصدفة. المتبقي هو توجيهات loader إضافية عند الإقلاع التالي. الصلاحية المطلوبة هي page-system-advanced-sysctl وليست page-all.
تبقى حزمة GitHub هذه خاصة حتى الإفصاح المنسّق.
| المعرّف | لا يوجد CVE بعد |
| الفئة | حقن سطر في ملف الإعدادات |
| الوصول | عن بُعد (WebGUI / API بعد المصادقة) |
| CWE | CWE-93 |
| CVSS | مرتفع: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| المنتج | OPNsense core |
| المتأثر | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| المصادقة | جلسة WebGUI أو مفتاح API يملك page-system-advanced-sysctl |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | compose exec gadget (خانة البحث 18850) |
ثبّتتُ الوسم 26.7.6 عند الالتزام a842fe48. المختبر عبارة عن gadget بلغة PHP يحاكي إدراج system_login_configure() المثبّت. مشروع Compose باسم opnsense-tunables-loader. خانة البحث 18850 ضمن عائلة gadgets 18800-18860؛ ويستخدم ملف compose هذا الأمر docker compose exec php، وليس ربط HTTP منشورًا.
| الطريقة | نقطة الوصول | الصلاحية |
|---|---|---|
قيمة Tunables تحتوي CR/LF (hw.usb.no_boot_wait مع "\n# witness) | تثبيت سطر إضافي عبر system_login_configure() في /boot/loader.conf | السلامة (مُثبتة مختبريًا): سطر إضافي # OPNSENSE-TUNABLES-LOADER-WITNESS في سطر مستقل بعد إسناد مغلق. المختبر: newline-extra-line=yes. |
قيمة نظيفة 1 | الكاتب نفسه | نتيجة سلبية (مُثبتة مختبريًا): سطر إسناد واحد، دون أي أثر. المختبر: clean-value-single-line=yes. |
| نفس أسطر loader الإضافية عند الإقلاع التالي | init_path / module_path / *_load / vfs.root.mountfrom / console في loader | السلامة (مُستنتجة): يحترم loader عند الإقلاع التالي مفاتيح المهاجم. لم يُعَد التشغيل في هذا الـ gadget. |
أسطر loader غير صالحة / vfs.root.mountfrom خاطئ | /boot/loader.conf | التوافر (مُستنتج): فشل الإقلاع أو جذر خاطئ. |
POST /api/core/tunables/searchItem | واجهة tunables API | استطلاع (مُستنتج): سرد الـ tunables، بما في ذلك الحالي/الافتراضي/النوع. مقصود لهذه الـ ACL. |
sysctl -w الحيّ لـ OID صالح | set_sysctl + مرشّح OID | مهمة الصفحة المقصودة. أسطر loader الإضافية هي المتبقي. |
المُثبت مختبريًا مقابل المُستنتج: سطر loader الإضافي عبر السطر الجديد والقيمة النظيفة أحادية السطر هما نجاح مختبري. أما تطبيق loader عند الإقلاع التالي فهو مُستنتج. هذا gadget وليس جهاز OPNsense FreeBSD VM كاملًا.
المتطلبات: مستخدم مسجّل الدخول أو مفتاح API المحلي الخاص بهذا المستخدم يملك page-system-advanced-sysctl وبدون page-all. طلب POST إلى /api/core/tunables/*. حماية CSRF على POST الخاص بالجلسة. إعادة التهيئة تعيد تشغيل login؛ كما تستدعي rc.reload_all والإقلاع أيضًا system_login_configure.
| السطح | المختبر |
|---|---|
| حقن shell في sysctl المباشر | shell_safe مع مرشّح OID |
| قيمة نظيفة | سطر إسناد واحد |
| بدون مصادقة | 401 |
مستخدم بدون page-system-advanced-sysctl | 403 |
user-config-readonly | save() يرمي استثناءً |
page-all إعدادات المسؤول القابلة للضبط التي تعيّن OID حقيقيًا | مقصود |
| حقول نص GUI المُرقّعة في GHSA-fq94 | أحواض مختلفة؛ لم يُذكر هذا الحقل |
لا بدون مصادقة. لا shell sysctl مباشر. لا Diagnostics: Command.
cd lab
./run.sh
إنشاء مشروع opnsense-tunables-loader. الشاهد OPNSENSE-TUNABLES-LOADER-WITNESS. السطر الأخير:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
المشغّل الجذري: python3 opnsense-tunables-loader-Abraxas-Labs.py.
إزالة CR/LF و" من اسم وقيمة المتغيّرات القابلة للضبط (tunables)، من الفئة نفسها مثل GHSA-fq94. كتابة الاسم كقناع OID، وليس كـTextField مجرّد. الاقتباس باستخدام دالة مساعدة لا يمكنها إغلاق الإسناد. لا تكتب متغيّرًا قابلًا للضبط في /boot/loader.conf ما لم يكن مفتاح loader معروفًا.
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc استيفاء system_login_configure لـ loader.confTunables.xml اسم/قيمة TextField مجرّد