
إثبات مفهوم لاستغلال CVE-2026-21710، وهو خلل في معالجة طلبات HTTP في Node.js يتسبب في خطأ TypeError غير مُلتقط عبر ترويسة __proto__، مما يؤدي إلى رفض الخدمة.
| الحقل | القيمة |
|---|
| معرف CVE | CVE-2026-21710 |
| تاريخ النشر | 2026-03-30 |
| CVSS v3.1 | 7.5 عالية (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| CWE | CWE-770 — تخصيص الموارد دون حدود أو تقييد |
| الإصدارات المتأثرة | Node.js 20.x, 22.x, 24.x, 25.x |
| تم الإصلاح في | إصدارات الأمان لشهر مارس 2026 |
يوجد خلل في معالجة طلبات HTTP في Node.js يؤدي إلى حدوث TypeError غير مُلتقط عند استلام طلب يحتوي على ترويسة باسم __proto__ وقام التطبيق بالوصول إلى req.headersDistinct.
dest["__proto__"] يُقيَّم إلى Object.prototype بدلاً من undefined، مما يؤدي إلى استدعاء .push() على كائن ليس مصفوفة. يتم إلقاء هذا الاستثناء بشكل متزامن داخل مُلحق خاصية (property getter) ولا يمكن اعتراضه بواسطة مستمعي حدث error — ولا يمكن التعامل معه دون تغليف كل وصول إلى req.headersDistinct داخل try/catch.
يقوم مُلحق headersDistinct بتجميع قيم الترويسات في كائن عادي:
const dest = {};
// ...
dest[name] = dest[name] || [];
dest[name].push(value);
عندما يكون name === "__proto__":
dest["__proto__"] يُرجع Object.prototype (قيمة صحيحة، وليست undefined)|| [].push(value) على Object.prototype → TypeError: dest[name].push is not a function| الملف | الوصف |
|---|---|
server.js | خادم HTTP ضعيف (يصل إلى req.headersDistinct مباشرة) |
poc.js | إثبات المفهوم (Proof-of-concept) للاستغلال |
للبحث الأمني المصرح به / الإفصاح المسؤول فقط.
node server.js
# Listening on http://127.0.0.1:3000
node poc.js
المخرجات المتوقعة:
__proto__؛ ينهار الخادم مع TypeError غير مُلتقط.