
CVE-2026-66066 (KindaRails2Shell) PoC - Rails Active Storage/libvips arbitrary file read to RCE; for authorized security testing
أداة PoC لقراءة الملفات العشوائية → تنفيذ الأوامر عن بُعد (RCE) بشكل شرطي عبر Active Storage + libvips في Ruby on Rails.
ملف واحد، Python 3.11+، مكتبة قياسية خالصة بدون أي تبعيات، مع حمولات هجينة MAT/HDF5 مدمجة، ومفكك ترميز بكسلات PNG خالص بلغة Python، وقراءة بالإزاحة، واستعادة مفاتيح، ووضعي RCE والفحص.
يثق Rails في content_type الذي يبلغه العميل (عبر نقاط الرفع المباشر)، بينما يفحص libvips توقيعات الملفات (magic bytes) — لذلك يُعامل الملف نفسه كصيغتين مختلفتين في الطبقتين. يبني المهاجم ملفًا هجينًا «تدّعي بايتاته العشرة الأولى نصيًا أنه MATLAB 5.0، بينما تعلن بايتات الإصدار 124-125 أنه MAT 7.3 (HDF5)»، وباستخدام آلية قائمة الملفات الخارجية (External File List) في HDF5 يقرأ أي ملف على الخادم (افتراضيًا /proc/self/environ)، وبعد استعادة SECRET_KEY_BASE يزوّر توقيع variation، محققًا تنفيذ الأوامر بشكل شرطي.
< 7.2.3.2 / >= 8.0, < 8.0.5.1 / >= 8.1, < 8.1.3.1python3 kr2s.py <command> [options]
المعلمات العامة: عنوان URL الهدف / اسم المضيف / ملفات الدفعة، --entry، --proxy، مسارات مخصصة، خيارات TLS، المهلة، User-Agent وغيرها، راجع python3 kr2s.py --help للتفاصيل.
cd lab
RAILS_VERSION=8.1.3 docker compose up --build
للاستخدام في أبحاث الأمان والتحقق من الثغرات والاختبارات الدفاعية فقط. ترفع أوامر read / check / scan --active / rce blob دائم إلى الهدف وتنفذ أوامر عليه، يرجى التشغيل في مختبر Docker قابل للتدمير، ولا تستخدمه ضد أهداف غير مصرح بها.
| الأمر | الوصف |
|---|
check | رفع blob للتأكد من إمكانية قراءة الملف الهدف (تدخلي) |
read <path> | استعادة بادئة بحجم ثابت من ملف محدد (إخراج ثنائي) |
secrets | استعادة متغيرات بيئة العملية وملفات بيانات اعتماد Rails (مخفية افتراضيًا، --show-full يعرض القيم الكاملة) |
rce | استعادة secret_key_base وتنفيذ الأوامر بشكل شرطي (--skb يتيح تخطي قراءة البيئة) |
probe | استكشاف محمّلات libvips غير الموثوقة المتاحة على الهدف |
scan | فحص سلبي/نشط متعدد الخيوط (--active يرفع blob خبيث لإجراء قراءة canary) |