
استغلال إثبات مفهوم لـ Next.js CVE-2025-66478، يوضح تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر إلغاء التسلسل غير الآمن وتلوث النموذج الأولي في Server Actions. يتضمن تطبيقًا معرضًا للخطر وسكربت استغلال بلغة Python لأغراض البحث الأمني.
يحتوي هذا المستودع على إثبات مفهوم (PoC) لإعادة إنتاج ثغرة Next.js CVE-2025-66478 والبحث فيها. يتكون من تطبيق Next.js معرّض للثغرة وسكربت استغلال مكتوب بلغة Python لاختبار الثغرة.
هذه ثغرة تنفيذ كود برمجي عن بُعد (Remote Code Execution - RCE) تحدث أثناء معالجة Server Actions في Next.js.
أبرز النقاط:
__proto__.| العنصر | الوصف |
|---|
| معرّف CVE | CVE-2025-66478 |
| النوع | تنفيذ كود برمجي عن بُعد (RCE) |
| السبب الجذري | إلغاء تسلسل غير آمن في بروتوكول RSC Flight |
| الخطورة (CVSS) | 10.0 (حرجة) |
| التأثير | تنفيذ أوامر نظام عشوائية على الخادم |
__proto__.Object.prototype.then في جميع الكائنات. يخطئ منطق Next.js في تحديد هذه الكائنات على أنها وعود (Promises/Thenables).await هذا «الوعد المزوّر»، يتم تنفيذ كود JavaScript الخبيث المحقون في طريقة then (مثل child_process.execSync).sequenceDiagram
participant Attacker
participant Server as Next.js Server
Attacker->>Server: POST / (JSON with "__proto__": {"then": ...})
Note right of Server: JSON Parsing Pollutes Object.prototype
Server->>Server: Application Logic encounters an Object
rect rgb(200, 150, 150)
Note right of Server: "Thenable" Check Gadget
Server->>Server: Checks: typeof obj.then === 'function'?
Server-->>Server: YES (due to pollution)
end
Server->>Server: Await/Execute malicious .then()
Note right of Server: Malicious JS Code Runs (RCE)
Server-->>Attacker: Response (Action Redirect / Error info)وبالتالي، عندما يعالج الخادم هذا الوعد المتلاعب به، فإنه ينفّذ كود JavaScript الذي حقنه المهاجم، مما قد يؤدي إلى تنفيذ أوامر على النظام. الملف main.py المرفق هو كود مثال يعيد إنتاج سيناريو الهجوم هذا.
تؤثر هذه الثغرة على تطبيقات Next.js التي تستخدم App Router.
الإصدارات المُصحَّحة:
next.js/: كود مثال لتطبيق ويب Next.js معرّض للثغرة.exploit/: سكربت تنفيذ الاستغلال المكتوب بلغة Python (main.py).أولًا، تحتاج إلى تشغيل خادم Next.js المستهدف.
انتقل إلى مجلد next.js:
cd next.js
ثبّت التبعيات:
npm install
# You can also use yarn or pnpm.
شغّل خادم التطوير:
npm run dev
تحقق من إمكانية الوصول إلى http://localhost:3000 عبر متصفحك.
يمكنك الآن اختبار الثغرة باستخدام سكربت Python.
انتقل إلى مجلد exploit من جذر المشروع:
cd exploit
(اختياري) يُنصح باستخدام بيئة افتراضية:
python3 -m venv venv
source venv/bin/activate # For Windows: venv\Scripts\activate
ثبّت المكتبات اللازمة:
مكتبة requests مطلوبة.
pip install requests
شغّل السكربت:
python main.py
بشكل افتراضي، يستهدف العنوان المحلي (http://localhost:3000). لاختبار عنوان مختلف، استخدم خيار --url:
python main.py --url http://target-ip:3000
هذا الكود مُقدَّم لأغراض البحث الأمني والتعليم فقط. استخدام هذه الأداة ضد الأنظمة أو الشبكات دون إذن مسبق غير قانوني، والمستخدم وحده يتحمل المسؤولية عن أي مشاكل تنشأ عن هذا الاستخدام.