Fișierele de configurare curl implementează din întâmplare completitudinea după Turing

A fost identificată posibilitatea de a crea orice funcții calculabile prin construcții în fișierele de configurare ale utilitarului Curl. Această caracteristică se manifestează doar în versiunile Curl între 8.12-8.16 și este cauzată de implementarea neintenționată a completitudinii Turing, permițând crearea de mașini Turing folosind capacitatea de a extrage intervale de bytes din valorile variabilelor și o adâncime de imersie nelimitată la conectarea fișierelor de configurare externe.

Ca exemplu, cu ajutorul Curl a fost organizată o simulare a funcționării unei mașini de numărare cu două registre (mașina Minsk) pentru adunarea numerelor și implementarea programului „99 de sticle de bere”, utilizat la învățarea lucrului cu bucle. Pentru a rula programul, programat prin fișierele de configurare curl, este suficient să dezarhivați arhiva și să executați comanda „curl -q -s -K 99_bottles/main.conf”.

Mașina de numărare este simulată prin reprezentarea valorii contorului ca un șir de „n” caractere „x”. Operațiile de incrementare și decrementare sunt realizate prin concatenarea și scurtarea șirurilor (sintaxa „[0-0]” pentru păstrarea primului byte și „[1-]” pentru păstrarea întregului conținut, cu excepția primului byte), iar tranzițiile între stări sunt gestionate prin directiva „expand-config”, care încarcă dinamic următorul fișier de configurare, folosind numele său ca etichetă de tranziție. Operația INC(R) în mașina de numărare este implementată ca ‘expand-variable = „r={{r}}x”‘ în fișierul de configurare Curl, DEC(R) — ca ‘expand-variable = „r[1-]={{r}}”‘, iar JMP(S) — ca ‘expand-config = „S.conf”‘. De exemplu, codul pentru calcularea 2 + 3:

În practică, capabilitățile computaționale implementate prin fișierele de configurare sunt limitate de dimensiunea stivei, deoarece fiecare pas în execuția programului necesită încărcarea unui nou fișier de configurare imersat. Cu o stivă de 8 MB, supraîncărcarea apare după aproximativ 922 de pași. Capacitățile sunt de asemenea afectate de limita dimensiunii variabilelor expandate (parametrul MAX_EXPAND_CONTENT este setat la 10 MB) și de un consum mare de memorie din cauza păstrării tuturor versiunilor anterioare ale variabilelor.

Deși posibilitatea identificată nu este o vulnerabilitate în versiunile începând cu curl 8.17, trucul în discuție nu va mai funcționa din cauza limitării adâncimii imersiei fișierelor de configurare la 5 niveluri pentru a preveni recursivitatea infinită.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster