Kerentanan dina cdnjs anu ngamungkinkeun palaksanaan kode dina server Cloudflare

Kerentanan kritis parantos diidentifikasi dina jaringan pangiriman eusi cdnjs Cloudflare, anu dirancang pikeun nyepetkeun pangiriman perpustakaan JavaScript, ngamungkinkeun palaksanaan kode sawenang dina server CDN. Bahaya masalah ieu diperparah ku kanyataan yén sakitar 12.7% tina sadaya situs dina Internét nganggo jasa pikeun ngaunduh perpustakaan JavaScript, sareng kompromi infrastruktur ngamungkinkeun pikeun ngagentos perpustakaan anu disayogikeun ku salah sahiji situs ieu.

Ladenan cdnjs ngaunduh bungkusan tina Git atanapi repositori NPM, saatos éta ngamungkinkeun situs mana waé nganggo jaringan pangiriman kontén Cloudflare sacara gratis pikeun nyepetkeun ngamuat perpustakaan JavaScript. Nalika ngulik kodeu komponén cdnjs anu diterbitkeun dina GitHub, diungkabkeun yén pikeun ngabongkar bungkusan NPM dina arsip tgz, modul arsip / tar standar dina basa Go dianggo, anu ngahasilkeun daptar file sapertos kitu, tanpa normalisasi jalur. . Dina kasus nalika naskah ngabongkar eusi dumasar kana daptar anu dipasihkeun, ayana dina arsip file sapertos "../../../../../../../tmp/test" tiasa ngakibatkeun overwriting file sawenang dina sistem, sajauh hak aksés ngidinan.

Disarankeun yén panyerang tiasa nerapkeun pikeun nambihan perpustakaan na kana cdnjs sareng unggah arsip anu dirarancang khusus anu ngandung file kalayan karakter "../" dina jalur ka Repositori NPM. Dina server cdnjs, operasi "autoupdate" dilaksanakeun périodik, nalika pawang ngaunduh vérsi énggal tina perpustakaan anu diusulkeun sareng ngabongkar eusina. Nganggo file nganggo jalur "../", panyerang tiasa nimpa file nganggo skrip jasa sareng ngaéksekusi kodena dina server tempat ngabongkar bungkusan dilaksanakeun.

Dina kasus ngundeur apdet ti Git, éta kapanggih yén pawang ngundeur apdet teu merhatikeun tumbu simbolis nalika nyalin file ti Git. Fitur ieu ngamungkinkeun pikeun ngatur pamacaan file tina server ku cara nambihan tautan simbolis ka Git.

Diputuskeun pikeun ngamimitian ékspérimén kalayan demonstrasi hacking cdnjs pikeun nampi hadiah di HackerOne ku nguji hipotésis ngeunaan maca file. A test.js link simbolis geus ditambahkeun kana Repository Git perpustakaan JavaScript dilayanan via CDN, ngarah ka /proc/self/maps file. Saatos medarkeun versi anyar perpustakaan, panangan update ngolah gudang ieu sareng nyebarkeun file anu ditangtukeun dina cdnjs (test.js didamel salaku tautan simbolis sareng nalika file ieu dipénta, eusi /proc/self/maps dipulangkeun. ).

Ngaganti tautan simbolis kana file /proc/self/lingkungan, panulis panilitian perhatikeun yén data anu dipasihkeun ngandung nilai-nilai variabel lingkungan GITHUB_REPO_API_KEY sareng WORKERS_KV_API_TOKEN. Variabel munggaran nyimpen konci API pikeun aksés nulis kana gudang robocdnjs on GitHub. Variabel kadua nyimpen token ka panyimpenan KV di cdnjs. Nganggo inpormasi anu ditampi, panyerang tiasa ngadamel parobihan kana cdnjs sareng lengkep kompromi infrastruktur.

sumber: opennet.ru

Tambahkeun komentar