
عرض تجريبي لاستغلال CVE-2025-66478 كإثبات للمفهوم باستخدام Node.js
يحتوي هذا المستودع على كود إثبات المفهوم (PoC) لإعادة إنتاج ثغرة CVE-2025-66478 في Next.js والبحث فيها. ويتضمن تطبيق Next.js ضعيفًا وسكربت استغلال مكتوبًا بلغة Node.js لاختبار الثغرة.
English · 中文
هذه ثغرة تنفيذ كود عن بُعد (RCE) تحدث أثناء معالجة Server Actions في Next.js.
النقاط الرئيسية:
__proto__.| البند | الوصف |
|---|---|
| CVE ID | CVE-2025-66478 |
| النوع | تنفيذ كود عن بُعد (RCE) |
| السبب الجذري | إلغاء تسلسل غير آمن في بروتوكول Flight الخاص بـ RSC |
| الشدة (CVSS) | 10.0 (حرجة) |
| التأثير | تنفيذ أوامر نظام عشوائية على الخادم |
__proto__.Object.prototype.then في جميع الكائنات. يحدد منطق Next.js هذه الكائنات بشكل خاطئ على أنها وعود (Promises/Thenables).await على هذا "الوعد المزيّف"، يتم تنفيذ كود JavaScript الخبيث المحقون في دالة then (مثل child_process.execSync).sequenceDiagram
participant Attacker as 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 exploitation chain
Server->>Server: Check: 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 message)
لذلك، عندما يعالج الخادم هذا Promise المتلاعب به، فإنه ينفذ كود JavaScript المحقون من قبل المهاجم، مما قد يؤدي إلى تنفيذ أوامر على النظام. الملف main.mjs المرفق هو مثال على كود لإعادة إنتاج سيناريو الهجوم هذا.
تؤثر هذه الثغرة على تطبيقات Next.js التي تستخدم App Router.
الإصدارات المصححة:
app/page.tsx: كود نموذجي للتطبيق الضعيف.exploit.mjs: سكربت تنفيذ الاستغلال المكتوب بلغة Node.js.# You can also use yarn or npm.
pnpm install
pnpm dev
تحقق من أنه يمكنك الوصول إلى http://localhost:3000 عبر متصفحك.
pnpm exploit
بشكل افتراضي، يستهدف العنوان المحلي (http://localhost:3000). لاختبار عنوان مختلف، استخدم الخيار --url:
pnpm exploit --url http://target-ip:3000
هذا الكود مخصص لأغراض البحث الأمني والتعليم فقط. استخدام هذه الأداة ضد الأنظمة أو الشبكات دون إذن مسبق يعد غير قانوني، ويتحمل المستخدمون المسؤولية الكاملة عن أي مشكلات تنشأ عن هذا الاستخدام.