Kerentanan dalam cdnj yang membenarkan pelaksanaan kod pada pelayan Cloudflare

Kerentanan kritikal telah dikenal pasti dalam rangkaian penghantaran kandungan cdnjs Cloudflare, yang direka untuk mempercepatkan penghantaran perpustakaan JavaScript, membenarkan pelaksanaan kod sewenang-wenangnya pada pelayan CDN. Bahaya masalah ini diperburuk oleh fakta bahawa kira-kira 12.7% daripada semua tapak di Internet menggunakan perkhidmatan untuk memuat turun perpustakaan JavaScript, dan kompromi infrastruktur memungkinkan untuk menggantikan perpustakaan yang disediakan oleh mana-mana tapak ini.

Perkhidmatan cdnjs memuat turun pakej daripada Git atau repositori NPM, selepas itu ia membenarkan mana-mana tapak menggunakan rangkaian penghantaran kandungan Cloudflare secara percuma untuk mempercepatkan pemuatan perpustakaan JavaScript. Apabila mengkaji kod komponen cdnjs yang diterbitkan di GitHub, didapati bahawa untuk membongkar pakej NPM dalam arkib tgz, modul arkib/tar standard dalam bahasa Go digunakan, yang menghasilkan senarai fail sebagaimana adanya, tanpa menormalkan laluan . Dalam kes apabila skrip membongkar kandungan berdasarkan senarai yang diberikan, kehadiran dalam arkib fail seperti "../../../../../../../tmp/test" boleh membawa kepada menimpa fail sewenang-wenangnya dalam sistem, setakat yang dibenarkan oleh hak akses.

Adalah dicadangkan bahawa penyerang boleh memohon untuk menambahkan pustakanya pada cdnjs dan memuat naik arkib direka khas yang mengandungi fail dengan aksara β€œ../” dalam laluan ke repositori NPM. Pada pelayan cdnjs, operasi "kemas kini automatik" dilakukan secara berkala, di mana pengendali memuat turun versi baharu perpustakaan yang dicadangkan dan membongkar kandungannya. Menggunakan fail dengan laluan "../", penyerang boleh menulis ganti fail dengan skrip perkhidmatan dan melaksanakan kod mereka pada pelayan di mana pembongkaran dilakukan.

Dalam kes memuat turun kemas kini daripada Git, didapati bahawa pengendali yang memuat turun kemas kini tidak mengambil kira pautan simbolik semasa menyalin fail daripada Git. Ciri ini memungkinkan untuk mengatur pembacaan mana-mana fail dari pelayan dengan menambah pautan simbolik ke Git.

Ia telah memutuskan untuk memulakan eksperimen dengan demonstrasi penggodaman cdnjs untuk menerima hadiah di HackerOne dengan menguji hipotesis mengenai pembacaan fail. Test.js pautan simbolik telah ditambahkan pada repositori Git pustaka JavaScript yang disampaikan melalui CDN, menunjuk ke fail /proc/self/maps. Selepas menerbitkan versi baharu pustaka, pengendali kemas kini memproses repositori ini dan menerbitkan fail yang ditentukan dalam cdnjs (test.js telah dicipta sebagai pautan simbolik dan apabila fail ini diminta, kandungan /proc/self/maps dikembalikan ).

Menggantikan pautan simbolik kepada fail /proc/self/environ, pengarang kajian mendapati bahawa data yang diberikan mengandungi nilai pembolehubah persekitaran GITHUB_REPO_API_KEY dan WORKERS_KV_API_TOKEN. Pembolehubah pertama menyimpan kunci API untuk akses tulis kepada repositori robocdnjs di GitHub. Pembolehubah kedua menyimpan token ke storan KV dalam cdnjs. Menggunakan maklumat yang diterima, penyerang boleh membuat perubahan pada cdnjs dan menjejaskan sepenuhnya infrastruktur.

Sumber: opennet.ru

Tambah komen