حضرت اجتماعًا لمجموعة عمل مكافحة البرامج الضارة والرسائل والموبايل (m3aawg.org) في بروكلين ، نيويورك. كنت أتوقع طقسًا أفضل للتجول في المدينة ، والاستمتاع بالمؤتمر ، ومجموعة واسعة من الطعام في المنطقة. كنت متأكدًا من وضوح السماء حتى أنني لم آخذ شيئًا من المطر معي. وقد أمطرت طوال الأسبوع. أجبرني ذلك على البقاء في غرفتي في الفندق مع خدمة WiFi مجانية وجهاز كمبيوتر محمول خاص بالعمل. قررت قضاء هذا الوقت في البحث عن Node.js والحزم ذات الصلة المتاحة على https://www.npmjs.com .
هناك الآلاف من الحزم من المستخدمين المتاحة للتنزيل والتثبيت في مشروعك. لقد بحثت في NPM عن أسماء الحزم الشائعة مثل الملف أو النسخ الاحتياطي أو التنزيل أو التحميل. أظهر لي البحث الأخير مشروعًا يسمى تحميل ملف jQuery من Blueimp. يبدو وصفه مثيرًا للاهتمام بما يكفي لتنزيله واستكشافه.
أداة تحميل الملفات لـ jQuery ، مع دعم اختيار الملفات المتعددة ، والسحب والإفلات ، ومؤشر التقدم ، والتحقق من الصورة ومعاينتها ، والصوت والفيديو. يدعم الطلبات عبر النطاقات ، آلية جزئية ومتجددة لتنزيل الملفات مع تغيير حجم الصور على جانب العميل. يعمل في أي نظام أساسي للخادم (PHP ، Python ، Ruby on Rails ، Java ، Node.js ، Go ، إلخ) ، والذي يدعم تحميل الملفات القياسي عبر نموذج HTML.
لقد بدأت في النظر إلى شفرة المصدر للحزمة وركزت على بعض ملفات PHP في دليل الخادم / php. كانت الملفات تسمى upload.php و UploadHandler.php. upload.php يسمى UploadHandler.php ، حيث يوجد رمز تحميل الملف الرئيسي. لقد لاحظت أيضًا أن الملفات تم تحميلها إلى الملفات / الدليل في جذر خادم الويب. لقد كتبت أمرًا بسيطًا باستخدام curl ونص PHP بدائي أكد لي أنه يمكنني تحميل الملف إلى الخادم ثم استخدامه لتنفيذ الأوامر على الخادم.
$ curl -F "files=@shell.php" http://example.com/jQuery-File-Upload-9.22.0/server/php/index.php
حيث يحتوي ملف shell.php على:
<?php $cmd=$_GET['cmd']; system($cmd);?>
أدى فتح صفحة في المستعرض باستخدام المعلمة cmd = id من خادم الاختبار إلى إرجاع معرف المستخدم الذي تم تشغيل عملية الخادم منه. افترضت أن هذه الثغرة الأمنية لم تمر دون أن يلاحظها أحد ، وأكد لي بحث سريع في Google أن المشاريع الأخرى التي استخدمت هذا الرمز أو مشتقاته تبين أنها عرضة للخطر. كان هناك أيضًا العديد من مقاطع الفيديو التي توضح كيفية مهاجمة حزم البرامج المماثلة.
أخطرت مؤلف تحميل ملف jQuery وبدأت توثيق ما وجدته لتعيين رقم CVE. في اليوم التالي ، أجابني مؤلف محرج إلى حد ما ، وطلب المزيد من المعلومات ، لأنه لم يتمكن من إعادة إنتاج الثغرة الأمنية في بيئته التجريبية.
بعد مقارنة تكوينات الاختبار عبر البريد الإلكتروني ، وجدنا أن مطوري Apache قد أوقفوا دعم ملفات htaccess منذ الإصدار 2.3.9. اتضح أن هذا تم القيام به لتحسين الأداء ، بحيث لا يحتاج الخادم إلى التحقق من هذا الملف في كل مرة يصل فيها إلى الدليل المقابل. علاوة على ذلك ، تم إجراء هذا التغيير أيضًا لمنع المستخدمين من تجاوز إعدادات الأمان التي تم تكوينها على الخادم.
وبالتالي ، كان لدى Apache نوايا جيدة عند تعطيل .htaccess ، ولكن تغييراتهم أيضًا تعرض بعض المطورين ومشاريعهم للخطر ، خاصة إذا كانوا يعتمدون على إعدادات الأمان التي تم إجراؤها في .htaccess.
في حالة هذه المكتبة ، من أجل معالجة هذا الموقف بشكل صحيح وإصلاح ثغرة تحميل ملف CVE-2018-9206 ، قام المطور بتغيير الرمز بحيث يسمح بتنزيل ملفات الصور فقط.
هذه المشكلة هي أكثر من مشروع.
من الجدير بالذكر أيضًا أنه بسبب التغييرات في Apache ، قد تكون بعض المشاريع المتبقية البالغ عددها 7800 عرضة لمشكلات تحميل الملفات.

لا تزال معظم هذه الشوكات تحمل الثغرة الأصلية في رمزها. في بعض الحالات ، تظل الثغرة حتى بعد أن قام المطور بتحرير الكود الأصلي من Blueimp لتضمينه في مشروعه ، بحيث تظل المشاريع عرضة لمثال هجومي مع اختلافات طفيفة.
هذا يعني أنه إذا تم استخدام أي من هذه المشاريع في الإنتاج ، فإنه معرض لضعف تنزيل الملف مع تنفيذه اللاحق. فتح فرص لسرقة البيانات من التطبيق ، وحقن البرمجيات الخبيثة ، والتشويه وغيرها من فرص الضرر.
لسوء الحظ ، لا توجد طريقة لتحديد عدد المشاريع المتشعبة بالضبط من jQuery File Upload الأصلي التي لا تزال مدعومة بنشاط وتطبيق التغييرات التي تم إجراؤها في المشروع الرئيسي. كما أنه من غير الممكن تحديد مكان استخدام المشاريع المتشعبة في الإنتاج ، إن وجدت. علاوة على ذلك ، كانت الإصدارات القديمة من المشروع عرضة أيضًا لمشاكل تنزيل الملفات ، حتى عام 2010.
الخلاصة
يعتمد الإنترنت على العديد من آليات الأمان للحفاظ على أنظمةنا وبياناتنا ومعاملاتنا آمنة ومأمونة. إذا اختفت إحدى هذه الآليات فجأة ، فقد تعرض سلامة المستخدمين والمطورين الذين يعتمدون عليها للخطر.
إنها فكرة جيدة للمطورين أن ينظروا إلى التغييرات في النظم والمكتبات التي يبنون عليها مشروعهم. في هذه المقالة ، لم تؤثر آلية الأمان التي أزالها Apache على تحميل ملف Jimpery الخاص بـ Blueimp فحسب ، بل أيضًا على جميع شوكاتها وفروعها. أثرت الثغرة على العديد من المشاريع التي تعتمد عليها ، بدءًا من تطبيقات الويب المستقلة إلى المكونات الإضافية لـ WordPress و CMS الأخرى.