A RubyGems.org csomag-repozitoriumában kritikus sebezhetőséget (CVE-2022-29176) azonosítottak, amely lehetővé teszi jogosultságok nélkül, hogy egyes harmadik fél csomagokat helyettesítsenek a repozitoriumban, ha egy legitim csomagot visszavonnak (yank), és helyette egy ugyanolyan nevű és verziójú fájlt töltenek fel.
A sebezhetőség sikeres kihasználásához három feltétel teljesítése szükséges:
- A támadás csak olyan csomagokra irányulhat, amelyek nevében a kötőjel szerepel.
- A támadónak lehetősége kell legyen gem-csomagot feltölteni, amelynek a neve a kötőjel előtti részével megegyezik. Például, ha a támadás a «rails-html-sanitizer» csomag ellen irányul, akkor a támadónak a repozitoriumba a saját «rails-html» csomagját kell feltöltenie.
- A támadott csomagnak az utolsó 30 napon belül kellett létrejönnie, vagy az elmúlt 100 napon belül nem frissült.
A sebezhetőséget a «yank» művelet kezelőjében lévő hibák okozzák, ami miatt a kötőjel utáni rész platformnévként kezelődik, lehetővé téve ezzel, hogy eltávolítsák a harmadik fél csomagokat, amelyek neve az előtagban a kötőjelig megegyezik. Különösen a «yank» művelet kezelőjében a csomagok keresésére a ‘find_by!(full_name: «#{rubygem.name}-#{slug}»)’ hívást használták, miközben a «slug» paraméter a csomag tulajdonosa által került átadásra a törlésre kerülő verzió azonosításához. A «rails-html» csomag tulajdonosa a «1.2.3» verzió helyett megjelölheti a «sanitizer-1.2.3»-at is, ami más csomaghoz, például a «rails-html-sanitizer-1.2.3»-hoz történő műveletekhez vezetett.
A problémát egy biztonsági kutató az HackerOne-on folyó bug bounty program keretein belül azonosította, amely a biztonsági problémák keresésére irányul a neves nyílt projekteken. A problémát a RubyGems.org-on május 5-én javították, és a fejlesztők nyilatkozata szerint még nem találtak nyomait a sebezhetőség kihasználásának az elmúlt 18 hónap naplóiban. Jelenleg csak felületes ellenőrzést végeztek, és további alapos vizsgálatokat terveznek.
A projektjeik ellenőrzéséhez ajánlott elemezni a Gemfile.lock fájl műveleteinek történetét, mivel a rosszindulatú tevékenység a név és verzió megőrzésével, vagy a platform megváltoztatásával nyilvánul meg (például amikor a gemname-1.2.3 csomag frissítve van a gemname-1.2.3-java verzióra). A csomagok rejtett manipulációjának megakadályozása érdekében a folyamatos integrációs rendszerekben, vagy a projektek közzétételekor a fejlesztőknek ajánlott a Bundler használata a "--frozen" vagy "--deployment" opciókkal a függőségek rögzítésére.
Forrás: opennet.ru
