Bregusrwydd mewn cdnjs a oedd yn caniatáu gweithredu cod ar weinyddion Cloudflare

Mae bregusrwydd critigol wedi'i nodi yn rhwydwaith darparu cynnwys cdnjs Cloudflare, sydd wedi'i gynllunio i gyflymu'r broses o ddarparu llyfrgelloedd JavaScript, gan ganiatáu gweithredu cod mympwyol ar weinyddion CDN. Mae perygl y broblem yn cael ei waethygu gan y ffaith bod tua 12.7% o'r holl wefannau ar y Rhyngrwyd yn defnyddio'r gwasanaeth i lawrlwytho llyfrgelloedd JavaScript, ac mae cyfaddawdu'r seilwaith yn ei gwneud hi'n bosibl disodli'r llyfrgelloedd a ddarperir gan unrhyw un o'r gwefannau hyn.

Mae'r gwasanaeth cdnjs yn lawrlwytho pecynnau o Git neu ystorfa NPM, ac ar ôl hynny mae'n caniatáu i unrhyw wefan ddefnyddio rhwydwaith darparu cynnwys Cloudflare am ddim i gyflymu llwytho llyfrgelloedd JavaScript. Wrth astudio cod y cydrannau cdnjs a gyhoeddwyd ar GitHub, datgelwyd er mwyn dadbacio pecynnau NPM mewn archifau tgz, bod y modiwl archif/tar safonol yn yr iaith Go yn cael ei ddefnyddio, sy'n cynhyrchu rhestr o ffeiliau fel y mae, heb normaleiddio'r llwybrau . Yn yr achos pan fydd y sgript yn dadbacio'r cynnwys yn seiliedig ar y rhestr a roddir, gall presenoldeb yn yr archif o ffeiliau fel “../../../../../../../tmp/test” arwain at drosysgrifo ffeiliau mympwyol yn y system, cyn belled ag y mae hawliau mynediad yn caniatáu.

Awgrymwyd y gallai ymosodwr wneud cais i ychwanegu ei lyfrgell at cdnjs a lanlwytho archif a ddyluniwyd yn arbennig yn cynnwys ffeiliau gyda nodau “../” yn y llwybr i gadwrfa NPM. Ar weinyddion cdnjs, mae gweithrediad "awto-ddiweddaru" yn cael ei berfformio o bryd i'w gilydd, pan fydd y triniwr yn lawrlwytho fersiynau newydd o'r llyfrgell arfaethedig ac yn dadbacio'r cynnwys. Gan ddefnyddio ffeiliau gyda llwybrau “../”, gall ymosodwr drosysgrifo ffeiliau gyda sgriptiau gwasanaeth a gweithredu eu cod ar y gweinydd y cyflawnwyd y dadbacio arno.

Yn achos lawrlwytho diweddariadau o Git, darganfuwyd nad oedd y triniwr a oedd yn lawrlwytho'r diweddariadau yn ystyried dolenni symbolaidd wrth gopïo ffeiliau o Git. Roedd y nodwedd hon yn ei gwneud hi'n bosibl trefnu darllen unrhyw ffeiliau o'r gweinydd trwy ychwanegu dolenni symbolaidd i Git.

Penderfynwyd dechrau arbrofion gydag arddangosiad o hacio cdnjs i dderbyn gwobr yn HackerOne trwy brofi'r ddamcaniaeth ynghylch darllen ffeiliau. Mae test.js cyswllt symbolaidd wedi'i ychwanegu at ystorfa Git y llyfrgell JavaScript a wasanaethir trwy CDN, gan bwyntio at y ffeil /proc/self/maps. Ar ôl cyhoeddi fersiwn newydd o'r llyfrgell, prosesodd y triniwr diweddaru'r gadwrfa hon a chyhoeddi'r ffeil penodedig yn cdnjs (crëwyd test.js fel dolen symbolaidd a phan ofynnwyd am y ffeil hon, dychwelwyd cynnwys /proc/self/maps ).

Gan amnewid dolen symbolaidd i'r ffeil /proc/self/environ, sylwodd awdur yr astudiaeth fod y data a roddwyd yn cynnwys gwerthoedd y newidynnau amgylchedd GITHUB_REPO_API_KEY a WORKERS_KV_API_TOKEN. Roedd y newidyn cyntaf yn storio'r allwedd API ar gyfer ysgrifennu mynediad i'r ystorfa robocdnjs ar GitHub. Roedd yr ail newidyn yn storio'r tocyn i'r storfa KV mewn cdnjs. Gan ddefnyddio'r wybodaeth a dderbyniwyd, gallai'r ymosodwr wneud newidiadau i cdnjs a pheryglu'r seilwaith yn llwyr.

Ffynhonnell: opennet.ru

Ychwanegu sylw