برمجياتقراءة دقيقتين

ملفات إعداد curl كانت لغة برمجة كاملة بين النسختين 8.12 و8.16 نتيجة اجتماع خاصيتين عاديتين

نشر Nicolas Seriot تحليلًا يبيّن أن ملفات إعداد أداة curl كانت لغة برمجة كاملة، من النسخة 8.12 الصادرة في فبراير 2025 حتى النسخة 8.16. ويؤكد الكاتب أن المسألة ليست ثغرة، وأن أثرها الأمني منعدم، لكن آليتها تتكرر في أنظمة كثيرة.

والقصة كلها خاصيتان عاديتان. الأولى متغيرات داخل ملف الإعداد، تُكتب قيمتها مرة ثم تُستخدم بعد ذلك. والثانية إمكانية أخذ جزء من القيمة بالبايت، كالبايت الأول وحده أو كل شيء عدا الأول. ثم جاء عنصر ثالث أكمل الصورة: ملف الإعداد يستطيع تحميل ملف إعداد آخر، ويمكن حساب اسمه من متغير.

وبهذا اجتمعت الأدوات الثلاث لأي عملية حسابية. فهناك عدّاد يزيد بإضافة حرف وينقص بحذف الحرف الأول. وهناك تفرّع، باختيار اسم الملف الذي سيُحمَّل بحسب القيمة. وهناك توقف، حين لا يحمّل الملف شيئًا بعده. وقدّم الكاتب مثالًا فعليًا يجمع 2 و3 بأربعة ملفات إعداد، فتخرج النتيجة خمسة أحرف.

وصدر الإصلاح في النسخة 8.17.0 في نوفمبر 2025، وهو حد أقصى من 5 مستويات تحميل متداخلة. والسبب المكتوب في الـ pull request رقم 19168 هو منع ملف من تحميل نفسه إلى ما لا نهاية. ولمن يستخدم نسخة حديثة، صارت المسألة تاريخية.

ولم يقصد أحد أن يصنع لغة برمجة. فكل خاصية منطقية وحدها، والنتيجة ظهرت مما بينها. ويطرح ذلك سؤالًا على كل فريق يصمم صيغة إعداد لمنتجه: هل فيها متغيرات، وهل تسمح بتحميل ملفات أخرى، وهل هناك حد للعمق؟

المصادر

  1. تحليل Nicolas Seriot
  2. الـ pull request رقم 19168 في مستودع curl
  3. سجل تغييرات curl الرسمي

من عدد الجمعة 19 جمادى الأولى - 30 أكتوبر

أخبار ذات صلة

برمجيات

إصدار curl 8.23.0 بلا ميزات جديدة: base64 وترميز الـ URL أسرع بأكثر من الضعف وذاكرة أقل

المغزى: تحسين صغير في مكتبة موجودة داخل الخوادم والهواتف والراوترات والتلفزيونات لا يُضرب في جهاز واحد بل في مليارات، والأداء كثيرًا ما يختبئ في الأجزاء المملة من الكود.

3 جمادى الأولى - 14 أكتوبر

أخبار الجمعة 19 جمادى الأولى - 30 أكتوبر