
إعادة إنتاج CVE: cve-2026-34486-tomcat_encrypt_bypass_reproduction
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-34486 |
| CVSS | 7.5 HIGH |
| النوع | غياب تشفير البيانات الحساسة |
| المكوّن | Apache Tomcat Cluster EncryptInterceptor |
| نُشر | 2026 |
CVE-2026-34486 هو تراجُع (Regression) ناتج عن الإصلاح غير المكتمل لثغرة CVE-2026-29146. في تكرار الكتلة (Cluster Replication) في Apache Tomcat، يكون EncryptInterceptor مسؤولاً عن تشفير رسائل الكتلة والمصادقة عليها. أدت إعادة هيكلة في إصلاح CVE-2026-29146 إلى نقل استدعاء super.messageReceived(msg) عن غير قصد إلى خارج كتلة try-catch التي تتعامل مع حالات فشل فك التشفير. ونتيجة لذلك، عندما تفشل رسالة في فك التشفير (أي أنها تُستقبل كنص صريح بينما يتوقع المعترض بيانات مشفرة)، تظل الرسالة الأولية غير المشفرة تُمرَّر عبر سلسلة المعالجات بدلاً من تجاهلها.
يتم استدعاء الأسلوب EncryptInterceptor.messageReceived() عند وصول رسالة كتلة. التدفق المتوقع هو:
super.messageReceived(msg) لتمرير الرسالة المفكوك تشفيرهافي الإصدارات المتأثرة، يظل منطق فك التشفير/التحقق مغلَّفاً داخل كتلة try-catch، لكن سلسلة الاستدعاء أعيدت هيكلتها بحيث يتم تنفيذ super.messageReceived(msg) خارج كتلة try-catch التي تحمي عملية فك التشفير. المتغير msg يُصرَّح به قبل كتلة try-catch ويُعيَّن داخل الكتلة. عندما يرمي فك التشفير استثناءً، يحتفظ msg بقيمته الأولية (غير المشفرة/الخام)، وتكتفي كتلة catch بتسجيل الخطأ — دون إرجاع مبكر. يستمر التنفيذ إلى super.messageReceived(msg) مع البيانات الخام غير المعالجة.
هذا يعني أن المهاجم الذي يمكنه الوصول إلى منفذ كتلة Tomcat يمكنه حقن رسائل عشوائية غير مشفرة سيقبلها المعترض ويعالجها.
public void messageReceived(Message msg) {
// msg arrives raw
try {
// decrypt and populate msg fields
decrypt(msg);
} catch (Exception e) {
log.error("Decryption failed", e);
// BUG: no return statement here
}
// msg is still the original unencrypted object when catch is hit
super.messageReceived(msg); // outside try-catch → passes raw data
}
يجب أن يضمن الإصلاح أحد الأمرين:
super.messageReceived(msg) فقط داخل كتلة try بعد نجاح فك التشفير، أو| المنتج | الإصدارات |
|---|---|
| Apache Tomcat 11 | 11.0.20 |
| Apache Tomcat 10 | 10.1.53 |
| Apache Tomcat 9 | 9.0.116 |
EncryptInterceptor<Receiver>)EncryptInterceptor مُكوَّناً في server.xml.يوضح سكربت exploit.py في هذا الدليل التجاوز. فهو يبني رسالة كتلة Tomcat مصغّرة (استناداً إلى تنسيق تسلسل ClusterMessage) ويرسلها مباشرةً إلى منفذ المستقبل دون أي تشفير. سيقبل المعترض المتأثر الرسالة ويمررها على الرغم من غياب التشفير.
قم بالترقية إلى إصدار مصحّح من Apache Tomcat:
| المنتج | الإصدار المصحّح |
|---|---|
| Apache Tomcat 11 | 11.0.21+ |
| Apache Tomcat 10 | 10.1.54+ |
| Apache Tomcat 9 | 9.0.117+ |
إذا لم يكن من الممكن الترقية فوراً، فقيّد الوصول الشبكي إلى منفذ كتلة Tomcat بحيث يقتصر على المضيفين الموثوقين فقط (على سبيل المثال، عبر قواعد جدار الحماية أو ربط المستقبل بواجهة loopback أو واجهة خاصة).