Cloudflare serverlarida kodni bajarishga ruxsat beruvchi cdnj-lardagi zaiflik

Cloudflare’ning cdnjs kontent yetkazib berish tarmog‘ida muhim zaiflik aniqlandi, u JavaScript kutubxonalarini yetkazib berishni tezlashtirishga mo‘ljallangan, CDN serverlarida o‘zboshimchalik bilan kod bajarilishiga imkon beradi. Muammoning xavfi Internetdagi barcha saytlarning taxminan 12.7 foizi JavaScript kutubxonalarini yuklab olish xizmatidan foydalanishi va infratuzilmaning buzilishi ushbu saytlarning istalgani tomonidan taqdim etilgan kutubxonalarni almashtirish imkonini berishi bilan yanada kuchayadi.

cdnjs xizmati paketlarni Git yoki NPM omboridan yuklab oladi, shundan so'ng u JavaScript kutubxonalarini yuklashni tezlashtirish uchun istalgan saytga Cloudflare kontent yetkazib berish tarmog'idan bepul foydalanish imkonini beradi. GitHub-da e'lon qilingan cdnjs komponentlarining kodini o'rganayotganda, tgz arxivlarida NPM paketlarini ochish uchun yo'llarni normallashtirmasdan fayllar ro'yxatini yaratadigan Go tilidagi standart arxiv/tar modulidan foydalanilgani ma'lum bo'ldi. . Agar skript berilgan ro'yxat asosida tarkibni ochsa, arxivda "../../../../../../../tmp/test" kabi fayllar mavjudligi mumkin. kirish huquqlari imkon qadar tizimdagi ixtiyoriy fayllarni qayta yozishga olib keladi.

Tajovuzkor o'z kutubxonasini cdnj-larga qo'shish va NPM ombori yo'lida "../" belgilar bilan fayllarni o'z ichiga olgan maxsus ishlab chiqilgan arxivni yuklash uchun ariza berishi mumkinligi taklif qilindi. Cdnjs serverlarida vaqti-vaqti bilan "avtoupdate" operatsiyasi amalga oshiriladi, bunda ishlov beruvchi taklif qilingan kutubxonaning yangi versiyalarini yuklab oladi va tarkibni ochadi. “../” yoʻllari boʻlgan fayllardan foydalanib, tajovuzkor xizmat skriptlari bilan fayllarni qayta yozishi va ularning kodini ochish amalga oshirilgan serverda bajarishi mumkin.

Git-dan yangilanishlarni yuklab olishda, yangilanishlarni yuklab olgan ishlov beruvchi Git-dan fayllarni nusxalashda ramziy havolalarni hisobga olmagani aniqlandi. Bu xususiyat Git-ga ramziy havolalar qo'shish orqali istalgan faylni serverdan o'qishni tashkil qilish imkonini berdi.

Fayllarni o'qish haqidagi gipotezani sinab ko'rish orqali HackerOne-da mukofot olish uchun cdnj-larni buzish namoyishi bilan tajribalarni boshlashga qaror qilindi. CDN orqali xizmat ko'rsatuvchi JavaScript kutubxonasining Git omboriga /proc/self/maps fayliga ishora qiluvchi ramziy havola test.js qo'shildi. Kutubxonaning yangi versiyasini nashr etgandan so'ng, yangilash ishlov beruvchisi ushbu omborni qayta ishladi va belgilangan faylni cdnjs-da nashr etdi (test.js ramziy havola sifatida yaratilgan va bu fayl so'ralganda, /proc/self/maps mazmuni qaytarilgan. ).

/proc/self/environ fayliga ramziy havolani almashtirib, tadqiqot muallifi berilgan ma'lumotlar GITHUB_REPO_API_KEY va WORKERS_KV_API_TOKEN muhit o'zgaruvchilari qiymatlarini o'z ichiga olganligini payqadi. Birinchi o'zgaruvchi GitHub'da robocdnjs omboriga yozish uchun kirish uchun API kalitini saqladi. Ikkinchi o'zgaruvchi tokenni cdnjlarda KV xotirasiga saqladi. Qabul qilingan ma'lumotlardan foydalanib, tajovuzkor cdnj-larga o'zgartirishlar kiritishi va infratuzilmani butunlay buzishi mumkin.

Manba: opennet.ru

a Izoh qo'shish