Kerentanan dalam RubyGems.org yang membenarkan pemalsuan pakej orang lain

Kerentanan kritikal (CVE-2022-29176) telah dikenal pasti dalam repositori pakej RubyGems.org, yang membenarkan, tanpa kebenaran yang sewajarnya, untuk menggantikan beberapa pakej orang lain dalam repositori dengan memulakan sentakan pakej yang sah dan memuatkan di tempatnya fail lain dengan nama dan nombor versi yang sama.

Untuk berjaya mengeksploitasi kelemahan, tiga syarat mesti dipenuhi:

  • Serangan hanya boleh dilakukan pada paket yang mempunyai tanda sempang dalam nama mereka.
  • Penyerang mesti boleh meletakkan pakej permata dengan sebahagian daripada nama sebelum aksara sempang. Sebagai contoh, jika serangan adalah pada pakej "rails-html-sanitizer", penyerang mesti meletakkan pakej "rails-html" sendiri dalam repositori.
  • Pakej yang diserang mesti telah dibuat dalam tempoh 30 hari yang lalu atau tidak dikemas kini selama 100 hari.

Kerentanan disebabkan oleh ralat dalam pengendali tindakan "yank", yang mentafsir bahagian nama selepas tanda sempang sebagai nama platform, yang memungkinkan untuk memulakan pemadaman pakej asing yang sepadan dengan bahagian nama sebelum tanda sempang. Khususnya, dalam kod pengendali "yank", panggilan 'find_by!(full_name: "#{rubygem.name}-#{slug}")" digunakan untuk mencari pakej, manakala parameter "slug" diluluskan oleh pemilik pakej untuk menentukan versi yang akan dialih keluar. Pemilik pakej "rails-html" boleh menentukan "sanitizer-1.2.3" dan bukannya versi "1.2.3", yang akan menyebabkan operasi digunakan pada pakej orang lain "rails-html-sanitizer-1.2.3 ".

Isu ini dikenal pasti oleh penyelidik keselamatan sebagai sebahagian daripada program hadiah HackerOne untuk mencari isu keselamatan dalam projek sumber terbuka yang diketahui. Masalah itu telah dibetulkan dalam RubyGems.org pada 5 Mei dan menurut pembangun, mereka masih belum mengenal pasti sebarang kesan eksploitasi terhadap kelemahan dalam log sejak 18 bulan lalu. Pada masa yang sama, hanya audit cetek telah dijalankan setakat ini dan audit yang lebih mendalam dirancang pada masa hadapan.

Untuk menyemak projek anda, adalah disyorkan untuk menganalisis sejarah operasi dalam fail Gemfile.lock; aktiviti berniat jahat dinyatakan dengan kehadiran perubahan dengan pemeliharaan nama dan versi atau perubahan platform (contohnya, apabila nama permata Pakej -1.2.3 dikemas kini kepada gemname-1.2.3-java). Sebagai penyelesaian untuk melindungi daripada penggantian pakej tersembunyi dalam sistem penyepaduan berterusan atau semasa menerbitkan projek, pembangun disyorkan untuk menggunakan Bundler dengan pilihan "-frozen" atau "-deployment" untuk membetulkan kebergantungan.

Sumber: opennet.ru

Tambah komen