Eine kritische Schwachstelle in Ruby on Rails könnte es einem nicht authentifizierten Angreifer ermöglichen, beliebige Dateien auf einen Server zu schreiben, indem er eine speziell präparierte Datei hochlädt, sofern die Anwendung Uploads mit ImageMagick verarbeitet. Rails veröffentlichte die Sicherheitslücke in einer Sicherheitsmitteilung und stellte Korrekturen in den Versionen 8.1.4.1 und 8.0.5.2 bereit.

Die Schwachstelle betrifft Active Storage, Rails’ Komponente für Datei-Uploads. Apps sind gefährdet, wenn sie ImageMagick zur Verarbeitung von Uploads verwenden, Dateien von nicht vertrauenswürdigen Nutzern annehmen und über eine ImageMagick-Sicherheitsrichtlinie verfügen, die die relevanten Codierer nicht blockiert. Rails weist darauf hin, dass die mit Debian und Ubuntu ausgelieferten Richtlinien diese nicht blockieren.

Das Risiko kann über das Schreiben von Dateien hinausgehen. Apps, die den Disk-Service von Active Storage verwenden, speichern hochgeladene Dateien auf dem Server. Ein Angreifer kann möglicherweise auch Dateien lesen, auf die die Anwendung zugreifen kann. Dazu können Rails’ secret_key_base und Zugangsdaten für andere Systeme gehören, was eine weitere Kompromittierung ermöglichen könnte, einschließlich der Ausführung von Remote-Code oder des Wechsels in verbundene Systeme.

Rails bewertet die Schwachstelle auf der CVSS-Skala mit 9,8 von 10. Sie wird unter GHSA-f3w6-w445-fwh9 geführt und hat keine CVE-Kennung. Gemeldet wurde das Problem über HackerOne von RyotaK, einem Sicherheitsforscher bei GMO Flatt Security. Rails teilte mit, einen Bericht über eine Angriffskette erhalten zu haben, warnte jedoch, dass es weitere Methoden geben könnte; in der Sicherheitsmitteilung wird nicht angegeben, ob die Schwachstelle bereits ausgenutzt wurde.

Der anfällige Pfad wird erreicht, wenn Active Storage einen angehängten Upload analysiert. Eine Variante oder Vorschau muss nicht erstellt werden, und die App muss die Methode analyze nicht aufrufen. Laut dem Commit mit der Korrektur konnte eine hochgeladene SVG-Datei den MSL-Codierer von ImageMagick erreichen, der die in seinem Skript genannten Dateien lesen und schreiben kann. Active Storage schränkte nicht ein, welche ImageMagick-Codierer einen Upload verarbeiten durften. Damit war die ImageMagick-Richtlinie des Servers die einzige Schutzmaßnahme.

Betroffen sind alle Active-Storage-Versionen vor 8.0.5.2 sowie Versionen der Reihe 8.1 vor 8.1.4.1. Rails zufolge werden Versionsreihen vor 8.0 nicht unterstützt und erhalten keine korrigierten Releases. Die relevante Konfiguration ist config.active_storage.variant_processor: :mini_magick verwendet ImageMagick, während die Standardeinstellung vom load_defaults-Wert der App abhängt. Diese Einstellung bestimmt außerdem, welche Bibliothek Uploads analysiert.

Dieselben Releases beheben eine separate Active-Storage-Schwachstelle, GHSA-v924-7rp8-4mxh, die auf der CVSS-Skala mit 8,8 bewertet wird. Bei diesem Problem wurden Uploads unter temporären Dateinamen, die ihre Dateierweiterungen beibehielten, an ImageMagick und FFmpeg übergeben. Dadurch konnte ein Angreifer möglicherweise beeinflussen, welcher Decoder eine Datei verarbeitete. Rails zufolge beheben die beiden Releases insgesamt 21 Sicherheitsprobleme.

Rails empfiehlt dringend ein Upgrade. Apps, die :mini_magick verwenden, benötigen außerdem mini_magick 5.1 oder höher, andernfalls kann beim Start ein Fehler auftreten. Die Releases enthalten eine ImageMagick-Richtlinie, die MSL, bestimmte Codierer mit Zugriff auf andere Dateien oder Referenzen, Ghostscript-basierte Codierer und den gs-Delegate sowie die @filename-Indirektion blockiert.

Administratoren sollten überprüfen, ob die App die neue Richtlinie lädt, und feststellen, ob eine benutzerdefinierte MiniMagick-Konfiguration verhindert, dass sie wirksam wird. Die Richtlinie ergänzt die ImageMagick-Richtlinie des Servers, ersetzt sie aber nicht. Daher kann eine bestehende Regel, die einen Codierer erlaubt, die neue Sperre außer Kraft setzen. Die enthaltene Richtlinie schützt keine Apps, die GraphicsMagick verwenden.

Falls ein Upgrade nicht möglich ist, empfiehlt Rails, die mitgelieferten Richtlinienregeln auf die Systemrichtlinie von ImageMagick anzuwenden und mindestens MSL, Ghostscript-Codierer und den gs-Delegate zu blockieren. Für Apps, die den Disk-Service verwenden, rät Rails außerdem dazu, secret_key_base und alle anderen für die Anwendung lesbaren Geheimnisse zu ändern, einschließlich Zugangsdaten, Speicher- und Datenbankpasswörtern sowie Tokens von Drittanbietern. Die Sicherheitsmitteilung enthält keine Methode, mit der sich feststellen lässt, ob eine App bereits angegriffen wurde.

Quellen: The Hacker News.