V repozitoriju paketov RubyGems.org je bila odkrita kritična ranljivost (CVE-2022-29176), ki omogoča zamenjavo nekaterih tujih paketov v repozitoriju brez ustreznih pooblastil, tako da se izvede umik (yank) legitimnega paketa in naloži drug datoteko z istim imenom in različico namesto njega.
Za uspešno izkoriščanje ranljivosti je potrebno, da so izpolnjeni trije pogoji:
- Napad je mogoč le na pakete, katerih ime vsebuje znak vezaja.
- Napadalec mora imeti možnost, da naloži gem-paket z delom imena pred znakom vezaja. Na primer, če se napad izvaja na paketu «rails-html-sanitizer», mora napadalec v repozitorij naložiti svoj paket «rails-html».
- Paket, na katerega se napadi, mora biti ustvarjen v zadnjih 30 dneh ali pa se v zadnjih 100 dneh ni posodabljal.
Ranljivost je povzročena zaradi napake v obravnavi dejanja «yank», ki obravnava del imena po vezaju kot ime platforme, kar je omogočilo izvajanje brisanja tujih paketov, ki se ujemajo z delom imena pred znakom vezaja. Zlasti je v kodi obravnave operacije «yank» za iskanje paketov bila uporabljena koda ‘find_by!(full_name: «#{rubygem.name}-#{slug}»)’, pri čemer je bil parameter «slug» posredovan lastniku paketa za določitev različice, ki se briše. Lastnik paketa «rails-html» je namesto različice «1.2.3» lahko navedel «sanitizer-1.2.3», kar bi povzročilo izvajanje operacije na tujem paketu «rails-html-sanitizer-1.2.3».
Težavo je odkril raziskovalec varnosti v okviru aktivnega programa nagrajevanja za iskanje varnostnih težav v znanih odprtih projektih na HackerOne. Težava je bila odpravljena na RubyGems.org 5. maja, in po trditvah razvijalcev za zdaj niso odkrili sledi izkoriščanja ranljivosti v zapisih za zadnjih 18 mesecev. Opravljen je bil le površinski pregled, v prihodnje pa je načrtovana temeljitejša presoja.
Za preizkušanje svojih projektov je priporočljivo analizirati zgodovino operacij v datoteki Gemfile.lock. Zlonamerne aktivnosti se kažejo v prisotnosti sprememb ob ohranitvi imena in različice ali pri prehodu na drugo platformo (na primer, ko je paket gemname-1.2.3 posodobljen na gemname-1.2.3-java). Kot obhodna metoda zaščite pred prikrito zamenjavo paketov v sistemih neprekinjene integracije ali pri objavi projektov se razvijalcem priporoča uporaba Bundlerja z možnostmi "—frozen" ali "—deployment" za fiksiranje odvisnosti.
Izvor: opennet.ru
