Curl-ի կոնֆիգուրացիայի ֆայլերը պատահաբար Turing-complete են։

Պարզվել է, որ ցանկացած հաշվարկելի ֆունկցիա կարող է ստեղծվել Curl կոնֆիգուրացիայի ֆայլերում կոնստրուկտների միջոցով: Այս խնդիրը տեղի է ունենում միայն Curl 8.12–8.16 տարբերակներում և առաջանում է Turing-ի ամբողջականության ոչ միտումնավոր ներդրման պատճառով, որը թույլ է տալիս ստեղծել Turing մեքենաներ՝ օգտագործելով փոփոխական արժեքներից բայթային միջակայքեր արդյունահանելու հնարավորությունը և արտաքին կոնֆիգուրացիայի ֆայլերը ներառելիս անսահմանափակ բնադրման խորությունը:

Որպես օրինակ, Curl-ը օգտագործվում է երկու հաշվիչով գրանցող մեքենայի (Մինսկիի մեքենա) մոդելավորման համար՝ թվեր գումարելու և «99 շիշ գարեջուր» ծրագիրն իրականացնելու համար, որն օգտագործվում է ցիկլեր սովորեցնելու համար: Curl կոնֆիգուրացիայի ֆայլերի միջոցով ծրագրավորված ծրագիրը գործարկելու համար պարզապես բացեք արխիվը և գործարկեք «curl -q -s -K 99_bottles/main.conf» հրամանը:

Գրանցող մեքենան մոդելավորվում է՝ հաշվիչի արժեքը ներկայացնելով որպես n x նիշերի տող։ Աճման և նվազեցման գործողությունները իրականացվում են տողերի միացման և կրճատման միջոցով (շարահյուսություն՝ «[0-0]»՝ առաջին բայթը պահպանելու համար, և «[1-]»՝ բոլոր պարունակությունները պահպանելու համար, բացի առաջին բայթից), իսկ վիճակի անցումները կառավարվում են «expand-config» հրահանգով, որը դինամիկ կերպով բեռնում է հաջորդ կարգավորման ֆայլը՝ օգտագործելով դրա անունը որպես անցման պիտակ։ Գրանցող մեքենայում INC(R) գործողությունը Curl կարգավորման ֆայլում իրականացվում է որպես 'expand-variable = "r={{r}}x"', DEC(R)-ը՝ որպես 'expand-variable = "r[1-]={{r}}"', իսկ JMP(S)-ը՝ որպես 'expand-config = "S.conf"'։ Օրինակ, 2 + 3 հաշվարկելու կոդը՝

Գործնականում, կոնֆիգուրացիայի ֆայլերի միջոցով իրականացվող հաշվողական հնարավորությունները սահմանափակվում են կույտի չափսով, քանի որ ծրագրի կատարման յուրաքանչյուր քայլ պահանջում է նոր ներդրված կոնֆիգուրացիայի ֆայլի բեռնում: 8 ՄԲ կույտի դեպքում գերբեռնվածությունը տեղի է ունենում մոտավորապես 922 քայլից հետո: Հնարավորությունների վրա ազդում են նաև ընդարձակված փոփոխականների չափի սահմանափակումը (MAX_EXPAND_CONTENT պարամետրը սահմանված է 10 ՄԲ) և փոփոխականների բոլոր հին տարբերակները պահելու պատճառով հիշողության բարձր սպառումը:

Չնայած հայտնաբերված առանձնահատկությունը խոցելիություն չէ, curl 8.17-ից սկսվող տարբերակներում տվյալ հնարքը այլևս չի աշխատի՝ կոնֆիգուրացիայի ֆայլերի բնադրման խորության սահմանափակման պատճառով մինչև 5 մակարդակ՝ անվերջ ռեկուրսիայից պաշտպանվելու համար։

Source: opennet.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster