Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
thymeleaf-check — أداة فحص دون اتصال بالإنترنت لثغرات Thymeleaf CVE-2026-40477 / CVE-2026-41901 — تُخبرك بأيٍّ من ثغرتي SSTI بدرجة خطورة CVSS 9.0 أنت معرّض لها، وما إذا كان إصدارك يتضمن إصلاحًا على الإطلاق (3.0.x: لا يتضمن). | Kitploit
أدوات/GitHubGitHub/xiaoqimikko/thymeleaf-check
التحليل الثابتماسحات الثغرات الأمنيةتدقيق التكوينDevSecOpsأمن سلسلة التوريد
GitHubxiaoqimikko/thymeleaf-check

thymeleaf-check

أداة فحص دون اتصال بالإنترنت لثغرات Thymeleaf CVE-2026-40477 / CVE-2026-41901 — تُخبرك بأيٍّ من ثغرتي SSTI بدرجة خطورة CVSS 9.0 أنت معرّض لها، وما إذا كان إصدارك يتضمن إصلاحًا على الإطلاق (3.0.x: لا يتضمن).

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

الأكثر شعبية

عرض الكل →

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

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

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

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

thymeleaf-check

أداة فحص دون اتصال لثغرات Thymeleaf CVE-2026-40477 / CVE-2026-41901 —— بلا اعتماديات، ملف jar واحد، دون اتصال بالشبكة.

ثغرتا SSTI بتقييم CVSS 9.0 تجاوزتا الحماية، وأُصدرت نسختان مُصلحتان خلال تسعة أيام. تجيب الأداة أولاً عن سؤال «أي الثغرتين أصابتني»، ثم تجيب عن السؤال الأصعب:

في خط الإصدارات الذي أستخدمه، هل توجد نسخة مُصلحة يمكن الترقية إليها؟

بالنسبة إلى 3.1.x، نعم (يكفي الترقية إلى 3.1.5.RELEASE). أما بالنسبة إلى 3.0.x وما قبله، فـلا —— وهذا بالضبط ما يخصّ أكبر شريحة من عمليات التثبيت.


لماذا نحتاجها

نطاق التأثر في كل من التوصيتين (advisory) هو introduced: 0 في OSV:

curl -s https://api.osv.dev/v1/vulns/GHSA-r4v4-5mwr-2fwr | jq '.affected[0].ranges'
# [{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.1.4.RELEASE"}]}]

وهذا يعني أن خط 3.0 بأكمله مشمول، إذ تظهر في قائمة الإصدارات التفصيلية جميع الإصدارات من 3.0.15.RELEASE وصولاً إلى 1.0.0. بينما يتوقف خط 3.0 على Maven Central عند 3.0.15.RELEASE، ولا توجد أي إصدارات بعده:

curl -s https://repo1.maven.org/maven2/org/thymeleaf/thymeleaf/maven-metadata.xml \
  | grep -o '<version>3\.0\.[^<]*</version>' | tail -1
# <version>3.0.15.RELEASE</version>

الإصدارات المُصلَّحة لكلا الثغرتين موجودة على خط 3.1. لذلك لا يملك مستخدمو 3.0.x خيار «تغيير رقم الإصدار» فحسب، بل الانتقال فقط عبر خط الإصدار الرئيسي — و3.1 هو تغيير كاسر مُدرَج رسميًا (منقول بندًا بندًا من مقطع 3.1.0.M1 في ملف ChangeLog.txt الرسمي):

- Removed web-API based expression security objects (#request, #response, #session, #servletContext).
- Removed support for Spring 3.x and Spring 4.x.
- Set minimum JDK compatibility level to JDK 8 project-wide (JDK 17 for thymeleaf-spring6).

من قام بكتابة ${#request.…} / ${#session.…} في القوالب، فإن الترقية ستؤدي إلى خطأ مباشر، ويجب نقل هذه القيم إلى Model عبر Controller. هذه هجرة تحتاج إلى جدولة، وليست مجرد تغيير رقم إصدار.

من يوجد على هذا الخط

عدد التبعيات في deps.dev (قراءة مباشرة بتاريخ 2026-09-04، يمكن لأي شخص إعادة حسابه):

الإصدارعدد التبعياتأي الثغرات يصيبهل يمكن الترقية على نفس الخط
3.0.11.RELEASE1124ثغرتان❌ لا يوجد إصدار مُصلح على خط 3.0
3.0.15.RELEASE678ثغرتان❌ كما سبق، وهو نهاية هذا الخط
3.0.12.RELEASE641ثغرتان❌
3.1.3.RELEASE826ثغرتان✅ الترقية إلى 3.1.5
3.1.2.RELEASE677ثغرتان✅
3.1.4.RELEASE70يصيب CVE-2026-41901 فقط✅
3.1.5.RELEASE590—آمن بالفعل

الإصدار الفردي الأكبر من حيث قاعدة التثبيت هو 3.0.11.RELEASE، وهو أعلى بنسبة 36% من أعلى إصدار على خط 3.1 وهو 3.1.3، لكن لا يوجد له مخرج على نفس الخط.


الاستخدام

java -jar thymeleaf-check.jar <目录或 jar/war 路径> [--utf8|--gbk]
$ java -jar thymeleaf-check.jar ./target
[CRITICAL] ./target/myapp.war :: BOOT-INF/lib/thymeleaf-3.0.11.RELEASE.jar
            构件:thymeleaf  版本 3.0.11.RELEASE(3.0 线,依据: MANIFEST(Implementation-Version))
            命中: CVE-2026-40477 + CVE-2026-41901
            受影响,且 3.0 线在 Maven Central 上没有任何修复版(该线止于 3.0.15.RELEASE)。

رمز الخروج: 2 = يوجد مكوّن في خط إصدار ليس له إصدار مُصلح في الخط نفسه · 1 = متأثر لكن يمكن الترقية ضمن الخط نفسه / تعذّر التحديد · 0 = لم يُعثر على شيء · 3 = خطأ في الاستخدام أو المسار. يمكن ربطه مباشرةً بـ CI.

ما هو الأكثر دقة في الفحص

افحص مخرجات البناء (target/*.jar، *.war)، لا تفحص مجلد الشيفرة المصدرية. في الغالبية العظمى من الحالات يتم إدخال Thymeleaf بشكل غير مباشر عبر spring-boot-starter-thymeleaf، والـ starter نفسه لا يحمل رقم إصدار —— لن ترى رقم إصدار Thymeleaf في ملف pom على الإطلاق. في هذه الحالة ستصرّح الأداة بوضوح «لا يمكن الحكم من قراءة pom»، بدلاً من اعتباره غير موجود.

ثلاثة أسس للتعرف، مرتبة حسب الموثوقية:

  1. Implementation-Version في MANIFEST —— يُتعرف عليه حتى لو غيّرت أدوات إعادة التغليف اسم الـ jar. (في مجلد META-INF/ داخل jar الرسمي لـ Thymeleaf يوجد MANIFEST.MF فقط، ولا يوجد مجلد maven/، لذا فهو بالنسبة له الأساس الأقوى.)
  2. بيانات Maven الوصفية pom.properties
  3. اسم ملف jar

سيتم فك BOOT-INF/lib/ وWEB-INF/lib/ داخل fat jar / war وفحصها واحدة تلو الأخرى، كما تُقرأ MANIFEST الخاصة بالـ jar المضمّن.


ثغرتا CVE هما آليتان مختلفتان

CVE-2026-40477CVE-2026-41901
GHSAGHSA-r4v4-5mwr-2fwrGHSA-c9ph-gxww-7744
CVSS9.09.0
受影响<= 3.1.3.RELEASE<= 3.1.4.RELEASE
修复3.1.4.RELEASE3.1.5.RELEASE
披露2026-04-152026-05-04
官方原句"يفشل في تقييد نطاق الكائنات التي يمكن الوصول إليها بشكل صحيح""يفشل في تحييد تراكيب محددة بشكل صحيح"، ويحدث ذلك في سياق معزول (مقيّد)

نطاق التأثر في الثانية يشمل 3.1.4، لذا من رفع الإصدار إلى 3.1.4 وفقاً للاستشارة الأولى، فإنه يقع ضمن الثانية.

لكن لا تقرأ هذا على أنه «لم تُصلح الجهة الرسمية الأمر بشكل كامل» —— الاستشارتان تصفان آليتين مختلفتين، والإصداران الرسميان 3.1.4 (2026-04-12) و3.1.5 (2026-04-21) يفصل بينهما تسعة أيام، ولا يوجد أي نص رسمي يقول إن الإصلاح السابق كان غير مكتمل. هذه الأداة تضع الحقائق جنباً إلى جنب فقط، ولا تستنتج هذا الاستنتاج نيابة عنك.


كيف جاء جدول الحكم، وكيف تتحقق من أنه ما زال صالحاً

كل رقم في RuleTable.java يمكن التحقق منه بالرجوع إلى المصدر:

python tools/gen_rules.py --show

إنه يتحقق من جدول الحكم مقابل مصدرين أساسيين — نطاقات التأثر وقائمة الإصدارات لكل إصدار في OSV، وmaven-metadata.xml في Maven Central — ويخرج برمز غير صفري إذا لم يتطابقا.

ثلاثة اتفاقات:

  • رمز الخروج 2 عند تعذّر جلب البيانات، ويُبلّغ بـ«لم يتم التحقق»، وليس «نجح التحقق». لا يجوز قراءة انقطاع الشبكة على أنه صحيح كله.
  • التحقق فقط، دون تعديل الكود تلقائيًا. إذا تغيّرت الأرقام فعلى إنسان أن ينظر كيف تغيّرت.
  • يراقب تحديدًا أمرين من شأنهما أن يُبطل هذا الأداة: هل صدر 3.1.6، وهل ظهر فجأة إصدار 3.0.16 في خط 3.0.

البناء

mvn package        # JDK 17;target/thymeleaf-check-0.1.0.jar
mvn test           # 19 个用例

لا توجد تبعيات وقت التشغيل وهذا أمر مقصود: يجب أن تكون أداة التشخيص قابلة للإلقاء في أي بيئة وتعمل مباشرة.

License

Apache-2.0

رموز الخروج

الرمزالمعنى
0اكتمل الفحص، وقد قُرئ كل ملف فعليًا، ولا توجد نتائج تتطلب إجراءً منك
4هناك ملفات تعذّرت قراءتها —— ليست zip، أو المحتوى مقتطع، أو فشلت القراءة

🔴 أُضيف 4 في 2026-09-09، وسبب إضافته يستحق التوضيح. قبل ذلك، كانت الملفات التي تعذّرت قراءتها تترك سطر تنبيه واحدًا فقط في المخرجات، بينما كان رمز الخروج يبقى 0 —— الأثر المكتوب موجّه للبشر، أما CI والسكربتات فتنظر إلى رمز الخروج، وبالتالي فإن «لم أستطع قراءته» تعني في الأتمتة «نجاح». ملف jar تالف أو مشفّر أو غير مكتمل التنزيل كان يتحول بهدوء إلى عبارة «لم يُعثر على مشاكل».

«لم أستطع قراءته» و«أنت آمن» يجب أن يكونا جملتين منفصلتين.

⚠️ ملف jar فارغ صالح لا يُعدّ غير قابل للقراءة (سجل EOCD بحجم 22 بايت هو zip فارغ حقيقي)، ولن يُفعّل 4 —— فعندما تكثر الإنذارات الكاذبة، لن ينظر أحد إلى الإنذارات الحقيقية.

راجع الأقسام السابقة حول مستويات التحديد وملاحظات الاستخدام لمعاني رموز الخروج المتبقية.

تنزيل الأداة