Cloudflare серверүүд дээр код гүйцэтгэхийг зөвшөөрсөн cdnj-ийн эмзэг байдал

Cloudflare-ийн cdnjs контент түгээх сүлжээнд чухал эмзэг байдал илэрсэн бөгөөд энэ нь JavaScript сангуудын хүргэлтийг хурдасгах зорилготой бөгөөд CDN серверүүд дээр дурын кодыг гүйцэтгэх боломжийг олгодог. Интернет дэх нийт сайтуудын 12.7 орчим хувь нь JavaScript сангуудыг татаж авах үйлчилгээг ашигладаг бөгөөд дэд бүтцийн эвдрэл нь эдгээр сайтуудын аль нэгээр нь олгосон номын санг солих боломжтой болж байгаа нь асуудлын аюулыг улам хүндрүүлж байна.

cdnjs үйлчилгээ нь Git эсвэл NPM репозитороос багцуудыг татаж авдаг бөгөөд үүний дараа ямар ч сайтад JavaScript сангуудыг ачаалах ажлыг хурдасгахын тулд Cloudflare контент хүргэх сүлжээг үнэгүй ашиглах боломжийг олгодог. GitHub дээр нийтлэгдсэн cdnjs бүрэлдэхүүн хэсгүүдийн кодыг судалж үзэхэд tgz архивт NPM багцуудыг задлахад Go хэлний стандарт архив/tar модулийг ашигладаг бөгөөд энэ нь замуудыг хэвийн болгохгүйгээр файлуудын жагсаалтыг байгаагаар нь гаргадаг болох нь тогтоогджээ. . Скрипт нь өгөгдсөн жагсаалтад үндэслэн агуулгыг задлах тохиолдолд архивт "../../../../../../../tmp/test" гэх мэт файлууд байгаа эсэх. хандалтын эрхийг зөвшөөрвөл системд дурын файлуудыг дарж бичихэд хүргэдэг.

Халдагчид өөрийн номын санг cdnj-д нэмэх хүсэлт гаргаж, NPM репозитор руу "../" тэмдэгт бүхий файлуудыг агуулсан тусгайлан боловсруулсан архивыг байршуулах боломжтой гэж үзсэн. cdnjs серверүүд дээр "автоматаар шинэчлэх" үйлдлийг үе үе гүйцэтгэдэг бөгөөд энэ үед зохицуулагч нь санал болгож буй номын сангийн шинэ хувилбаруудыг татаж аваад агуулгыг задалдаг. “../” замтай файлуудыг ашигласнаар халдагчид үйлчилгээний скрипт бүхий файлуудыг дарж бичиж, задлах ажиллагаа явуулсан сервер дээр кодыг нь ажиллуулж болно.

Git-ээс шинэчлэлтүүдийг татаж авах тохиолдолд шинэчлэлтийг татаж байгаа зохицуулагч нь Git-ээс файл хуулахдаа симбол холбоосыг харгалзаагүй нь тогтоогдсон. Энэ функц нь Git-д симбол холбоосыг нэмж серверээс дурын файлуудыг унших ажлыг зохион байгуулах боломжийг олгосон.

Файл уншихтай холбоотой таамаглалыг шалгах замаар HackerOne дээр шагнал авахын тулд cdnjs-ийг хакердах туршилтыг эхлүүлэхээр шийдсэн. CDN-ээр дамжуулан үйлчилдэг JavaScript номын сангийн Git санд /proc/self/maps файлыг заадаг симбол холбоос test.js нэмэгдсэн. Номын сангийн шинэ хувилбарыг нийтлэсний дараа шинэчлэлт зохицуулагч энэ агуулахыг боловсруулж, заасан файлыг cdnjs-д нийтэлсэн (test.js нь симбол холбоос хэлбэрээр үүсгэгдсэн бөгөөд энэ файлыг хүсэх үед /proc/self/maps-ын агуулгыг буцааж өгсөн. ).

Судалгааны зохиогч /proc/self/environ файлын симбол холбоосыг орлуулснаар өгөгдсөн өгөгдөл нь GITHUB_REPO_API_KEY болон WORKERS_KV_API_TOKEN орчны хувьсагчийн утгыг агуулж байгааг анзаарчээ. Эхний хувьсагч нь GitHub дээрх robocdnjs репозитор руу бичих хандалтын API түлхүүрийг хадгалсан. Хоёрдахь хувьсагч нь токеныг cdnjs-д KV хадгалах санд хадгалсан. Хүлээн авсан мэдээллийг ашиглан халдагчид cdnj-д өөрчлөлт оруулж, дэд бүтцийг бүрэн сүйтгэж болзошгүй.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх