CVE-2026-95663
Apache Camel: سياسة الأمان Camel-Keycloak تقبل رموز وصول منتهية الصلاحية لأن نتائج فحص الرموز المخزنة مؤقتًا غير مقيدة بانتهاء صلاحية الرمز
- تم النشر
- 26/10/2026
- محدث
- 02/11/2026
- تخصيص CNA
- apache
- الأدلة المرصودة
- 30/10/2026
CVSS الأساسي
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:Nمنخفض · الثلاثين يومًا القادمة
- المئوية
- 15.7%
- تاريخ الموديل
- 04/11/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
ثغرة انتهاء صلاحية الجلسة غير الكافية في مكوّن Apache Camel Keycloak. تؤثر هذه المشكلة على Apache Camel: من 4.16.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.2. عند تفعيل استبطان الرمز (token introspection) على KeycloakSecurityPolicy في camel-keycloak (useTokenIntrospection=true)، يتحقق معالج الأمان من رمز الوصول الخاص بالطلب عبر إرساله إلى نقطة نهاية استبطان الرمز OAuth 2.0 الخاصة بـ Keycloak، ويقبل الرمز ما دامت الاستجابة تفيد بأنه نشط. تُبلغ نقطة نهاية الاستبطان عن الرمز بأنه غير نشط بمجرد انقضاء وقت exp (انتهاء الصلاحية) الخاص به، لذا في هذا المسار يكون علم active هو ما يفرض انتهاء صلاحية الرمز. تُخزَّن نتائج الاستبطان مؤقتًا افتراضيًا (introspectionCacheEnabled=true، introspectionCacheTtl=60 ثانية)، وقد كان كلا تنفيذي التخزين المؤقت المرفقين بالمكوّن، ConcurrentMapTokenCache وCaffeineTokenCache، يُنهيان صلاحية الإدخال بعد وقت ثابت من إدراجه، دون تقييد ذلك العمر بادعاء exp الذي كانت الاستجابة المخزَّنة مؤقتًا تحمله أصلًا. وكان KeycloakSecurityProcessor بدوره يتحقق فقط من علم active الخاص بالنتيجة، في كل مسار يستخدم الاستبطان، ولم يقارن exp بالوقت الحالي قط. لذلك كانت الاستجابة المخزَّنة مؤقتًا قبل انتهاء صلاحية الرمز بفترة وجيزة تُقدَّم للطلبات اللاحقة التي تحمل الرمز نفسه لمدة تصل إلى وقت البقاء (time-to-live) المُهيَّأ بعد انتهاء صلاحية الرمز، وكانت تلك الطلبات تُقبل بالأدوار والأذونات التي كان الرمز المنتهي يحملها، رغم أن RFC 7662، الذي يعرّف استبطان الرمز، ينص على أن الاستجابة التي تحتوي على exp يجب ألا تُخزَّن مؤقتًا بعد ذلك الوقت. يُقدِّم المستدعي رمز الوصول مع كل طلب، عادةً كرمز حامل (bearer token) في ترويسة Authorization، لذا كان بإمكان مستدعٍ يحمل رمزًا كان صالحًا قبل لحظات أن يواصل استخدامه بعد انتهاء صلاحيته، طالما بقي الإدخال المخزَّن مؤقتًا حيًّا. النافذة محدودة بـ introspectionCacheTtl، وهو 60 ثانية افتراضيًا و300 إلى 600 ثانية حيث اتُّبعت توصية الوثائق الخاصة بالخدمات الداخلية، وهي تُفتح فقط لرمز استبطنه وخزَّنه مؤقتًا نفس عملية Camel أثناء كون الرمز لا يزال نشطًا. لا تمنح المشكلة شيئًا يتجاوز ما كان الرمز يحمله أصلًا: فهي لا تتيح تزوير الرموز ولا تصعيد الامتيازات، كما أن استبطان الرمز غير مفعَّل افتراضيًا، ولهذا تُصنَّف الخطورة متوسطة. مسار التحقق المحلي من JWT، المستخدم عند تعطيل الاستبطان، غير متأثر بهذه المشكلة. يُنصح المستخدمون بالترقية إلى الإصدار 4.23.0، الذي يصلح المشكلة. إذا كان المستخدمون على سلسلة إصدارات 4.22.x، فيُقترح عليهم الترقية إلى 4.22.2. وإذا كان المستخدمون على سلسلة إصدارات 4.18.x، فيُقترح عليهم الترقية إلى 4.18.5. وصلت خطوط الإصدارات 4.16.x و4.17.x و4.19.x إلى 4.21.x إلى نهاية العمر قبل حل هذه المشكلة ولن تتلقى إصلاحًا، لذا يجب على عمليات النشر عليها الانتقال إلى إصدار مدعوم. بالنسبة لعمليات النشر التي لا يمكنها الترقية فورًا، اضبط introspectionCacheEnabled=false على KeycloakSecurityPolicy، بحيث يُتحقق من كل طلب مقابل نقطة نهاية الاستبطان، التي تُبلغ عن الرمز المنتهي بأنه غير نشط، على حساب استدعاء استبطان واحد لكل طلب. إن خفض introspectionCacheTtl لا يؤدي إلا إلى تضييق النافذة ولا يغلقها.
الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.