Curl'i konfigureerimisfailides kasutatavate konstruktsioonide kaudu on avastatud võimalus luua mis tahes arvutatavaid funktsioone. See omadus ilmneb ainult Curl'i versioonides 8.12-8.16 ja see on tingitud tahtmatust Turingi täielikkuse rakendamisest, mis võimaldab luua Turingi masinaid, kasutades muutujate väärtustest baitide vahemike väljavõtmise võimalust ja piiramatut süvenemist väliste konfigureerimisfailide ühendamisel.
Näiteks simuleeritakse Curl'i abil kahe loendiga registrimasina (Minski masin) tööd, et liita numbreid ja teostada programmi "99 pudelit õlut", mida kasutatakse tsüklite õppimise ajal. Programm, mis on kodeeritud curl'i konfigureerimisfailides, käivitamiseks piisab, kui arhiv avada ja käivitada käsk "curl -q -s -K 99_bottles/main.conf".
Registrimasinat simuleeritakse, esindades loenduri väärtust stringina, mis sisaldab "n" märki "x". Inkrementimise ja dejecrementimise operatsioonid on realiseeritud stringide ühendamise ja lõikamise kaudu (süntaks "[0-0]" esimese baidi säilitamiseks ja "[1-]" kõigi sisu säilitamiseks, välja arvatud esimene bait), ning olekute vahetusi juhitakse direktiiviga "expand-config", mis dünaamiliselt laadib järgmise konfigureerimisfaili, kasutades selle nime vahetusmärgina. INC(R) operatsioon registrimasinas on teostatud kui 'expand-variable = "r={{r}}x"' Curl'i konfigureerimisfailis, DEC(R) kui 'expand-variable = "r[1-]={{r}}"' ja JMP(S) kui 'expand-config = "S.conf"'. Näiteks kood 2 + 3 arvutamiseks:

Praktiliselt, konfigureerimisfailide kaudu realiseeritud arvutusvõimalused on piiratavad virna suurusega, kuna iga programmietapi täitmine nõuab uue sisemise konfigureerimisfaili laadimist. 8 MB virna korral tekib ülevool ligikaudu pärast 922 sammu. Võimalustele mõjub ka piirang avatud muutujate suurusele (parameeter MAX_EXPAND_CONTENT on seatud 10 MB) ning suur mälu tarbimine tuleneb kõigi vanade muutujaversioonide salvestamisest.
Kuna avastatud võimalus ei ole haavatavus curl'i versioonides alates 8.17, siis käsitletav nipp ei toimi enam, kuna konfigureerimisfailide süvenemise sügavus on piiratud 5 tasemega, et kaitsta lõpmatute rekursside eest.
Allikas: opennet.ru
