Ranjivost na RubyGems.org koja dopušta lažiranje tuđih paketa

U repozitoriju paketa RubyGems.org identificirana je kritična ranjivost (CVE-2022-29176) koja omogućuje, bez odgovarajuće ovlasti, zamjenu paketa nekih drugih ljudi u repozitoriju pokretanjem povlačenja legitimnog paketa i učitavanjem na njegovo mjesto drugu datoteku s istim imenom i brojem verzije.

Za uspješno iskorištavanje ranjivosti moraju biti ispunjena tri uvjeta:

  • Napad se može izvesti samo na pakete koji u nazivu imaju crticu.
  • Napadač mora moći staviti paket dragulja s dijelom imena ispred znaka crtice. Na primjer, ako je napad na paket "rails-html-sanitizer", napadač mora staviti svoj vlastiti paket "rails-html" u repozitorij.
  • Paket koji se napada mora biti kreiran u zadnjih 30 dana ili nije ažuriran 100 dana.

Ranjivost je uzrokovana greškom u “yank” rukovatelju akcijom, koji tumači dio imena iza crtice kao naziv platforme, što je omogućilo pokretanje brisanja stranih paketa koji odgovaraju dijelu imena ispred crtice. Konkretno, u kodu rukovatelja "yank" poziv 'find_by!(full_name: "#{rubygem.name}-#{slug}")" korišten je za pronalaženje paketa, dok je parametar "slug" proslijeđen od strane vlasnik paketa za određivanje verzije koju treba ukloniti. Vlasnik paketa "rails-html" mogao bi navesti "sanitizer-1.2.3" umjesto verzije "1.2.3", što bi uzrokovalo primjenu operacije na tuđi paket "rails-html-sanitizer-1.2.3 ".

Problem je identificirao sigurnosni istraživač kao dio programa nagrade HackerOne za pronalaženje sigurnosnih problema u poznatim projektima otvorenog koda. Problem je riješen na RubyGems.org 5. svibnja i prema programerima, još nisu identificirali nikakve tragove iskorištavanja ranjivosti u zapisnicima tijekom proteklih 18 mjeseci. Istodobno, do sada je obavljena samo površna revizija, au budućnosti je planirana dublja revizija.

Da biste provjerili svoje projekte, preporuča se analizirati povijest operacija u datoteci Gemfile.lock; zlonamjerna aktivnost se izražava u prisutnosti promjena uz očuvanje imena i verzije ili promjenu platforme (na primjer, kada gemname -1.2.3 paket je ažuriran na gemname-1.2.3-java). Kao zaobilazno rješenje za zaštitu od skrivene zamjene paketa u kontinuiranim integracijskim sustavima ili prilikom objavljivanja projekata, programerima se preporučuje korištenje Bundlera s opcijama "-frozen" ili "-deployment" za popravljanje ovisnosti.

Izvor: opennet.ru

Dodajte komentar