Muligheden for at skabe enhver beregnelig funktion ved hjælp af konstruktioner i konfigurationsfilerne til Curl er blevet identificeret. Denne egenskab manifesterer sig kun i versioner af Curl fra 8.12-8.16 og skyldes en utilsigtet implementering af Turing-kompletheden, som gør det muligt at oprette Turing-maskiner ved at udnytte muligheden for at udtrække byteområder fra variabelværdier og ubegribelig dybde af indlejring ved forbindelse af eksterne konfigurationsfiler.
Som et eksempel er der gennem Curl organiseret en simulering af en to-tæller registers maskine (Minsk-maskinen) til at summere tal og implementere programmet '99 flasker øl', der bruges som en læringsøvelse i omgang med loops. For at køre programmet, der er programmeret via Curl's konfigurationsfiler, er det tilstrækkeligt at udpakke arkivet og udføre kommandoen 'curl -q -s -K 99_bottles/main.conf'.
Registers maskinen simuleres ved at repræsentere tællerens værdi som en streng bestående af 'n' symboler 'x'. Inkrement- og dekrementoperationer implementeres gennem konkatenering og afskæring af strenge (syntaksen '[0-0]' for at bevare det første byte og '[1-]' for at bevare alt indhold undtagen det første byte), og overgange mellem tilstande styres af direktivet 'expand-config', som dynamisk indlæser den næste konfigurationsfil ved at bruge dens navn som en overgangslabel. Operationen INC(R) i registers maskinen implementeres som 'expand-variable = "r={{r}}x"' i Curl's konfigurationsfil, DEC(R) som 'expand-variable = "r[1-]={{r}}"', og JMP(S) som 'expand-config = "S.conf"'. For eksempel, koden til at beregne 2 + 3:

I praksis er de beregningsmæssige muligheder, der implementeres gennem konfigurationsfiler, begrænset af størrelsen på stakken, da hvert skridt under programudførelsen kræver indlæsning af en ny indlejret konfigurationsfil. Ved en stak på 8 MB opstår der et overflow efter cirka 922 skridt. Mulighederne påvirkes også af begrænsningen på størrelsen af de eksponerede variabler (parameteren MAX_EXPAND_CONTENT er sat til 10 MB) og det store hukommelsesforbrug på grund af opbevaring af alle tidligere versioner af variabler.
Selvom den identificerede mulighed ikke er en sårbarhed i versioner fra og med curl 8.17, virker det beskrevne trick ikke længere på grund af begrænsningen af indlejringsdybden af konfigurationsfiler til 5 niveauer for at beskytte mod uendelig rekursion.
Kilde: opennet.ru
