کشف شده است که هر تابع قابل محاسبهای را میتوان با استفاده از ساختارهای موجود در فایلهای پیکربندی Curl ایجاد کرد. این مشکل فقط در نسخههای ۸.۱۲ تا ۸.۱۶ Curl رخ میدهد و ناشی از پیادهسازی غیرعمدی کامل بودن تورینگ است که امکان ایجاد ماشینهای تورینگ را با استفاده از قابلیت استخراج محدودههای بایت از مقادیر متغیر و عمق نامحدود تودرتو هنگام گنجاندن فایلهای پیکربندی خارجی فراهم میکند.
به عنوان مثال، از Curl برای شبیهسازی یک ماشین رجیستر دو شمارنده (ماشین مینسکی) برای جمع اعداد و پیادهسازی برنامه "99 بطری آبجو" که برای آموزش حلقهها استفاده میشود، استفاده میشود. برای اجرای برنامه که با استفاده از فایلهای پیکربندی curl برنامهریزی شده است، کافیست بایگانی را از حالت فشرده خارج کرده و دستور "curl -q -s -K 99_bottles/main.conf" را اجرا کنید.
ماشین ثبت با نمایش مقدار شمارنده به صورت رشتهای از n x کاراکتر شبیهسازی میشود. عملیات افزایش و کاهش با استفاده از الحاق و برش رشته (با سینتکس "[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:

در عمل، قابلیتهای محاسباتی که از طریق فایلهای پیکربندی محقق میشوند، توسط اندازه پشته محدود میشوند، زیرا هر مرحله از اجرای برنامه نیاز به بارگذاری یک فایل پیکربندی تو در تو جدید دارد. با یک پشته ۸ مگابایتی، سرریز پس از تقریباً ۹۲۲ مرحله رخ میدهد. قابلیتها همچنین تحت تأثیر محدودیت اندازه متغیرهای بسطیافته (پارامتر MAX_EXPAND_CONTENT روی ۱۰ مگابایت تنظیم شده است) و مصرف بالای حافظه به دلیل ذخیره تمام نسخههای قدیمی متغیرها قرار میگیرند.
اگرچه ویژگی شناساییشده یک آسیبپذیری نیست، اما در نسخههایی که از curl 8.17 شروع میشوند، ترفند مورد بحث دیگر به دلیل محدودیت عمق تودرتوی فایلهای پیکربندی به ۵ سطح برای محافظت در برابر بازگشت بینهایت، کار نخواهد کرد.
منبع: opennet.ru
