Natuklasan nila ang isang kahinaan sa RubyGems.org na nagpapahintulot na palitan ang mga pakete

Kamakailan ay inanunsyo na isang kritikal na kahinaan ang natukoy sa repositoryo ng pakete ng RubyGems.org (ang kahinaan ay nakalista na sa ilalim ng CVE-2022-29176), na nagpapahintulot , nang walang wastong pahintulot, sa pagpapalit ng mga pakete ng ibang tao sa repositoryo sa pamamagitan ng pagsisimula ng pag-alis (yank) ng isang lehitimong pakete at pag-upload ng isa pang file na may parehong pangalan at numero ng bersyon kapalit nito.

Nabanggit na ang kahinaan ay dahil sa isang bug sa "yank" action handler , na tinatrato ang bahagi ng pangalan pagkatapos ng gitling bilang pangalan ng platform, na ginagawang posible ang pagsisimula ng pag-alis ng mga panlabas na pakete na tumutugma sa bahagi ng pangalan hanggang sa karakter ng gitling.

Sa partikular, sa code ng "yank" operation handler, ang tawag na 'find_by!(full_name: "#{rubygem.name}-#{slug}")' ay ginamit upang maghanap ng mga pakete, habang ang parameter na "slug" ay ipinasa sa may-ari ng pakete upang matukoy ang bersyon na aalisin.

Maaaring tinukoy ng may-ari ng package na "rails-html" ang "sanitizer-1.2.3" sa halip na ang bersyon na "1.2.3", na magiging sanhi ng paglalapat ng operasyon sa "rails-html-sanitizer-1.2.3" package ″ mula sa ibang tao. »

Isang security advisory para sa Rubygems.org ang nai-publish kahapon.

Ang advisory ay may kinalaman sa isang bug na nagpapahintulot sa isang malisyosong user na magmina ng ilang mga hiyas at mag-upload ng iba't ibang mga file na may parehong pangalan, numero ng bersyon, at ibang platform.

Tingnan natin nang mas malalim para makita kung ano ang mali habang dumadaan sa proseso ng pagkuha. Bilang isang dahilan, isipin natin ang isang senaryo kung saan lumikha tayo ng isang hiyas na tinatawag na "rails-html" na may layuning makakuha ng hindi awtorisadong pag-access sa malawakang ginagamit na hiyas na "rails-html-sanitizer".

Nabanggit na tatlong kundisyon ang dapat matugunan upang matagumpay na magamit ang kahinaang ito:

  • Ang pag-atake ay maaari lamang isagawa sa mga packet na mayroong karakter ng gitling sa kanilang pangalan.
  • Ang isang umaatake ay dapat na makapaglagay ng gem pack na may bahagi ng pangalan hanggang sa karakter ng gitling. Halimbawa, kung laban sa package na "rails-html-sanitizer" ang pag-atake, dapat ilagay ng attacker ang sarili nilang package na "rails-html" sa repository.
  • Ang inatake na package ay dapat na ginawa sa nakalipas na 30 araw o hindi na-update sa loob ng 100 araw.

Ang problema ay natukoy ng isang mananaliksik sa seguridad bilang bahagi ng programang bounty ng HackerOne upang mahanap ang mga isyu sa seguridad sa mga kilalang open-source na proyekto.

Naayos na ang isyu sa RubyGems.org noong Mayo 5 , at ayon sa mga developer, wala pa silang natukoy na anumang bakas ng pagsasamantala sa kahinaan sa mga log sa nakalipas na 18 buwan. Gayunpaman, isang mababaw na pag-audit pa lamang ang isinagawa sa ngayon, at isang mas malalim na pag-audit ang pinaplano para sa hinaharap.

Sa kasalukuyan, naniniwala kami na ang kahinaang ito ay hindi napagsasamantalahan.

Ang RubyGems.org ay nagpapadala ng email sa lahat ng may-ari ng gem kapag ang isang gem na bersyon ay inilabas o inalis. Hindi kami nakatanggap ng anumang mga email ng suporta mula sa mga may-ari ng gem na nagsasaad na ang kanilang hiyas ay mina nang walang pahintulot.

Ang isang pag-audit ng mga pagbabago sa hiyas sa nakalipas na 18 buwan ay walang nakitang mga halimbawa ng malisyosong paggamit sa kahinaang ito. Ang karagdagang pag-audit para sa anumang posibleng paggamit ng pagsasamantalang ito ay walang nakitang pagkakataon ng pagsasamantalang ito na ginamit upang kunin ang isang hiyas nang walang pahintulot sa kasaysayan ng RubyGems. Hindi namin magagarantiya na hindi ito nangyari, ngunit mukhang hindi ito malamang.

Upang i-verify ang iyong mga proyekto, inirerekumenda na suriin ang kasaysayan ng mga operasyon sa Gemfile.lock file Ang nakakahamak na aktibidad ay ipinahayag sa pagkakaroon ng mga pagbabago na may parehong pangalan at bersyon, o isang pagbabago sa platform (halimbawa, kapag ang isang package xxx-1.2.3 Ang 1.2.3 ay ina-update sa xxx-XNUMX-xxx).

Bilang solusyon laban sa panggagaya ng mga nakatagong pakete sa mga sistema ng patuloy na integrasyon o kapag naglalathala ng mga proyekto, pinapayuhan ang mga developer na gamitin ang Bundler kasama ang mga opsyong "--frozen" o "--deployment" upang kumpirmahin ang mga dependency.

Panghuli, kung interesado kang matuto nang higit pa tungkol dito , makikita mo ang mga detalye sa sumusunod na link.


Idagdag bilang ginustong mapagkukunan sa Google