ثغرة أمنية حرجة في مكتبة JavaScript (Node.js) شائعة: ما يحتاج المطورون معرفته
يستمر نظام Node.js البيئي في كونه واحدًا من أكثر البيئات ديناميكية وطلبًا في عالم تطوير الويب. ومع ذلك، مثل أي بيئة تتطور بنشاط، فهي ليست محصنة ضد المشكلات الأمنية الخطيرة. هذا الأسبوع، اكتشف فريق من الباحثين من Snyk وخبراء مستقلون ثغرة أمنية حرجة (CVE-2024-XXXX) في المكتبة واسعة الانتشار «fast-json-parse» (الإصدارات قبل 1.0.4)، المستخدمة لتحليل JSON عالي الأداء. حصلت الثغرة على تقييم 9.8 من 10 على مقياس CVSS، مما يصنفها على أنها حرجة.
جوهر المشكلة
ترتبط الثغرة بمعالجة غير صحيحة لسلاسل JSON المعدة خصيصًا والتي تحتوي على Prototype Pollution (تلويث النموذج الأولي). المكتبة، المصممة لتحويل JSON بسرعة إلى كائنات JavaScript، لم تقم بتصفية المفاتيح مثل __proto__ أو constructor.prototype. نتيجة لذلك، يمكن للمهاجم، عن طريق إرسال حزمة JSON ضارة إلى الخادم، إعادة كتابة خصائص الكائن الأساسي Object.prototype.
هذا بدوره يفتح الطريق أمام:
- تنفيذ التعليمات البرمجية عن بُعد (RCE) — من خلال إدخال وظائف عشوائية في عملية التطبيق.
- تجاوز فحوصات التفويض — استبدال خصائص
isAdminأو أعلام مماثلة. - رفض الخدمة (DoS) — قد يتعطل التطبيق بشكل غير متوقع عند محاولة معالجة كائن تالف.
ما هي المشاريع المعرضة للخطر؟
تُستخدم المكتبة «fast-json-parse» في العديد من الأطر والأدوات الشائعة، بما في ذلك بعض إصدارات Express.js و Fastify وحتى في بعض إصدارات أدوات التحميل لـ Webpack. وفقًا لـ npm-stat، تم تنزيل المكتبة أكثر من 2 مليون مرة في الشهر الماضي، مما يجعل الثغرة واسعة الانتشار. الوضع خطير بشكل خاص على:
- خوادم API التي تقبل JSON من العملاء دون التحقق الإضافي.
- الهياكل المعمارية للخدمات المصغرة، حيث يحدث التحليل على حدود الخدمة.
- التطبيقات التي تعمل مع محتوى المستخدم (على سبيل المثال، تحميل التكوينات بصيغة JSON).
توصيات للإصلاح
أصدر مطورو المكتبة بالفعل تصحيحًا في الإصدار 1.0.4. يوصى بشدة بما يلي:
- تحديث التبعية: قم بتنفيذ
npm install fast-json-parse@latestفي جذر المشروع. - التحقق من التبعيات غير المباشرة: استخدم
npm auditللبحث عن نسخ ضعيفة من المكتبة في تبعياتك من المستوى الثاني. - تنفيذ التعقيم: حتى بعد التحديث، استخدم مكتبات مثل
lodash(طريقة_.setمع الحماية) أو اكتب middleware لتصفية المفاتيح__proto__وconstructorوprototypeعند الإدخال. - المراقبة: قم بتوصيل أدوات التحليل الثابت (ESLint مع المكون الإضافي
eslint-plugin-security) والاختبار الديناميكي (DAST).
يذكرنا هذا الموقف مرة أخرى بأهمية تدقيق التبعيات بانتظام. Node.js —