Telah ditemukan bahwa fungsi komputasi apa pun dapat dibuat menggunakan konstruksi dalam file konfigurasi Curl. Masalah ini hanya terjadi pada versi Curl 8.12–8.16 dan disebabkan oleh implementasi kelengkapan Turing yang tidak disengaja, yang memungkinkan pembuatan mesin Turing menggunakan kemampuan untuk mengekstrak rentang byte dari nilai variabel dan kedalaman penestingan tak terbatas saat menyertakan file konfigurasi eksternal.
Sebagai contoh, Curl digunakan untuk mensimulasikan mesin register dua penghitung (mesin Minsky) untuk menambahkan angka dan mengimplementasikan program "99 Botol Bir", yang digunakan untuk mengajarkan perulangan. Untuk menjalankan program yang diprogram menggunakan file konfigurasi curl, cukup ekstrak arsip dan jalankan perintah "curl -q -s -K 99_bottles/main.conf."
Mesin register disimulasikan dengan merepresentasikan nilai penghitung sebagai string n x karakter. Operasi penambahan dan pengurangan diimplementasikan menggunakan penggabungan dan pemotongan string (sintaks "[0-0]" untuk menyimpan byte pertama dan "[1-]" untuk menyimpan semua isi kecuali byte pertama), dan transisi keadaan dikendalikan oleh arahan "expand-config", yang secara dinamis memuat file konfigurasi berikutnya menggunakan namanya sebagai label lompatan. Operasi INC(R) dalam mesin register diimplementasikan sebagai 'expand-variable = "r={{r}}x"' dalam file konfigurasi Curl, DEC(R) sebagai 'expand-variable = "r[1-]={{r}}"', dan JMP(S) sebagai 'expand-config = "S.conf"'. Misalnya, kode untuk menghitung 2 + 3:

Dalam praktiknya, kemampuan komputasi yang diwujudkan melalui file konfigurasi dibatasi oleh ukuran tumpukan (stack), karena setiap langkah eksekusi program memerlukan pemuatan file konfigurasi bersarang yang baru. Dengan tumpukan 8 MB, luapan (overflow) terjadi setelah sekitar 922 langkah. Kemampuan juga dipengaruhi oleh batasan ukuran variabel yang diperluas (parameter MAX_EXPAND_CONTENT diatur ke 10 MB) dan konsumsi memori yang tinggi karena menyimpan semua versi lama variabel.
Meskipun fitur yang diidentifikasi bukanlah kerentanan, pada versi curl mulai dari 8.17, trik tersebut tidak akan lagi berfungsi karena keterbatasan kedalaman penestingan file konfigurasi hingga 5 level untuk melindungi dari rekursi tak terbatas.
Sumber: opennet.ru
