U konfiguracijskim datotekama curl slučajno je implementirana Turingova potpunost

Otkrivena je mogućnost stvaranja bilo kojih izračunljivih funkcija pomoću konstrukcija u konfiguracijskim datotekama alata Curl. Ova osobina se manifestira samo u verzijama Curl-a od 8.12 do 8.16 i uzrokovana je nenamjernom implementacijom Turingove potpornosti, koja omogućava stvaranje Turingovih mašina korištenjem mogućnosti dohvaćanja bajtnih raspona iz vrijednosti varijabli i neograničene dubine ugniježđenja pri povezivanju vanjskih konfiguracijskih datoteka.

Kao primjer, pomoću Curl-a organizirana je simulacija rada dvosmjerne registarske mašine (Mašina Minsk) za sabiranje brojeva i implementaciju programa '99 boca piva', koji se koristi pri učenju rada s petljama. Za pokretanje programa, programiranog kroz konfiguracijske datoteke curl, dovoljno je raspakirati arhivu i izvršiti naredbu 'curl -q -s -K 99_bottles/main.conf'.

Registarska mašina simulira se kroz predstavljanje vrijednosti brojila u obliku niza od 'n' simbola 'x'. Operacije inkrementa i dekrementa implementirane su kroz konkatenaciju i odsijecanje nizova (sintaksa '[0-0]' za zadržavanje prvog bajta i '[1-]' za zadržavanje cijelog sadržaja osim prvog bajta), a prijelazi između stanja upravljaju se direktivom 'expand-config', koja dinamički učitava sljedeću konfiguracijsku datoteku koristeći njezino ime kao oznaku prijelaza. Operacija INC(R) u registarskoj mašini realizira se kao 'expand-variable = "r={{r}}x"' u konfiguracijskoj datoteci Curl, 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čunalne mogućnosti realizirane kroz konfiguracijske datoteke ograničene su veličinom steka, jer svaki korak izvršenja programa zahtijeva učitavanje nove ugniježdene konfiguracijske datoteke. Sa stekom od 8 MB, preliv se događa otprilike nakon 922 koraka. Na mogućnosti također utječe ograničenje na veličinu otkrivenih varijabli (parametar MAX_EXPAND_CONTENT postavljen je na 10 MB) i velika potrošnja memorije zbog čuvanja svih starih verzija varijabli.

Iako otkrivena prilika nije ranjivost u verzijama od curl 8.17 nadalje, razmatrani trik više neće raditi zbog ograničenja dubine ugniježđenja konfiguracijskih datoteka na 5 nivoa radi zaštite od beskonačne rekurzije.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster