
OPNsense 26.7.6 - عالي - عن بُعد - صلاحية متبقية - UidField uid 0
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-uidfield-system-uid0
التصنيف: صلاحية متبقية الوصول: عن بُعد
نواة OPNsense 26.7.6 (a842fe48) - opnsense.org
تفويض page-system-usermanager بخطوتين scope=system ثم uid=0. تقوم UidField::setValue بالتخصيص التلقائي 2000+ فقط عندما لا يكون النطاق system. تُطبّق setNodes قيمة uid قبل scope، لذا لا يمكن لعملية إضافة واحدة أن تضع 0. لكن POST الثاني يستطيع ذلك. ثم auth sync user مع pw useradd -o -u 0 مع المجلد الرئيسي /root والمجموعة wheel. تصل المفاتيح المصرّح بها إلى /root/.ssh/authorized_keys. الصلاحية هي System: Access: Management، وليست page-all.
| المعرّف | لا يوجد CVE بعد |
| التصنيف | صلاحية متبقية |
| الوصول | عن بُعد (WebGUI مُصادَق عليه / مفتاح Local API) |
| CWE | CWE-269 / CWE-284 |
| CVSS | مرتفع: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| المنتج | OPNsense core (Deciso B.V.) |
| المتأثر | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) UidField / user-manager |
| المصادقة | جلسة WebGUI أو مفتاح Local API مع page-system-usermanager |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
ثبّتُّ الوسم 26.7.6 "Xenial Xenops". المختبر عبارة عن أداة PHP للنسخة المثبّتة من UidField::setValue بالإضافة إلى local_user_set، بهوية loopback 127.0.0.1:18810. أرجعت stable/26.7 كتابة UID-0 عبر ea4f01fe في 2026-10-09. هذا الإرجاع ليس هذه النسخة المثبّتة. لا يوجد GHSA.
| الطريقة | المخرج | الصلاحية |
|---|---|---|
إضافة بخطوتين scope=system ثم تعيين uid=0 ثم auth sync user | تثبيت UidField::setValue ثم استدعاء pw useradd -o -u 0 (auth.inc:345-397) | السلامة (مُثبتة مختبريًا): UID 0 يونيكس ثانٍ، المجلد الرئيسي /root، المجموعة wheel. المختبر: after-add=2000 after-set=0 pw-o-u0=yes. |
| نفس التعيين + authorizedkeys | file_put_contents /root/.ssh/authorized_keys (auth.inc:407-416) | السلامة (مُثبتة مختبريًا): شاهد في /root/.ssh/authorized_keys. |
SSH بهذا الاسم إذا كان sshd مُفعّلًا (AllowGroups wheel؛ PermitRootLogin لا ينطبق على اسم مستخدم غير root) | sshd | استطلاع + سلامة (مُستنتج): تسجيل الدخول بالاسم الجديد في wheel، قراءة /root. لم تُشغّل الأداة sshd. |
نفس طلبات POST مع scope=user uid=0 | تخصيص UidField التلقائي 2000+ | سلبي (مُثبت مختبريًا): يبقى uid عند 2000. scope-user-uid0-ignored=yes. |
set على uuid الافتراضي root uid=80 | pw usermod -u 80 | السلامة + التوافر (مُستنتج): نقل root الافتراضي بعيدًا عن UID 0. لم تُنفّذ الأداة usermod على root. |
set على uuid الخاص بـ root name=hax + scope=user | تخطّي فحص إعادة التسمية؛ auth sync user على الاسم الجديد | السلامة (مُستنتج): إعادة تسمية مستخدم نظام كان فحص 26.7.6 يهدف إلى منعها. |
مُثبت مختبريًا مقابل مُستنتج: UID 0 بخطوتين، pw useradd -o -u 0، مسار المفاتيح، وتجاهل scope=user كلها نجاح مختبري. قبول sshd الحيّ و usermod/إعادة تسمية root الافتراضي مُستنتجة. الأداة، وليست جهاز OPNsense افتراضي كامل.
يتطلب: جلسة WebGUI أو مفتاح Local API مع page-system-usermanager. CSRF على مسار الجلسة. ليس page-all. config.xml.sample الافتراضي يمنح page-all فقط للمجموعة admins.
| السطح | المختبر |
|---|---|
POST /api/auth/user/* بدون page-system-usermanager | ACL مغلق |
user-config-readonly | save() لا يزال throwReadOnly() |
| رفع CSV | يزيل uid/scope |
| CVE-2026-44194 email-as-shell | mwexecf %s + email regex |
| صفحة كلمة المرور | مرتبطة بالجلسة |
page-all ينفّذ نفس POST | ميزة changelog على هذه النسخة المثبّتة |
| بدون مصادقة | مغلق |
su يونيكس مع * في master.passwd | تجزئة GUI تبقى في config.xml إلا إذا فرضها المُثبّت |
لا يوجد بدون مصادقة. لا حاجة إلى page-all. قدّمت 26.7.6 تعيين UID المختار لمستخدمي نطاق system كميزة إدارية. المسار غير المتطابق هو user-manager مفوّض بدون page-all.
cd lab
./run.sh
Loopback 127.0.0.1:18810. مشروع Compose opnsense-uidfield-system-uid0. الصورة من النسخة المثبّتة 26.7.6. الشاهد OPNSENSE-UIDFIELD-SYSTEM-UID0-WITNESS. السطر الأخير:
SUCCESS opnsense-uidfield-system-uid0 two-step-uid=0 scope-user-uid0-ignored=yes pw-o-u0=yes keys=/root/.ssh/authorized_keys OPNSENSE-UIDFIELD-SYSTEM-UID0-WITNESS
ارفض UID 0 (و UIDs الخدمات المتعارضة) إلا إذا كان المستدعي مسؤولًا كاملًا. طبّق scope قبل uid في setNodes، أو ارفض POST الذي يقلب كليهما. أبقِ فحص إعادة التسمية الخاص بـ 26.7.6 على النطاق قبل setNodes، وليس النطاق المُرسَل. أرجعت ea4f01fe لاحقًا كتابة UID-0 على stable/26.7؛ ذلك الـ commit ليس هذه النسخة المثبّتة.
a842fe48c21288d11a422cb944678e8eb308becfUidField.phpauth.inc local_user_setea4f01fe على stable/26.7