Խոցելիություն cdnjs-ում, որը թույլ էր տալիս կոդի կատարումը Cloudflare սերվերների վրա

Cloudflare-ի cdnjs բովանդակության առաքման ցանցում հայտնաբերվել է կրիտիկական խոցելիություն, որը նախատեսված է արագացնելու JavaScript գրադարանների առաքումը, որը թույլ է տալիս կամայական կոդի կատարումը CDN սերվերների վրա: Խնդրի վտանգը խորանում է նրանով, որ ինտերնետում բոլոր կայքերի մոտ 12.7%-ն օգտագործում է ծառայությունը JavaScript գրադարանները ներբեռնելու համար, և ենթակառուցվածքի վտանգը հնարավորություն է տալիս փոխարինել այդ կայքերից որևէ մեկի կողմից տրամադրված գրադարանները:

Cdnjs ծառայությունը ներբեռնում է փաթեթներ Git-ից կամ NPM պահոցից, որից հետո ցանկացած կայքի թույլ է տալիս անվճար օգտվել Cloudflare բովանդակության առաքման ցանցից՝ արագացնելու JavaScript գրադարանների բեռնումը: GitHub-ում հրապարակված cdnjs բաղադրիչների ծածկագիրը ուսումնասիրելիս պարզվեց, որ tgz արխիվներում NPM փաթեթները բացելու համար օգտագործվում է Go լեզվով արխիվ/tar մոդուլը, որն արտադրում է ֆայլերի ցանկն այնպիսին, ինչպիսին կա՝ առանց ուղիները նորմալացնելու: . Այն դեպքում, երբ սցենարը բացում է բովանդակությունը՝ հիմնվելով տվյալ ցանկի վրա, «../../../../../../../tmp/test»-ի նման ֆայլերի արխիվում առկայությունը կարող է. հանգեցնում է համակարգում կամայական ֆայլերի վերագրանցմանը, որքանով թույլ են տալիս մուտքի իրավունքները:

Առաջարկվում էր, որ հարձակվողը կարող է դիմել՝ ավելացնելու իր գրադարանը cdnjs-ում և վերբեռնել հատուկ մշակված արխիվ, որը պարունակում է «../» նիշերով ֆայլեր NPM պահոց տանող ճանապարհին: cdnjs սերվերների վրա պարբերաբար կատարվում է «ավտոթարմացում» գործողություն, որի ընթացքում մշակողը ներբեռնում է առաջարկվող գրադարանի նոր տարբերակները և բացում բովանդակությունը։ Օգտագործելով «../» ուղիներով ֆայլերը, հարձակվողը կարող է վերագրանցել ֆայլերը սպասարկման սկրիպտներով և կատարել դրանց կոդը այն սերվերի վրա, որի վրա կատարվել է ապափաթեթավորումը:

Git-ից թարմացումներ ներբեռնելու դեպքում պարզվել է, որ թարմացումները ներբեռնող մշակողը հաշվի չի առել խորհրդանշական հղումները Git-ից ֆայլերը պատճենելիս։ Այս հատկությունը հնարավորություն տվեց կազմակերպել ցանկացած ֆայլի ընթերցումը սերվերից՝ ավելացնելով Git-ին խորհրդանշական հղումներ։

Որոշվեց սկսել փորձարկումներ կոտրելու cdnj-ների ցուցադրմամբ՝ HackerOne-ում մրցանակ ստանալու համար՝ ստուգելով ֆայլերի ընթերցման վարկածը: Խորհրդանշական հղում test.js-ն ավելացվել է CDN-ի միջոցով սպասարկվող JavaScript գրադարանի Git պահոցին՝ մատնանշելով /proc/self/maps ֆայլը: Գրադարանի նոր տարբերակը հրապարակելուց հետո թարմացման մշակողը մշակեց այս պահոցը և հրապարակեց նշված ֆայլը cdnjs-ում (test.js-ը ստեղծվել էր որպես խորհրդանշական հղում և երբ այս ֆայլը պահանջվեց, /proc/self/maps-ի բովանդակությունը վերադարձվեց: )

Փոխարինելով խորհրդանշական հղումը /proc/self/environ ֆայլին՝ հետազոտության հեղինակը նկատել է, որ տվյալ տվյալները պարունակում են GITHUB_REPO_API_KEY և WORKERS_KV_API_TOKEN միջավայրի փոփոխականների արժեքները: Առաջին փոփոխականը պահում էր API ստեղնը՝ GitHub-ում robocdnjs շտեմարան գրելու հասանելիության համար: Երկրորդ փոփոխականը պահում էր նշանը KV պահեստում cdnjs-ում: Օգտագործելով ստացված տեղեկատվությունը, հարձակվողը կարող է փոփոխություններ կատարել cdnjs-ում և ամբողջությամբ վտանգի ենթարկել ենթակառուցվածքը:

Source: opennet.ru

Добавить комментарий