Curl yapılandırma dosyalarındaki yapılar kullanılarak herhangi bir hesaplanabilir fonksiyonun oluşturulabileceği keşfedilmiştir. Bu sorun yalnızca Curl 8.12-8.16 sürümlerinde ortaya çıkmakta olup, Turing makinelerinin oluşturulmasına olanak tanıyan ve değişken değerlerinden bayt aralıklarının çıkarılmasını ve harici yapılandırma dosyalarının dahil edilmesinde sınırsız iç içe geçme derinliğini sağlayan, Turing tamamlama özelliğinin kasıtlı olmayan bir şekilde uygulanmasından kaynaklanmaktadır.
Örnek olarak, Curl, sayıları toplamak için iki sayaçlı bir kayıt makinesini (Minsky makinesi) simüle etmek ve döngüleri öğretmek için kullanılan "99 Şişe Bira" programını uygulamak için kullanılır. Curl yapılandırma dosyaları kullanılarak programlanan programı çalıştırmak için, arşivi açmanız ve "curl -q -s -K 99_bottles/main.conf" komutunu çalıştırmanız yeterlidir.
Kayıt makinesi, sayaç değerini n x karakterden oluşan bir dize olarak temsil ederek simüle edilir. Artırma ve azaltma işlemleri, dize birleştirme ve kesme (ilk baytı korumak için "[0-0]" ve ilk bayt hariç tüm içeriği korumak için "[1-]") kullanılarak uygulanır ve durum geçişleri, adını atlama etiketi olarak kullanarak bir sonraki yapılandırma dosyasını dinamik olarak yükleyen "expand-config" yönergesi tarafından kontrol edilir. Kayıt makinesindeki INC(R) işlemi, Curl yapılandırma dosyasında 'expand-variable = "r={{r}}x"', DEC(R) 'expand-variable = "r[1-]={{r}}"' ve JMP(S) 'expand-config = "S.conf"' olarak uygulanır. Örneğin, 2 + 3'ü hesaplamak için kod:

Pratikte, yapılandırma dosyaları aracılığıyla gerçekleştirilen hesaplama yetenekleri, yığın boyutuyla sınırlıdır, çünkü program yürütmesinin her adımı yeni bir iç içe yapılandırma dosyasının yüklenmesini gerektirir. 8 MB'lık bir yığınla, yaklaşık 922 adımdan sonra taşma meydana gelir. Yetenekler ayrıca genişletilmiş değişkenlerin boyutuna ilişkin sınırdan (MAX_EXPAND_CONTENT parametresi 10 MB olarak ayarlanmıştır) ve değişkenlerin tüm eski sürümlerinin saklanmasından kaynaklanan yüksek bellek tüketiminden de etkilenir.
Belirlenen özellik bir güvenlik açığı olmasa da, curl 8.17'den itibaren yapılandırma dosyalarının iç içe geçme derinliğinin sonsuz özyinelemeye karşı koruma sağlamak amacıyla 5 seviyeyle sınırlandırılması nedeniyle söz konusu yöntem artık çalışmayacaktır.
Kaynak: opennet.ru
