V konfiguracijskih datotekah curl je nepričakovano uresničena Turingova popolnost

Identificirana je mogućnost kreiranja bilo kojih izračunljivih funkcija putem konstrukcija u konfiguracijskim datotekama alata Curl. Ova karakteristika se pojavljuje samo u verzijama Curl od 8.12 do 8.16 i uzrokovana je nenamjernom implementacijom Turingove potpune sposobnosti, što omogućava kreiranje Turingovih mašina koristeći mogućnost izvlačenja bajtnih opsega iz vrijednosti varijabli i neograničenu dubinu ugniježđenja prilikom povezivanja vanjskih konfiguracijskih datoteka.

Kao primjer, simulirana je funkcionalnost dvobrojne registarske mašine (Minskov aparat) putem alata Curl, koja zbraja brojeve i implementira program '99 boca piva', koji se koristi za obučavanje rada s petljama. Da bi se pokrenuo program, isprogramiran putem konfiguracijskih datoteka Curl, dovoljno je raspakovati arhivu i izvršiti komandu 'curl -q -s -K 99_bottles/main.conf'.

Registarska mašina se simulira predstavljanjem vrijednosti brojila kao string sastavljen od 'n' simbola 'x'. Operacije inkrementiranja i dekrementiranja implementirane su putem konkatenacije i skraćivanja stringova (sintaksa '[0-0]' za zadržavanje prvog bajta i '[1-]' za zadržavanje svega osim prvog bajta), dok prelazi između stanja upravlja direktiva 'expand-config', koja dinamički učitava sljedeću konfiguracijsku datoteku koristeći njeno ime kao oznaku prijelaza. Operacija INC(R) u registarskoj mašini implementira 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čunske sposobnosti realizirane putem konfiguracijskih datoteka ograničene su veličinom stoga, jer svaki korak izvršenja programa zahtijeva učitavanje nove ugniježdene konfiguracijske datoteke. Sa stogom od 8 MB, pretjerivanje se javlja otprilike nakon 922 koraka. Na mogućnosti također utječe ograničenje na veličinu otkrivenih varijabli (parametar MAX_EXPAND_CONTENT postavljen na 10 MB) i veliko korištenje memorije zbog čuvanja svih starih verzija varijabla.

Iako otkrivena mogućnost nije ranjivost u verzijama od curl 8.17, navedeni trik više ne funkcioniše zbog ograničenja dubine ugniježdenja konfiguracijskih datoteka na 5 nivoa, kako bi se zaštitilo od beskonačne rekurzije.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster