Zranitelnost na RubyGems.org, která umožňuje zaměnit cizí balíčky.

V repozitáři RubyGems.org byla odhalena kritická zranitelnost (CVE-2022-29176), která umožňuje nahradit některé cizí balíčky v repozitáři bez náležitého oprávnění zahájením stáhnutí (yank) legitimního balíčku a nahráním jiného souboru se stejným názvem a číslem verze.

Pro úspěšnou exploataci zranitelnosti je třeba splnit tři podmínky:

  • Útok může být proveden pouze na balíčky, jejichž název obsahuje pomlčku.
  • Útočník musí mít možnost umístit gem-balíček s částí názvu před pomlčku. Například pokud je útok prováděn na balíček „rails-html-sanitizer“, útočník musí umístit do repozitáře svůj vlastní balíček „rails-html“.
  • Balíček, na který je útok zaměřen, musí být vytvořen v posledních 30 dnech nebo nebyl aktualizován po dobu 100 dnů.

Zranitelnost byla způsobena chybou v zpracovateli akce „yank“, který interpretoval část názvu po pomlčce jako název platformy, což umožnilo iniciovat odstranění cizích balíčků, které se shodovaly v části názvu před pomlčkou. Konkrétně v kódu zpracovatele akce „yank“ byl použit příkaz ‘find_by!(full_name: „#{rubygem.name}-#{slug}”)’, přičemž parametr „slug“ byl předáván vlastníkem balíčku pro určení odstraňované verze. Vlastník balíčku „rails-html“ mohl místo verze „1.2.3“ uvést „sanitizer-1.2.3“, což by vedlo k provedení akce na cizím balíčku „rails-html-sanitizer-1.2.3“.

Problém byl odhalen bezpečnostním výzkumníkem v rámci programového odměňování na HackerOne za nalezení bezpečnostních problémů v známých otevřených projektech. Problém byl odstraněn v RubyGems.org 5. května a podle prohlášení vývojářů zatím neobjevili stopy exploatace zranitelnosti v protokolech za posledních 18 měsíců. Dosud byl proveden pouze povrchní audit a v budoucnu se plánuje provedení hloubkovějšího prověření.

Pro analýzu svých projektů se doporučuje prověřit historii operací v souboru Gemfile.lock. Zlovolná aktivita se projevuje změnami, které uchovávají jméno a verzi, nebo změnou platformy (například když je balíček gemname-1.2.3 aktualizován na gemname-1.2.3-java). Jako obranou metodou proti skrytým nahrazením balíčků v systémech průběžné integrace nebo při publikování projektů se doporučuje vývojářům použít Bundler s možnostmi „—frozen“ nebo „—deployment“ pro zafixování závislostí.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster