تم اكتشاف إمكانية إنشاء أي دالة قابلة للحساب باستخدام بنيات في ملفات تهيئة Curl. تظهر هذه المشكلة فقط في إصدارات Curl من 8.12 إلى 8.16، وهي ناتجة عن تطبيق غير مقصود لمفهوم اكتمال تورينج، مما يسمح بإنشاء آلات تورينج باستخدام القدرة على استخراج نطاقات البايت من قيم المتغيرات وعمق التداخل غير المحدود عند تضمين ملفات تهيئة خارجية.
على سبيل المثال، يُستخدم برنامج Curl لمحاكاة آلة تسجيل ذات عدادين (آلة مينسكي) لجمع الأرقام وتنفيذ برنامج "99 زجاجة بيرة"، الذي يُستخدم لتعليم الحلقات التكرارية. لتشغيل البرنامج، المُبرمج باستخدام ملفات تهيئة Curl، ما عليك سوى فك ضغط الملف المضغوط وتشغيل الأمر "curl -q -s -K 99_bottles/main.conf."
تُحاكى آلة التسجيل بتمثيل قيمة العداد كسلسلة نصية مكونة من n × حرفًا. تُنفذ عمليات الزيادة والنقصان باستخدام دمج السلاسل النصية واقتطاعها (باستخدام الصيغة "[0-0]" للاحتفاظ بالبايت الأول و"[1-]" للاحتفاظ بجميع المحتويات باستثناء البايت الأول)، وتُتحكم انتقالات الحالة بواسطة التوجيه "expand-config"، الذي يقوم بتحميل ملف التكوين التالي ديناميكيًا باستخدام اسمه كعلامة انتقال. تُنفذ عملية INC(R) في آلة التسجيل كـ 'expand-variable = "r={{r}}x"' في ملف تكوين Curl، وعملية DEC(R) كـ 'expand-variable = "r[1-]={{r}}"'، وعملية JMP(S) كـ 'expand-config = "S.conf"'. على سبيل المثال، الكود لحساب 2 + 3:

عمليًا، تُحدَّد القدرات الحسابية المُتحققة عبر ملفات التكوين بحجم المكدس، إذ تتطلب كل خطوة من خطوات تنفيذ البرنامج تحميل ملف تكوين متداخل جديد. مع مكدس بحجم 8 ميجابايت، يحدث تجاوز السعة بعد حوالي 922 خطوة. كما تتأثر القدرات أيضًا بالحد الأقصى لحجم المتغيرات المُوسَّعة (حيث تم ضبط مُعامل MAX_EXPAND_CONTENT على 10 ميجابايت) واستهلاك الذاكرة العالي الناتج عن تخزين جميع الإصدارات القديمة من المتغيرات.
على الرغم من أن الميزة المحددة ليست ثغرة أمنية، إلا أن الحيلة المذكورة لن تعمل في الإصدارات التي تبدأ من curl 8.17 بسبب تقييد عمق التداخل لملفات التكوين إلى 5 مستويات للحماية من التكرار اللانهائي.
المصدر: opennet.ru
