En kritisk sårbarhed (CVE-2022-29176) er blevet identificeret i RubyGems.org-pakkelageret, som tillader, uden behørig autoritet, at erstatte nogle andre personers pakker i lageret ved at starte et ryk i en legitim pakke og indlæse i stedet for en anden fil med samme navn og versionsnummer.
For at kunne udnytte sårbarheden skal tre betingelser være opfyldt:
- Angrebet kan kun udføres på pakker, der har en bindestreg i deres navn.
- En angriber skal være i stand til at placere en ædelstenspakke med en del af navnet før bindestregen. For eksempel, hvis angrebet er på "rails-html-sanitizer"-pakken, skal angriberen placere sin egen "rails-html"-pakke i depotet.
- Pakken, der angribes, skal være oprettet inden for de sidste 30 dage eller ikke opdateret i 100 dage.
Sårbarheden er forårsaget af en fejl i "yank"-handlingsbehandleren, som fortolker den del af navnet efter bindestregen som navnet på platformen, hvilket gjorde det muligt at igangsætte sletningen af udenlandske pakker, der matcher den del af navnet før bindestregen. Især i "yank"-handlerkoden blev "find_by!(fuldt_navn: "#{rubygem.name}-#{slug}")"-kaldet brugt til at finde pakker, mens "slug"-parameteren blev sendt af pakkeejer for at bestemme, hvilken version der skal fjernes. Ejeren af pakken "rails-html" kunne angive "sanitizer-1.2.3" i stedet for version "1.2.3", hvilket ville medføre, at handlingen blev anvendt på en andens pakke "rails-html-sanitizer-1.2.3 ".
Problemet blev identificeret af en sikkerhedsforsker som en del af HackerOnes bounty-program til at finde sikkerhedsproblemer i kendte open source-projekter. Problemet blev rettet i RubyGems.org den 5. maj, og ifølge udviklerne har de endnu ikke identificeret nogen spor af udnyttelse af sårbarheden i logfilerne i løbet af de sidste 18 måneder. Samtidig er der indtil videre kun gennemført en overfladisk revision, og der er planlagt en mere dybdegående revision i fremtiden.
For at tjekke dine projekter anbefales det at analysere operationshistorikken i Gemfile.lock-filen; ondsindet aktivitet kommer til udtryk i tilstedeværelsen af ændringer med bevarelse af navnet og versionen eller en ændring af platformen (f.eks. når gemnavnet -1.2.3-pakken er opdateret til gemname-1.2.3-java). Som en løsning for at beskytte mod skjult pakkesubstitution i kontinuerlige integrationssystemer eller ved udgivelse af projekter anbefales det, at udviklere bruger Bundler med "-frozen" eller "-deployment"-mulighederne til at rette afhængigheder.
Kilde: opennet.ru