
# فحص القطع الأثرية والشفرة المصدرية لجافا بحثًا عن ثغرات Spring/Tomcat يفحص القطع الأثرية والشفرة المصدرية لجافا بحثًا عن ثغرات CVE الخاصة بـ Spring/Tomcat، ويقارن درجات CVSS بين البائع وNVD، ويتحقق من شروط قابلية الاستغلال، ويتحقق من وجود إصدارات الإصلاح على Maven Central.
يغطي 15 نشرة أمنية رسمية من Spring / Tomcat (سبع نشرات بتاريخ 2026-08-20 · خمس نشرات بتاريخ 2026-06-08 · نشرة واحدة بتاريخ 2025-09-15 · نشرتان من Tomcat بتاريخ 2026-08-25).
من بينها 8 نشرات، تُبلغ عنها الماسحات الضوئية المرتبطة بـ NVD بأنها CRITICAL 9.1~9.8، بينما التقييم الرسمي من البائع هو LOW / MEDIUM.
أما النشرات السبع الأخرى فالتقييمان متطابقان تمامًا — والفرق الوحيد: هل قام البائع نفسه بتقديم درجة CVSS لسجل CVE أم لا.
تجيب هذه الأداة على أربعة أسئلة:
| CVE | المكوّن | الرسمي من البائع | NVD | من وضع الدرجة على NVD |
|---|
| CVE-2026-59313 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47890 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59283 | Spring Framework | MEDIUM | 9.1 CRITICAL | CISA-ADP |
| CVE-2026-47891 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47884 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47892 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65637 | Apache Tomcat | Moderate | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65905 | Apache Tomcat | Low | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | تقييم البائع الذاتي ✅ متطابق |
الحالة الوحيدة المتطابقة بين الطرفين، هي بالضبط تلك التي قدّم فيها البائع نفسه درجة CVSS إلى NVD.
السبب ليس أن أحدًا يخفي شيئًا عن الآخر: عندما لا يقدّم البائع تقييمًا، تقوم CISA-ADP بتسجيل درجة تلقائية بناءً على أسوأ الحالات، ومعظم أدوات SCA تأخذ الرقم الموجود على NVD.
هذا ليس خطأ برمجيًا، بل هو اختلاف في منهجية نظامي التقييم — لكن إجراءات الاستجابة للطوارئ لديك تسير وفق 9.8.
اختبار فعلي (مع مجموعة تحكم إيجابية، يُعاد تنفيذه في كل مرة يتم فيها توليد جدول القواعد):
spring-web 6.2.19 = 200 ← الإصدار السابق موجود على Central
spring-web 6.2.20 = 404 ← الإصدار الذي يطلب منك البائع الترقية إليه، غير موجود
spring-security-core 6.5.11 = 200
spring-security-core 6.5.12 = 404
في جدول الإصدارات المُصلَحة الرسمي، تُوسم هذه الإصدارات بـ Enterprise Support Only — أي أنها مخصصة فقط للعملاء الذين اشتروا الدعم التجاري.
لذا إذا كنت مصابًا فعلًا، فخياراتك هي:الترقية عبر قفزة رئيسية في الإصدار، أو شراء الدعم التجاري.
java -jar spring-cvss-check.jar <jar|war|directory>... [--src <source-directory>]
# الأكثر شيوعًا: افحص ناتج البناء لتحديد الإصدار، وافحص الكود المصدري لتحديد شروط التفعيل
java -jar spring-cvss-check.jar target/ --src src/main
# يمكن أيضًا تمرير ملف fat jar / war واحد فقط
java -jar spring-cvss-check.jar app.war
يتطلب JDK 17+. صفر اعتماديات وقت التشغيل، ولا يحتاج اتصالًا بالإنترنت.
رمز الخروج:0 الإصدار غير مصاب · 2 الإصدار مصاب لكن لم يتم العثور على شروط التفعيل · 3 شروط التفعيل محققة أيضًا.
== الإصدارات المكتشفة ==
Spring Framework 6.2.19 .../spring-core-6.2.19.jar
Spring Security 6.5.11 .../spring-security-core-6.5.11.jar
Apache Tomcat 9.0.37 .../tomcat-embed-core-9.0.37.jar
== الإصدار مصاب بـ 8 نشرات ==
-- CVE-2026-47884 Spring Framework Improper Path Limitation in XsltView
المنتج Spring Framework المتأثر 6.2.0 - 6.2.19
[الفرق] الرسمي **MEDIUM** <-> NVD **CRITICAL 9.8**
الدرجة على NVD ليست من البائع، بل من CISA-ADP.
شروط التفعيل فقط عند استخدام XsltView، ووجود تعيين "/**" يمر عبر عرض القالب، وعدم تحديد اسم العرض صراحةً
[مصاب] تم العثور عليه في كودك/إعداداتك:
src/main/java/demo/ReportView.java <- XsltView(السطر 2)
[لا يمكن الترقية] يطلب منك البائع الترقية إلى 6.2.20 —— **هذا الإصدار غير موجود على Maven Central (404)**، والوسم الرسمي هو Enterprise Support Only
== الملخص ==
قد تُبلغ ماسحتك الضوئية عن 7 من هذه النشرات الثماني بأنها CRITICAL;
بينما **التقييم الرسمي من البائع** هو: 3 نشرات LOW / 4 نشرات MEDIUM / نشرة واحدة CRITICAL.
من بين هذه النشرات الثماني، لم يتم العثور على شروط التفعيل في كودك المصدري لـ 6 منها، وتم العثور عليها في نشرتين.
[!] من بينها 7 نشرات، **الإصدار المُصلَح الرسمي غير موجود أصلًا على Maven Central**
قد يوحي الجدول أعلاه بأن «NVD دائمًا يقيّم بشكل عشوائي». ليس كذلك. في نفس مجموعة البيانات توجد 7 نشرات أخرى، حيث التقييم الرسمي وتقييم NVD متطابقان تمامًا:
| CVE | المكوّن | الرسمي من البائع | NVD | من وضع الدرجة على NVD |
|---|---|---|---|---|
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | تقييم البائع الذاتي |
| CVE-2026-41843 | Spring Framework | MEDIUM | 5.9 MEDIUM | تقييم البائع الذاتي |
| CVE-2026-41844 | Spring Framework | MEDIUM | 4.2 MEDIUM | تقييم البائع الذاتي |
| CVE-2026-41846 | Spring Framework | MEDIUM | 5.9 MEDIUM | تقييم البائع الذاتي |
| CVE-2026-41853 | Spring Framework | MEDIUM | 5.3 MEDIUM | تقييم البائع الذاتي |
| CVE-2026-41848 | Spring Framework | LOW | 3.7 LOW | تقييم البائع الذاتي |
| CVE-2025-41249 | Spring Framework | HIGH | 7.5 HIGH | تقييم البائع الذاتي |
لا توجد حالة مضادة في أي من الاتجاهين، وهذا هو الحكم السببي الوحيد الذي تجرؤ هذه الأداة على إصداره:
[email protected] (تقديم البائع نفسه)CISA-ADP (البائع لم يقدّم، فقام طرف ثالث بالتسجيل التلقائي وفق أسوأ الحالات)يستخدم سكربت التوليد تأكيدين لمراقبة هذين الاتجاهين على حدة (ASSERT4 / ASSERT7)، وفي حال ظهور أي حالة مضادة يرفض إخراج الجدول.
🔑 لماذا التحقق من الاتجاهين: عبارة «المتطابق دائمًا من تقييم البائع الذاتي» لا تستبعد احتمال أن «بعض غير المتطابق هو أيضًا من تقييم البائع الذاتي». إذا ظهرت حالة كهذه فعلًا، يصبح للعلاقة السببية حالة مضادة، ولو تحققت من اتجاه واحد فقط لاستمر توليد الجدول كاملًا وظهر كل شيء أخضر. التأكيد أحادي الاتجاه لا يُثبت العلاقة السببية.
spring-core-5.3.39.jar، ستُصاب بـ 11 نشرة، والإصدارات المُصلَحة الرسمية لهذه النشرات الـ 11
غير موجودة إطلاقًا على Maven Central العام (5.3.45 / 5.3.49 / 5.3.50، جميعها موسومة بـ Enterprise Support Only).يتم توليد جدول الأحكام بواسطة tools/gen_rules.py من أربعة مصادر أولية، دون نسخ يدوي:
| المصدر | ما الذي يؤخذ منه | |
|---|---|---|
| A | spring.io/security/<cve> | التقييم الرسمي / نطاق التأثير / الإصدار المُصلَح (شامل علامة OSS ⟷ Enterprise) |
| B | tomcat.apache.org/security-{9,10,11}.html | نفس ما سبق |
| C | NVD REST API | تقييم NVD ومصدر التقييم |
| D | repo1.maven.org (HEAD) | هل الإصدار الذي يطلب منك البائع الترقية إليه موجود فعلًا على Central |
إعادة التشغيل مرة أخرى تعني إعادة التحقق الكامل:
python tools/gen_rules.py
يحتوي السكربت على ستة تأكيدات، إذا لم تنجح يرفض إخراج الجدول، ثلاثة منها تراقب مباشرة ادعاءات هذه الأداة:
ASSERT2 عدد النشرات غير المتطابقة بين الرسمي ⟷ NVD —— إذا وصل إلى صفر فهذا يعني أن الادعاء بطل، ويتوقف فورًاASSERT3 فحص Central مع مجموعة تحكم إيجابية —— إذا فشلت المجموعة الضابطة، تُلغى كل نتائج 404 في تلك الدفعةASSERT4 النشرة المتطابقة، يجب أن يكون مصدر تقييمها هو تقييم البائع الذاتي —— هذا هو الدليل الوحيد على «السبب»Apache-2.0