On havaittu, että Curl-konfiguraatiotiedostojen rakenteita voidaan käyttää minkä tahansa laskettavan funktion luomiseen. Tämä ongelma esiintyy vain Curl-versioissa 8.12–8.16, ja sen aiheuttaa tahaton Turingin täydellisyyden toteutus, joka mahdollistaa Turingin koneiden luomisen käyttämällä mahdollisuutta poimia tavualueita muuttujien arvoista ja rajoittamatonta sisäkkäisyyttä ulkoisia konfiguraatiotiedostoja sisällytettäessä.
Esimerkkinä Curlia käytetään simuloimaan kahden laskurin rekisterikonetta (Minsky-konetta) lukujen yhteenlaskua varten ja "99 Bottles of Beer" -ohjelman toteuttamiseksi, jota käytetään silmukoiden opettamiseen. Suorittaaksesi Curl-määritystiedostoilla ohjelmoidun ohjelman, pura arkisto ja suorita komento "curl -q -s -K 99_bottles/main.conf".
Rekisterikonetta simuloidaan esittämällä laskurin arvo n x merkin merkkijonona. Lisäys- ja vähennysoperaatiot toteutetaan merkkijonojen ketjuttamisella ja katkaisemisella (syntaksi "[0-0]" ensimmäisen tavun säilyttämiseksi ja "[1-]" kaiken muun sisällön säilyttämiseksi paitsi ensimmäisen tavun), ja tilasiirtymiä ohjataan "expand-config"-direktiivillä, joka lataa dynaamisesti seuraavan konfiguraatiotiedoston käyttäen sen nimeä hyppytunnisteena. Rekisterikoneen INC(R)-operaatio on toteutettu Curl-konfiguraatiotiedostossa muodossa 'expand-variable = "r={{r}}x"', DEC(R) muodossa 'expand-variable = "r[1-]={{r}}"' ja JMP(S) muodossa 'expand-config = "S.conf"'. Esimerkiksi koodi 2 + 3:n laskemiseksi:

Käytännössä pinon koko rajoittaa konfiguraatiotiedostojen avulla saavutettavaa laskentatehoa, koska jokainen ohjelman suoritusvaihe vaatii uuden sisäkkäisen konfiguraatiotiedoston lataamisen. 8 Mt:n pinolla ylivuoto tapahtuu noin 922 vaiheen jälkeen. Ominaisuuksiin vaikuttavat myös laajennettujen muuttujien kokorajoitus (MAX_EXPAND_CONTENT-parametri on asetettu arvoon 10 Mt) ja suuri muistinkulutus, joka johtuu kaikkien vanhojen muuttujien versioiden tallennuksesta.
Vaikka tunnistettu ominaisuus ei ole haavoittuvuus, curl 8.17:stä alkaen kyseinen kikka ei enää toimi, koska asetustiedostojen sisäkkäisyys on rajoitettu viiteen tasoon äärettömän rekursion estämiseksi.
Lähde: opennet.ru
