Bylo zjištěno, že je možné vytvářet jakékoli výpočetní funkce pomocí konstrukcí v konfiguračních souborech nástroje Curl. Tato vlastnost se projevuje pouze ve verzích Curl od 8.12 do 8.16 a je způsobena neúmyslnou realizací Turingovy úplnosti, která umožňuje vytváření Turingových strojů, využívajících možnost extrakce bytových rozsahů z hodnot proměnných a neomezenou hloubku vnořování při připojování externích konfiguračních souborů.
Jako příklad byla pomocí Curl uspořádána simulace práce dvoustavového registračního stroje (Minskovy stroje) pro sčítání čísel a realizaci programu „99 lahví piva“, který se používá při výuce práce s cykly. K spuštění programu, který je naprogramován prostřednictvím konfiguračních souborů curl, stačí rozbalit archiv a provést příkaz „curl -q -s -K 99_bottles/main.conf“.
Registrační stroj je simulován prostřednictvím zobrazení hodnoty čítače jako řetězce ze „n“ znaků „x“. Operace inkrementace a dekrementace jsou realizovány pomocí konkatenace a zkracování řetězců (syntax „[0-0]“ pro ponechání prvního bytu a „[1-]“ pro ponechání veškerého obsahu kromě prvního bytu), zatímco přechody mezi stavy jsou řízeny direktivou „expand-config“, která dynamicky nacítá další konfigurační soubor, používaje jeho název jako přechodovou značku. Operace INC(R) v registračním stroji je realizována jako ‘expand-variable = „r={{r}}x“‘ v konfiguračním souboru Curl, DEC(R) — jako ‘expand-variable = „r[1-]={{r}}“‘, a JMP(S) — jako ‘expand-config = „S.conf“‘. Například kód pro výpočet 2 + 3:

V praxi jsou výpočetní možnosti realizované prostřednictvím konfiguračních souborů omezeny velikostí zásobníku, jelikož každý krok vykonání programu vyžaduje nahrání nového vnořeného konfiguračního souboru. Při zásobníku o velikosti 8 MB k přetečení dojde přibližně po 922 krocích. Na možnosti také má vliv omezení velikosti odhalovaných proměnných (parametr MAX_EXPAND_CONTENT je nastaven na 10 MB) a vysoká spotřeba paměti kvůli uchovávání všech starých verzí proměnných.
I když zjištěná možnost není zranitelností ve verzích od curl 8.17, zvažovaný trik již nebude fungovat kvůli omezení hloubky vnořování konfiguračních souborů na 5 úrovní, aby se zabránilo nekonečné rekurzi.
Zdroj: opennet.ru
