Nedavno je vijest objavila to Utvrđena je kritična ranjivost u spremište paketa rubygems.org (ranjivost je već katalogizirana pod CVE-2022-29176), što dopustiti bez odgovarajućeg ovlaštenja, zamijeniti tuđe pakete u repozitoriju tako da povučete legitimni paket i učitate drugu datoteku s istim imenom i brojem verzije umjesto nje.
Spominje se da ranjivost je uzrokovana greškom u rukovatelju akcijama "yank"., koji dio imena nakon crtice tretira kao naziv platforme, što je omogućilo pokretanje uklanjanja vanjskih paketa koji odgovaraju dijelu imena do znaka crtice.
Osobito u kodu kontrolera operacije "jank", poziv 'find_by!(puno_naziv: "#{rubygem.name}-#{slug}")' je korišten za traženje paketa, dok je parametar "slug" proslijeđen vlasniku paketa da odredi verziju koju treba ukloniti.
Vlasnik paketa "rails-html" mogao je navesti "sanitizer-1.2.3" umjesto verzije "1.2.3", š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 bug koji je dopuštao zlonamjernom korisniku da rudari određene dragulje i učitava različite datoteke s istim imenom, brojem verzije i različitom platformom.
Pogledajmo dublje da vidimo što je pošlo po zlu tijekom procesa ekstrakcije. Kao izgovor, zamislimo scenarij u kojem stvaramo dragulj pod nazivom "rails-html" s namjerom da dobijemo neovlašteni pristup široko korištenom dragulju "rails-html-sanitizer".
Spominje se da moraju biti ispunjena tri uvjeta, kako biste uspješno iskoristili ovu ranjivost:
- Napad se može izvesti samo na pakete koji u svom nazivu imaju crticu.
- Napadač bi trebao biti u mogućnosti staviti paket dragulja s dijelom imena sve do znaka 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 zadnjih 30 dana ili nije ažuriran 100 dana.
problem identificiran od strane istraživača sigurnosti kao dio HackerOne bounty programa za pronalaženje sigurnosnih problema u poznatim projektima otvorenog koda.
problem popravljeno na RubyGems.org 5. svibnja a prema programerima, još nisu identificirali tragove eksploatacije ranjivosti u zapisnicima za posljednjih 18 mjeseci. Pritom je do sada provedena samo površna revizija, au budućnosti se planira dublja revizija.
Trenutno vjerujemo da ova ranjivost nije iskorištena.
RubyGems.org šalje e-poštu svim vlasnicima dragulja kada se verzija dragulja objavi ili ukloni. Nismo primili nikakvu e-poruku podrške od vlasnika dragulja koji ukazuju na to da je njihov dragulj iskopan bez ovlaštenja.
Revizija promjena dragulja u posljednjih 18 mjeseci nije pronašla primjere zlonamjerne upotrebe ove ranjivosti. Daljnja revizija za bilo kakvu moguću upotrebu ovog iskorištavanja nije pronašla niti jedan primjer korištenja ovog exploit-a za preuzimanje dragulja bez ovlaštenja u povijesti RubyGemsa. Ne možemo jamčiti da se to nikada nije dogodilo, ali ne čini se vjerojatnim.
Da biste provjerili svoje projekte, preporuča se analizirati povijest operacija u datoteci Gemfile.lock Zlonamjerna aktivnost se izražava u prisutnosti promjena s istim imenom i verzijom ili promjenom platforme (na primjer, kada paket xxx-1.2.3 1.2.3 je ažuriran na xxx-XNUMX-xxx).
Kao rješenje protiv lažiranja skrivenih paketa u sustavima kontinuirane integracije ili prilikom objavljivanja projekata, Programerima se preporučuje korištenje Bundlera s opcijama "-zamrznuto" ili "-razmještanje" za potvrdu ovisnosti.
Konačno, ako vas zanima više o tome, detalje možete provjeriti u sljedeći link.