Otkriveno je da se bilo koja izračunljiva funkcija može kreirati korištenjem konstrukata u Curl konfiguracijskim datotekama. Ovaj problem se javlja samo u Curl verzijama 8.12–8.16 i uzrokovan je nenamjernom implementacijom Turingove potpunosti, koja omogućava kreiranje Turingovih mašina korištenjem mogućnosti izdvajanja raspona bajtova iz vrijednosti varijabli i neograničene dubine ugniježđivanja pri uključivanju eksternih konfiguracijskih datoteka.
Kao primjer, Curl se koristi za simulaciju mašine sa dva brojača registara (Minskyjeva mašina) za sabiranje brojeva i implementaciju programa "99 boca piva", koji se koristi za učenje petlji. Da biste pokrenuli program, programiran pomoću curl konfiguracijskih datoteka, jednostavno raspakujte arhivu i pokrenite naredbu "curl -q -s -K 99_bottles/main.conf".
Registarska mašina se simulira predstavljanjem vrijednosti brojača kao niza od n x znakova. Operacije povećanja i smanjenja implementirane su korištenjem spajanja i skraćivanja nizova (sintaksa "[0-0]" za zadržavanje prvog bajta i "[1-]" za zadržavanje svih sadržaja osim prvog bajta), a prijelazi stanja kontrolirani su direktivom "expand-config", koja dinamički učitava sljedeću konfiguracijsku datoteku koristeći njeno ime kao oznaku skoka. Operacija INC(R) u registarskoj mašini implementirana je kao 'expand-variable = "r={{r}}x"' u Curl konfiguracijskoj datoteci, DEC(R) kao 'expand-variable = "r[1-]={{r}}"', a JMP(S) kao 'expand-config = "S.conf"'. Na primjer, kod za izračunavanje 2 + 3:

U praksi, računarske mogućnosti ostvarene putem konfiguracijskih datoteka ograničene su veličinom steka, budući da svaki korak izvršavanja programa zahtijeva učitavanje nove ugniježđene konfiguracijske datoteke. Sa stekom od 8 MB, prelijevanje se javlja nakon približno 922 koraka. Na mogućnosti također utječe ograničenje veličine proširenih varijabli (parametar MAX_EXPAND_CONTENT je postavljen na 10 MB) i velika potrošnja memorije zbog pohranjivanja svih starih verzija varijabli.
Iako identifikovana karakteristika nije ranjivost, u verzijama koje počinju sa curl 8.17, dotični trik više neće funkcionisati zbog ograničenja dubine ugniježđivanja konfiguracionih datoteka na 5 nivoa radi zaštite od beskonačne rekurzije.
izvor: opennet.ru
