
Python PoC ومختبر Docker لـ CVE-2026-61500: يستعيد حالة PRNG الخاصة بـ Rejetto HFS V8 لتزوير ملف تعريف جلسة المسؤول وتحقيق RCE عبر server_code.
CVE-2026-61500 هو ثغرة تزوير جلسة غير مُصادَق عليها في Rejetto
HFS 3.0.0 حتى 3.2.0. أنشأ HFS مفتاح توقيع ملف تعريف ارتباط جلسة Koa الخاص به باستخدام
JavaScript Math.random() وكشف مخرجات من نفس مولّد الأرقام العشوائية الزائفة V8 PRNG في
مصافحة تسجيل الدخول SRP غير المُصادَق عليها. يمكن للمهاجم إعادة بناء حالة PRNG،
واستعادة مفتاح التوقيع، وتزوير جلسة مسؤول، واستخدام ميزة إعدادات server_code الموثّقة لتنفيذ
JavaScript على جانب الخادم.
يحتوي هذا المستودع على إثبات مفهوم بلغة Python ومقارنة Docker قابلة للتخلص منها باستخدام صورتي HFS 3.2.0 و3.2.1 الرسميتين. نسخة النشر مقصورة عمدًا على أهداف HTTP على واجهة الاسترجاع المحلية (loopback).
| البيان | الحالة |
|---|---|
| استعادة حالة V8 xorshift128+ من استجابات تسجيل الدخول غير المُصادَق عليها | مؤكَّد |
| استعادة مفتاح توقيع ملف تعريف ارتباط HFS النشط | مؤكَّد |
| تزوير جلسة مقبولة كمسؤول HFS | مؤكَّد |
تنفيذ علامة server_code حميدة في HFS 3.2.0 الرسمي | مؤكَّد |
| استقبال صدفة عكسية بصلاحيات root داخل شبكة Compose المعزولة | مؤكَّد |
| التوقف قبل تزوير الجلسة على HFS 3.2.1 الرسمي | مؤكَّد |
| الاستهداف أو الاستمرارية على مستوى الإنترنت | غير مُتاح أو مُدَّعى |
loginSrp1 للحساب المعروف admin.
كل استجابة مصابة تضع loggingIn.sid رقميًا وملف تعريف ارتباط الجلسة الموقّع الخاص به في ترويسات Set-Cookie.randomId(30). يأخذ PoC
في الحسبان تقريب أقصر سلسلة في V8 ويتحقق من المرشحين مقابل
HMAC hfs_http.sig مُلاحَظ، والذي يحدد أيضًا إزاحة بدء التشغيل.username: admin، ثم استدعِ
get_config لإثبات أن ملف تعريف الارتباط المزوّر يمتلك صلاحيات المسؤول.set_config بوحدة server_code صغيرة. الحمولة الافتراضية
تكتب علامة حميدة في /data؛ --command متاح فقط
لمختبر Docker على واجهة الاسترجاع المحلية.هذه سلسلة HTTP من نوع الصندوق الأسود: لا يقرأ PoC الملفات أو الذاكرة أو متغيرات البيئة أو حالة العملية من الهدف. تُستخدم معرفة الشيفرة المصدرية لنمذجة الخوارزمية المصابة.
59472e534bf7e056d708382d02935c2eaf956927.يستبدل الإصلاح مفتاح التوقيع بـ 32 بايت من randomBytes() في Node.js و
يستبدل معرّف تسجيل الدخول الرقمي المكشوف بـ randomUUID(). توفير
قيمة COOKIE_SIGN_KEYS قوية وصريحة يخفف من التنبؤ بمفتاح التوقيع، لكن
يبقى الترقية هو العلاج الموصى به.
rejetto/hfs:v3.2.0، البصمة
sha256:d6765e93b68de222583be7788afad699695fd08aa2f56377337f5139779e0746.rejetto/hfs:v3.2.1، البصمة
sha256:61db4da1f494df254aa7f48889c676b424b413e45b7b92cf4276f4b8e632aaec.python:3.13-alpine، البصمة
sha256:1a63a53928ce53d2b0baf08092a703f4840ac5dfbd61fd48802dbf48e08c801e.ترتبط خدمتا HFS فقط بواجهة الاسترجاع المحلية للمضيف؛ ولا ينشر الاستدعاء أي منفذ.
ينشئ المختبر مسؤولًا اصطناعيًا
لأن loginSrp1 يجب استدعاؤه لاسم مستخدم موجود؛ كلمة المرور
غير معروفة ولا يستخدمها الاستغلال.
المتطلبات هي Docker مع Compose، وPython 3.10 أو أحدث، وcurl.
./verify.sh
يزيل المدقّق فقط lab/runtime/vulnerable وlab/runtime/fixed،
ويشغّل كلتا الصورتين المثبّتتين بالبصمة، ويشغّل الضوابط الإيجابية والسلبية، و
يوقف الحاويات افتراضيًا. استخدم KEEP_LAB=1 ./verify.sh لترك المختبر
قيد التشغيل للفحص.
مع الاحتفاظ بالمختبر، يكون الاستدعاء المباشر للعلامة الحميدة كما يلي:
python3 cve-2026-61500-poc.py \
--target http://127.0.0.1:28182 \
--marker cve-2026-61500-rce-marker.txt
لإثبات تنفيذ الأوامر داخل حاوية المختبر المملوكة:
python3 cve-2026-61500-poc.py \
--target http://127.0.0.1:28182 \
--command 'id > /data/cve-command-output.txt'
يُرفض أي اسم مضيف غير تابع لواجهة الاسترجاع المحلية، أو هدف HTTPS، أو عنوان IP بعيد بواسطة
التحقق من الوسائط. يعدّل الاستغلال server_code في HFS؛ استخدم فقط المختبر
القابل للتخلص منه أو نظامًا لديك تفويض صريح بشأنه.
يذهب العرض التوضيحي المسجَّل خطوة أبعد: يشغّل demo.sh خدمة
callback غير المكشوفة على شبكة Compose ويستخدم --command لتوصيل صدفة Bash
عكسية بها. يرسل الاستدعاء فقط id وuname -a وpwd و
exit، ويسجّل النص تحت lab/runtime/ المتجاهَل، ثم يُغلق. لا
يُربط أي منفذ استدعاء بالمضيف.
استعاد التشغيل الحقيقي بتاريخ 2026-09-26 حالة PRNG واحدة ومفتاح التوقيع الخاص بها، وتلقى
HTTP 200 لطلب get_config إداري مزوّر، وثبّت حمولة العلامة،
ولاحظ CVE_2026_61500_RCE_CONFIRMED في الحاوية المصابة. أنتج ضابط منفصل
--command 'id > /data/cve-command-output.txt'
uid=0(root) gid=0(root) groups=0(root) داخل تلك الحاوية الرسمية. أعادت
الصدفة العكسية المسجَّلة الخاصة بـ Docker فقط نفس هوية root
ودليل العمل /data بشكل مستقل. مقابل
3.2.1، احتوت أول استجابة تسجيل دخول على UUID غير شفاف وخرج PoC بحالة
3 قبل محاولة تزوير الجلسة. انظر
docs/example-output.txt و
docs/e2e-results.json.
في 2026-09-26، أُجريت عمليات بحث دقيقة عن CVE والاستغلال/PoC مقابل SearchSploit (فهرس Exploit-DB المحلي)، ونتائج الويب المفهرسة في GitHub، وPacket Storm، وExploit-DB، والويب العام. لم يُحدَّد أي استغلال عام فعّال في تلك المرحلة؛ وجدت النتائج بيانات وصفية لـ CVE/الإرشادات وصفحات تتبع الاستغلال فقط. هذه نتيجة مؤرخة وبأفضل جهد ممكن، وليست ادعاءً بأنه لا يمكن وجود استغلال في مكان آخر أو ظهوره لاحقًا.
<[email protected]>
(Twitter: @aramosf).لأغراض البحث الأمني المصرّح به، والتحقق الدفاعي، والتعليم فقط. أنت مسؤول عن الحصول على الإذن والامتثال للقانون المعمول به.