// HEISE ONLINE — CYBERSECURITY
Schlüsselklau bei Ruby on Rails – Kritische Lücke mit präparierten Bildern
Über kompromittierte Bilder können Angreifer Umgebungsvariablen des Servers einschließlich der Secrets auslesen und sich damit weitere Türen ins System öffnen.
Eine kritische Sicherheitslücke in Ruby on Rails erlaubt es Angreifern, über manipulierte Bild-Uploads beliebige Dateien auszulesen, auf die der Serverprozess Zugriff hat. Weil dabei auch die zentralen Schlüssel der Anwendung in fremde Hände geraten können, warnt das Rails-Team vor Folgeangriffen bis hin zur Ausführung von Schadcode. Abgesicherte Versionen stehen bereit, Betreiber sollten zügig handeln, Updates einspielen und ihre Schlüssel vorsorglich tauschen.
Die Schwachstelle steckt in Active Storage, der in Rails eingebauten Komponente für Datei-Uploads, und wird als CVE-2026-66066 geführt. Das Advisory des Rails-Teams stuft sie mit einem CVSS-Wert von 9,5 von 10 als kritisch ein. Entdeckt haben die Lücke unabhängig voneinander die Sicherheitsforscher André Baptista, Bruno Mendes und Rafael Castilho von Ethiack sowie RyotaK von GMO Flatt Security. Sie tauften die Angriffskette „KindaRails2Shell“.
Mit Active Storage hängen Rails-Anwendungen hochgeladene Dateien an Datenbankobjekte, etwa Profilbilder oder Produktfotos. Aus Bildern erzeugt die Komponente auf Wunsch sogenannte Varianten, zum Beispiel verkleinerte Thumbnails. Die eigentliche Bildverarbeitung übernimmt dabei seit Rails 7.0 standardmäßig die C-Bibliothek libvips.
libvips liest und schreibt zahlreiche Dateiformate über Operationen, die teils auf Bibliotheken von Drittanbietern beruhen. Einen Teil davon stuft das Projekt selbst als „untrusted“ ein: Diese Operationen sind nicht ausreichend per Fuzzing getestet und gelten daher als ungeeignet für Dateien, die ein Angreifer kontrolliert. Genau sie schaltete Active Storage bislang nicht ab. Ein Angreifer kann deshalb eine präparierte Datei hochladen, die bei der Verarbeitung eine dieser kritischen Operationen auslöst.
Nach Angaben des Rails-Sicherheitsteams existiert mindestens eine Angriffskette, mit der sich sämtliche Dateien auslesen lassen, die der Rails-Prozess lesen kann, einschließlich seiner Umgebungsvariablen. Dort liegen in typischen Deployments der secret_key_base, mit dem Rails unter anderem Sitzungs-Cookies signiert, der RAILS_MASTER_KEY zum Entschlüsseln der hinterlegten Zugangsdaten sowie häufig Datenbankpasswörter und Schlüssel für Cloud-Speicher. Mit dieser Beute lassen sich Sitzungen fälschen, verschlüsselte Credentials öffnen und angebundene Dienste übernehmen. Das Advisory spricht deshalb von möglicher Remote Code Execution, auch wenn der Schadcode nicht zwingend direkt in der Bildverarbeitung ausgeführt wird.
Verwundbar ist eine Anwendung, wenn Active Storage libvips als Bildprozessor verwendet und nicht vertrauenswürdige Benutzer Bilder hochladen können. Ein öffentlicher Upload ist dafür nicht nötig, eine kostenlose Registrierung reicht. Das betrifft Avatare und Produktbilder ebenso wie Bildanhänge in Foren, Chats oder Ticketsystemen.
Eine frisch generierte Rails-Anwendung verarbeitet ohne zusätzliche Gems zwar noch keine Bilder und ist insofern zunächst nicht angreifbar. Der dokumentierte Standardweg zu Bildvarianten führt aber direkt in die verwundbare Konfiguration: Seit Rails 7.0 ist :vips der voreingestellte Prozessor, das von rails new erzeugte Dockerfile installiert libvips gleich mit, und das Gem image_processing, das die libvips-Anbindung ruby-vips als Abhängigkeit mitbringt, steht bis Rails 8.0 als auskommentierter Vorschlag im generierten Gemfile. Seit Rails 8.1 legt der Generator es sogar standardmäßig aktiv an. Wer Bild-Uploads samt Vorschaubildern anbietet, läuft also mit hoher Wahrscheinlichkeit auf dem betroffenen Pfad. Rails-6-Anwendungen sind nur bei manuell umgestellter Konfiguration verwundbar, dort war noch ImageMagick voreingestellt.
Welcher Prozessor tatsächlich aktiv ist, verrät ein Einzeiler:
Gibt der Befehl vips aus, ist die Anwendung auf dem betroffenen Verarbeitungsweg. Das Rails-Team betont zudem, dass