V konfiguračných súboroch curl je náhodne implementovaná úplnosť podľa Turinga

Bola zistená možnosť vytvárania akýchkoľvek počítateľných funkcií pomocou konštrukcií v konfiguračných súboroch nástroja Curl. Táto vlastnosť sa prejavuje iba vo verziách Curl od 8.12 do 8.16 a je spôsobená neúmyselnou realitou Turingovej úplnosti, ktorá umožňuje vytvárať Turingove stroje, využívajúc možnosť extrakcie bytových rozsahov z hodnôt premenných a neobmedzenej hĺbky vnorenia pri pripájaní externých konfiguračných súborov.

Ako príklad bola pomocou nástroja Curl zorganizovaná simulácia fungovania dvojčítacej registračnej machine (Blinkyho stroj) na sčítanie čísel a realizáciu programu '99 fliaš piva', ktorý sa používa pri vzdelávaní v práci s cyklami. Na spustenie programu, naprogramovaného prostredníctvom konfiguračných súborov curl, stačí rozbaliť archív a vykonať príkaz 'curl -q -s -K 99_bottles/main.conf'.

Registračná machine je simulovaná prostredníctvom reprezentácie hodnoty počítadla vo forme reťazca z 'n' znakov 'x'. Operácie inkrementácie a dekrementácie sú realizované cez konkatenáciu a skrátenie reťazcov (syntax '[0-0]' pre ponechanie prvého bytu a '[1-]' pre ponechanie celého obsahu okrem prvého bytu), a prechody medzi stavmi sú riadené direktívou 'expand-config', ktorá dynamicky načítava nasledujúci konfiguračný súbor, pričom jeho názov slúži ako prechodová značka. Operácia INC(R) v registračnej machine sa realizuje ako 'expand-variable = "r={{r}}x"' v konfiguračnom súbore Curl, DEC(R) sa realizuje ako 'expand-variable = "r[1-]={{r}}"', a JMP(S) ako 'expand-config = "S.conf"'. Napríklad, kód na výpočet 2 + 3:

V praxi sú realizované prostredníctvom konfiguračných súborov výpočtové možnosti obmedzené veľkosťou zásobníka, pretože každý krok vykonávania programu vyžaduje načítanie nového vnoreného konfiguračného súboru. Pri zásobníku s kapacitou 8 MB sa pretečenie vyskytuje približne po 922 krokoch. Na možnosti tiež vplýva obmedzenie veľkosti rozšíriteľných premenných (parameter MAX_EXPAND_CONTENT je nastavený na 10 MB) a veľká spotreba pamäte v dôsledku uchovávania všetkých starých verzií premenných.

Napriek tomu, že zistená možnosť nie je zraniteľnosťou vo verziách od curl 8.17, zvažovaný trik už nebude fungovať kvôli obmedzeniu hĺbky vnorenia konfiguračných súborov na 5 úrovní na ochranu pred nekonečnou rekurziou.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster