Nedavno je objavljeno da je u repozitoriju paketa RubyGems.org identifikovana kritična ranjivost (ranjivost je već katalogizirana pod CVE-2022-29176), koja omogućava , bez odgovarajuće autorizacije, zamjenu tuđih paketa u repozitoriju iniciranjem povlačenja (yank-a) legitimnog paketa i postavljanjem druge datoteke s istim imenom i brojem verzije na njegovo mjesto.
Spominje se da je ranjivost uzrokovana greškom u obrađivaču akcije "yank" , koji tretira dio imena nakon crtice kao ime platforme, omogućavajući pokretanje uklanjanja eksternih paketa koji se podudaraju u dijelu imena do znaka crtice.
Konkretno, u kodu rukovatelja operacijom "yank", poziv 'find_by!(full_name: "#{rubygem.name}-#{slug}")' je korišten za pretraživanje paketa, dok je parametar "slug" proslijeđen vlasniku paketa kako bi se odredila verzija koju treba ukloniti.
Vlasnik paketa "rails-html" je mogao navesti "sanitizer-1.2.3" umjesto "1.2.3" verzije, što bi dovelo do primjene operacije na "rails-html-sanitizer-1.2.3" paket ″ od nekog drugog. »
Jučer je objavljen sigurnosni savjet za Rubygems.org.
Upozorenje se odnosilo na grešku koja je dozvoljavala zlonamjernom korisniku da iskopa određene dragulje i učita različite datoteke s istim imenom, brojem verzije i različitom platformom.
Pogledajmo dublje da vidimo šta je pošlo po zlu dok prolazimo kroz proces ekstrakcije. Kao izgovor, zamislimo scenario u kojem kreiramo dragulj pod nazivom "rails-html" s namjerom da dobijemo neovlašteni pristup široko korišćenom dragulju "rails-html-sanitizer".
Navodi se da moraju biti ispunjena tri uslova kako bi se uspješno iskoristila ova ranjivost:
- Napad se može izvesti samo na pakete koji imaju crticu u svom imenu.
- Napadač bi trebao biti u mogućnosti da stavi paket dragulja s dijelom imena sve do crtice. Na primjer, ako je napad na paket "rails-html-sanitizer", napadač mora staviti svoj vlastiti paket "rails-html" u spremište.
- Napadnuti paket mora biti kreiran u posljednjih 30 dana ili nije ažuriran 100 dana.
Problem je identificirao istraživač sigurnosti kao dio HackerOneovog programa nagrađivanja za pronalaženje sigurnosnih problema u poznatim projektima otvorenog koda.
Problem je riješen na RubyGems.org 5. maja , i prema riječima programera, još uvijek nisu identificirali nikakve tragove iskorištavanja ranjivosti u zapisnicima u proteklih 18 mjeseci. Međutim, do sada je provedena samo površna revizija, a detaljnija revizija je planirana za budućnost.
Trenutno vjerujemo da ova ranjivost nije iskorištena.
RubyGems.org šalje e-poštu svim vlasnicima dragulja kada se verzija gema objavi ili ukloni. Nismo primili nikakve e-poruke podrške od vlasnika dragulja koji ukazuju na to da je njihov dragulj iskopan bez ovlaštenja.
Revizija promjena dragulja u proteklih 18 mjeseci nije pronašla primjere zlonamjerne upotrebe ove ranjivosti. Daljnjom revizijom za bilo kakvu moguću upotrebu ovog eksploatiranja nije pronađen nijedan primjer da se ovaj eksploat koristi za preuzimanje dragulja bez ovlaštenja u istoriji RubyGemsa. Ne možemo garantovati da se to nikada nije dogodilo, ali ne izgleda vjerovatno.
Da biste provjerili svoje projekte, preporučuje se da analizirate historiju operacija u datoteci Gemfile.lock Zlonamjerna aktivnost se izražava u prisustvu promjena s istim imenom i verzijom, ili promjene platforme (na primjer, kada paket xxx-1.2.3 1.2.3 je ažuriran na xxx-XNUMX-xxx).
Kao rješenje protiv lažnog predstavljanja skrivenih paketa u sistemima kontinuirane integracije ili prilikom objavljivanja projekata, programerima se savjetuje korištenje Bundlera s opcijama "--frozen" ili "--deployment" za potvrdu zavisnosti.
Konačno, ako ste zainteresirani da saznate više o ovome , detalje možete pronaći na sljedećem linku.