Objavili zraniteľnosť v RubyGems.org, ktorá umožňovala nahradiť balíčky

Nedávno bolo oznámené, že v repozitári balíkov RubyGems.org bola identifikovaná kritická zraniteľnosť (zraniteľnosť je už katalogizovaná pod CVE-2022-29176), ktorá umožňuje bez riadneho oprávnenia nahradiť balíky iných ľudí v repozitári iniciovaním stiahnutia (yank) legitímneho balíka a nahratím iného súboru s rovnakým názvom a číslom verzie namiesto neho.

Uvádza sa, že zraniteľnosť je spôsobená chybou v obslužnom programe akcie „yank“ , ktorý považuje časť názvu za pomlčkou za názov platformy, čo umožňuje iniciovať odstránenie externých balíkov, ktoré sa zhodujú v časti názvu až po znak pomlčky.

Konkrétne v kóde obslužného programu operácie „yank“ sa volanie „find_by!(full_name: "#{rubygem.name}-#{slug}")“ používalo na vyhľadávanie balíkov, zatiaľ čo parameter „slug“ sa odovzdával vlastníkovi balíka na určenie verzie, ktorá sa má odstrániť.

Vlastník balíka „rails-html“ mohol zadať „sanitizer-1.2.3“ namiesto verzie „1.2.3“, čo by spôsobilo, že sa operácia použije na „rails-html-sanitizer-1.2.3“ balík ″ od niekoho iného. »

Včera bolo zverejnené bezpečnostné odporúčanie pre Rubygems.org.

Upozornenie sa týkalo chyby, ktorá umožňovala používateľovi so zlými úmyslami ťažiť určité drahokamy a nahrávať rôzne súbory s rovnakým názvom, číslom verzie a inou platformou.

Pozrime sa hlbšie, aby sme zistili, čo sa pokazilo počas procesu extrakcie. Ako zámienku si predstavme scenár, že vytvoríme drahokam s názvom „rails-html“ s úmyslom získať neoprávnený prístup k veľmi používanému drahokamu „rails-html-sanitizer“.

Uvádza sa, že na úspešné zneužitie tejto zraniteľnosti musia byť splnené tri podmienky :

  • Útok je možné vykonať len na pakety, ktoré majú v názve znak pomlčky.
  • Útočník by mal byť schopný umiestniť balíček drahokamov s časťou mena až po znak pomlčky. Napríklad, ak je útok namierený proti balíku „rails-html-sanitizer“, útočník musí umiestniť svoj vlastný balík „rails-html“ do úložiska.
  • Napadnutý balík musel byť vytvorený za posledných 30 dní alebo nebol aktualizovaný 100 dní.

Problém identifikoval bezpečnostný výskumník v rámci odmeňovacieho programu HackerOne, ktorého cieľom je nájsť bezpečnostné problémy v známych open-source projektoch.

Problém bol na RubyGems.org opravený 5. mája a podľa vývojárov zatiaľ za posledných 18 mesiacov neidentifikovali žiadne stopy zneužitia zraniteľnosti v protokoloch. Zatiaľ však bol vykonaný iba povrchný audit a v budúcnosti sa plánuje hlbší audit.

V súčasnosti sa domnievame, že táto zraniteľnosť nebola zneužitá.

RubyGems.org pošle e-mail všetkým vlastníkom drahokamov, keď je verzia drahokamu uvoľnená alebo odstránená. Od vlastníkov drahokamov sme nedostali žiadne e-maily s podporou, ktoré by poukazovali na to, že ich drahokam bol vyťažený bez povolenia.

Audit zmien drahokamov za posledných 18 mesiacov nenašiel žiadne príklady škodlivého použitia tejto zraniteľnosti. Ďalší audit akéhokoľvek možného použitia tohto exploitu nezistil žiadny prípad použitia tohto exploitu na prevzatie drahokamu bez autorizácie v histórii RubyGems. Nemôžeme zaručiť, že sa to nikdy nestalo, ale nezdá sa to pravdepodobné.

Na overenie vašich projektov sa odporúča analyzovať históriu operácií v súbore Gemfile.lock Škodlivá aktivita sa prejavuje v prítomnosti zmien s rovnakým názvom a verziou, alebo pri zmene platformy (napríklad keď balík xxx-1.2.3 1.2.3 sa aktualizuje na xxx-XNUMX-xxx).

Ako riešenie proti zosobneniu skrytých balíkov v systémoch kontinuálnej integrácie alebo pri publikovaní projektov sa vývojárom odporúča používať Bundler s možnosťami „--frozen“ alebo „--deployment“ na potvrdenie závislostí.

Na záver, ak sa chcete o tom dozvedieť viac , podrobnosti nájdete na nasledujúcom odkaze.


Pridať ako preferovaný zdroj v Google