ملفات إعداد curl كانت لغة برمجة كاملة بين النسختين 8.12 و8.16 نتيجة اجتماع خاصيتين عاديتين
نشر Nicolas Seriot تحليلًا يبيّن أن ملفات إعداد أداة curl كانت لغة برمجة كاملة، من النسخة 8.12 الصادرة في فبراير 2025 حتى النسخة 8.16. ويؤكد الكاتب أن المسألة ليست ثغرة، وأن أثرها الأمني منعدم، لكن آليتها تتكرر في أنظمة كثيرة.
والقصة كلها خاصيتان عاديتان. الأولى متغيرات داخل ملف الإعداد، تُكتب قيمتها مرة ثم تُستخدم بعد ذلك. والثانية إمكانية أخذ جزء من القيمة بالبايت، كالبايت الأول وحده أو كل شيء عدا الأول. ثم جاء عنصر ثالث أكمل الصورة: ملف الإعداد يستطيع تحميل ملف إعداد آخر، ويمكن حساب اسمه من متغير.
وبهذا اجتمعت الأدوات الثلاث لأي عملية حسابية. فهناك عدّاد يزيد بإضافة حرف وينقص بحذف الحرف الأول. وهناك تفرّع، باختيار اسم الملف الذي سيُحمَّل بحسب القيمة. وهناك توقف، حين لا يحمّل الملف شيئًا بعده. وقدّم الكاتب مثالًا فعليًا يجمع 2 و3 بأربعة ملفات إعداد، فتخرج النتيجة خمسة أحرف.
وصدر الإصلاح في النسخة 8.17.0 في نوفمبر 2025، وهو حد أقصى من 5 مستويات تحميل متداخلة. والسبب المكتوب في الـ pull request رقم 19168 هو منع ملف من تحميل نفسه إلى ما لا نهاية. ولمن يستخدم نسخة حديثة، صارت المسألة تاريخية.
ولم يقصد أحد أن يصنع لغة برمجة. فكل خاصية منطقية وحدها، والنتيجة ظهرت مما بينها. ويطرح ذلك سؤالًا على كل فريق يصمم صيغة إعداد لمنتجه: هل فيها متغيرات، وهل تسمح بتحميل ملفات أخرى، وهل هناك حد للعمق؟