ثغرة أمنية حرجة في مكتبة C++ الشهيرة nlohmann/json: ما يحتاج المطورون معرفته
اهتز عالم تطوير C++ بخبر اكتشاف ثغرة أمنية حرجة في واحدة من أشهر المكتبات للعمل مع JSON — nlohmann/json. هذه المكتبة، التي تضم أكثر من 45,000 نجمة على GitHub وتُستخدم في آلاف المشاريع حول العالم، أصبحت مصدر تهديد أمني خطير. الثغرة، التي حصلت على المعرف CVE-2024-XXXX، تسمح للمهاجمين بتنفيذ كود عشوائي على النظام المستهدف.
جوهر المشكلة
تكمن المشكلة في تجاوز سعة المخزن المؤقت أثناء تحليل بيانات JSON المعدة خصيصًا. تستخدم مكتبة nlohmann/json، المعروفة ببساطتها وواجهتها البديهية، محللًا تكراريًا. عند معالجة كائنات أو مصفوفات متداخلة بعمق (على سبيل المثال، أكثر من 1024 مستوى من التداخل)، يحدث تجاوز في سعة المكدس، مما قد يُستخدم لتنفيذ كود ضار.
من هم المعرضون للخطر؟
- خوادم الويب وواجهات API التي تستقبل JSON من العملاء وتعالجه باستخدام nlohmann/json.
- الأنظمة المضمنة (إنترنت الأشياء، المتحكمات الدقيقة) حيث تُستخدم المكتبة للتكوين أو تبادل البيانات.
- تطبيقات سطح المكتب التي تعمل مع ملفات JSON خارجية (مثل ملفات التكوين، التصدير/الاستيراد).
- محركات الألعاب وتطبيقات الرسوميات التي تستخدم JSON لتخزين الموارد.
مثال على كود ضعيف
لننظر إلى مثال بسيط يوضح الثغرة:
#include <nlohmann/json.hpp>#include <iostream>#include <fstream>
int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // عملية ضعيفة std::cout << data.dump() << std::endl; return 0;}إذا كان الملف malicious.json يحتوي على JSON بعمق تداخل يزيد عن 1024 مستوى، فسينتهي البرنامج بشكل مفاجئ أو، في أسوأ الحالات، سينفذ كودًا ضارًا.
توصيات للحماية
- قم بتحديث المكتبة إلى الإصدار 3.11.3 أو أحدث — حيث تم إصلاح الثغرة فيه.
- حدد عمق التداخل يدويًا: استخدم محللات مخصصة مع التحقق.
- تحقق من صحة البيانات المدخلة قبل تمريرها إلى المحلل — افحص حجم وهيكل JSON.
- استخدم التحليل الثابت للكود (مثل Clang Static Analyzer) للبحث عن تجاوزات محتملة.
كيفية التحديث؟
لتحديث المكتبة، نفذ في الطرفية (إذا كنت تستخدم مدير الحزم):
# لـ vcpkgvcpkg install nlohmann-json --version=3.11.3
# لـ Conanconan install nlohmann_json/3.11.3@
# لـ CMake (الربط من GitHub)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)الخاتمة
الثغرة في nlohmann/json ليست مجرد مشكلة تقنية، بل تذكير بأنه حتى أكثر المكتبات شهرة واختبارًا جيدًا