Det har blitt identifisert en mulighet for Ä opprette vilkÄrlige beregnbare funksjoner ved hjelp av konstruksjoner i konfigurasjonsfilene til verktÞyet Curl. Denne egenskapen vises kun i versjoner av Curl fra 8.12 til 8.16 og er forÄrsaket av en utilsiktet implementasjon av Turing-fullstendighet, som tillater oppretting av Turing-maskiner ved Ä bruke muligheten til Ä hente byteomrÄder fra variabelverdier og ubegrenset dybde av nestede konfigurasjonsfiler.
Som et eksempel er det gjennom Curl organisert en simulering av en to-teller registreringsmaskin (Minsk-maskinen) for addisjon av tall og implementering av programmet «99 flasker med Þl», brukt i undervisning om slÞyfer. For Ä kjÞre programmet, som er programmert gjennom konfigurasjonsfilene til curl, er det tilstrekkelig Ä pakke ut arkivet og utfÞre kommandoen «curl -q -s -K 99_bottles/main.conf».
Registreringsmaskinen simuleres ved Ă„ representere verdien til telleren som en streng med «n» tegn «x». Inkrementerings- og dekrementeringsoperasjoner er realisert gjennom sammenfĂžyning og truncation av strenger (syntaksen «[0-0]» for Ă„ beholde fĂžrste byte og «[1-]» for Ă„ beholde alt innhold unntatt fĂžrste byte), mens overgangene mellom tilstander styres av direktivet «expand-config», som dynamisk laster den neste konfigurasjonsfilen ved Ă„ bruke navnet som en overgangsmerke. Operasjonen INC(R) i registreringsmaskinen realiseres som âexpand-variable = «r={{r}}x»â i konfigurasjonsfilen til Curl, DEC(R) â som âexpand-variable = «r[1-]={{r}}»â, og JMP(S) â som âexpand-config = «S.conf»â. For eksempel, koden for Ă„ utfĂžre 2 + 3:

I praksis er de beregningsmulighetene som implementeres via konfigurasjonsfiler begrenset av stÞrrelsen pÄ stakken, ettersom hvert steg i programutfÞrelsen krever lasting av en ny nestet konfigurasjonsfil. Med en stakk pÄ 8 MB oppstÄr det overlÞp etter omtrent 922 steg. Mulighetene pÄvirkes ogsÄ av begrensningen pÄ stÞrrelsen pÄ utvidede variabler (parameteren MAX_EXPAND_CONTENT er satt til 10 MB) og stort minneforbruk pÄ grunn av lagring av alle gamle versjoner av variabler.
Selv om den oppdagede muligheten ikke er en sÄrbarhet i versjoner fra curl 8.17, vil ikke det aktuelle trikset fungere lenger pÄ grunn av begrensningen av dybden i konfigurasjonsfiler til 5 nivÄer, for Ä beskytte mot uendelig rekursjon.
Kilde: opennet.ru
