Im RubyGems.org-Paket-Repository wurde eine kritische Sicherheitsanfälligkeit (CVE-2022-29176) entdeckt, die es ermöglicht, ohne die erforderlichen Berechtigungen einige fremde Pakete im Repository zu ersetzen, indem ein legitimes Paket zurückgezogen (yank) und stattdessen eine andere Datei mit demselben Namen und derselben Versionsnummer hochgeladen wird.
Für eine erfolgreiche Ausnutzung der Schwachstelle müssen drei Bedingungen erfüllt sein:
- Angriffe können nur auf Pakete durchgeführt werden, deren Name ein Minuszeichen enthält.
- Der Angreifer muss in der Lage sein, ein Gem-Paket mit einem Teil des Namens vor dem Minuszeichen bereitzustellen. Wenn beispielsweise ein Angriff auf das Paket „rails-html-sanitizer“ durchgeführt wird, muss der Angreifer sein eigenes Paket „rails-html“ im Repository bereitstellen.
- Das Paket, auf das der Angriff abzielt, muss in den letzten 30 Tagen erstellt worden sein oder darf in den letzten 100 Tagen nicht aktualisiert worden sein.
Die Schwachstelle entsteht durch einen Fehler im Yank-Action-Handler, der den Teil des Namens nach dem Minuszeichen als Plattformnamen interpretiert, was es ermöglichte, fremde Pakete zu entfernen, die im Namen bis zum Minuszeichen übereinstimmten. Insbesondere wurde im Code des Yank-Operation-Handlers der Aufruf 'find_by!(full_name: "#{rubygem.name}-#{slug}")' verwendet, während der Parameter „slug“ vom Paketinhaber übergeben wurde, um die zu entfernende Version zu bestimmen. Der Besitzer des Pakets „rails-html“ konnte anstelle der Version „1.2.3“ „sanitizer-1.2.3“ angeben, was dazu führen würde, dass die Operation auf das fremde Paket „rails-html-sanitizer-1.2.3“ angewendet wurde.
Das Problem wurde von einem Sicherheitsforscher im Rahmen des Programms zur Belohnung für die Auffindung von Sicherheitsproblemen in bekannten Open-Source-Projekten auf HackerOne identifiziert. Das Problem wurde am 5. Mai in RubyGems.org behoben, und laut den Entwicklern wurden in den letzten 18 Monaten keine Spuren der Ausnutzung der Schwachstelle in den Protokollen gefunden. Bisher wurde nur eine oberflächliche Prüfung durchgeführt, und es ist geplant, eine ausführlichere Untersuchung durchzuführen.
Um die eigenen Projekte zu überprüfen, wird empfohlen, die Verlaufshistorie der Operationen in der Datei Gemfile.lock zu analysieren. Schadliche Aktivitäten äußern sich durch Änderungen, bei denen der Name und die Version beibehalten oder die Plattform gewechselt werden (zum Beispiel, wenn das Pakt gemname-1.2.3 auf gemname-1.2.3-java aktualisiert wird). Als alternativer Schutz gegen die heimliche Manipulation von Paketen in Continuous Integration-Systemen oder bei der Veröffentlichung von Projekten wird Entwicklern empfohlen, Bundler mit den Optionen "—frozen" oder "—deployment" zur Fixierung der Abhängigkeiten zu verwenden.
Quelle: opennet.ru
