
أداة Java دون اتصال بالإنترنت تفحص ملفات JAR الخاصة بالتطبيقات لتحديد مدى تعرضها لـ 14 ثغرة CVE في Netty codec-http، وتحدد الإصدار المُصحَّح الدقيق (4.1.137.Final/4.2.17.Final) على الرغم من الحدود غير المتسقة في النشرات الأمنية.
أداة فحص دون اتصال للثغرات الأمنية الأربعة عشرة io.netty:netty-codec-http CVE (2025–2026).
تخبرك أي منها أنت معرّض لها فعليًا — والإصدار الوحيد الذي يزيلها جميعًا:
4.1.137.Final / 4.2.17.Final، وهو رقم غير مذكور في أي من النشرات الأمنية الأربع عشرة.
CVE-2025-58056 · CVE-2025-67735 · CVE-2026-33870 · CVE-2026-41417 · CVE-2026-42580 · CVE-2026-42581 · CVE-2026-42585 · CVE-2026-42587 · · · · · ·
CVE-2026-50020CVE-2026-56746CVE-2026-59898CVE-2026-59899CVE-2026-59903CVE-2026-59921ملف jar واحد، بدون أي تبعيات وقت التشغيل، يعمل دون اتصال بالكامل، Java 17+.
كل وحدة من وحدات Netty تُصدر تحت نفس رقم الإصدار، لذا تبدو الترقية كقرار واحد. ليست كذلك. على خط 4.1، إصدارات الإصلاح لهذه الأربع عشرة تقع على 125 / 129 / 132 / 133 / 135 / 136 / 137 — سبع قيم مختلفة. اتبع أي نشرة أمنية واحدة و ستظل داخل النطاق المتأثر للبقية.
netty-codec-http2 يصرّح بأن netty-codec-http تبعية compile مع
<version>${project.version}</version> — الإصداران مربوطان ببعضهما البعض.
لذا إذا قمت بالترقية إلى 4.1.136.Final لأن هذا هو الإصدار الذي يزيل ثغرات
netty-codec-http2 السبع، فأنت الآن تشغّل netty-codec-http 4.1.136.Final أيضًا — و
CVE-2026-59903 يغطي <= 4.1.136.Final. أنت بحاجة إلى 4.1.137.Final. نفس القصة على
خط 4.2: إجابة HTTP/2 هي 4.2.16.Final، وهذا الجانب يحتاج 4.2.17.Final.
هذا ليس ادعاءً بأن نصيحة HTTP/2 كانت خاطئة — لقد أجابت عن وحدة مختلفة. إنه ادعاء بأن "رقم إصدار واحد" يخفي حقيقة أنك كنت تجيب عن وحدة واحدة فقط.
عبر هذه النشرات الأربع عشرة، الحد الأعلى مكتوب <= 16 مرة و < 12 مرة.
نفس 4.1.136.Final لذلك آمن لـ CVE-2026-56746 (< 4.1.136.Final) و
متأثر لـ CVE-2026-59903 (<= 4.1.136.Final).
تطبيع العامل في أي اتجاه ينتج إجابة خاطئة — أحد الاتجاهين يبالغ في الإبلاغ، والآخر
يقلل في الإبلاغ، والتقليل في الإبلاغ هو الخطأ المكلف لأداة مثل هذه.
جدول القواعد يحافظ على كل عامل تمامًا كما كتبته النشرة، وتأكيد في
tools/gen_rules.py يفشل البناء إذا توقفت حالة الحدود هذه عن التصرف بهذه الطريقة.
pom.xml — عن قصدإذا كنت تستخدم Spring WebFlux، فإن netty-codec-http تصل عبر
spring-boot-starter-webflux
-> spring-boot-starter-reactor-netty
-> reactor-netty-http
-> netty-codec-http
الـ artifactId لا يظهر أبدًا في pom.xml الخاص بك. الفحص القائم على pom يجيب "أنا لا أستخدمها"،
وهذا خطأ. هذه الأداة تقرأ ملفات jar التي تُشحن فعليًا.
java -jar netty-http-check.jar target/ # فحص مخرجات البناء
java -jar netty-http-check.jar myapp.jar # Spring Boot fat-jar / war، يشمل ملفات jar المتداخلة
java -jar netty-http-check.jar --version-of 4.1.136.Final # الحكم على إصدار مباشرة
رموز الخروج: 0 = غير متأثر · 1 = متأثر · 2 = تعذّر الحكم.
🔴
2ليس0عمدًا. "لم يتم العثور على شيء" و"نظيف" يجب ألا يبدوا متشابهين لسكربت. الملف الذي ليس zip قابلًا للقراءة يُبلَّغ عنه كفشل قراءة، ولا يُعامل أبدًا بصمت كـ "لا يوجد netty هنا".
netty-codec-http. وحدات Netty الأخرى لها ثغرات CVE خاصة بها؛
النتيجة النظيفة هنا لا تقول شيئًا عنها. إذا كنت تشغّل أيضًا netty-codec-http2، فإن الأداة
تقول ذلك وتشير إلى مشكلة الوحدات المتقاطعة أعلاه، لكنها لا تحكم على تلك الوحدة.منخفضة؛ تُطبع كما هي، ولا تُدمج في إجمالي مخيف.مُراجَعة مع بيانات حزمة كاملة، لذا فإن Dependabot وأمثاله
ينبّهون عليها بالفعل. هذه الأداة ليست "الماسح لا يستطيع رؤيتها" — بل هي "التنبيه يخبرك
برقم إصدار لكل نشرة، وما زلت بحاجة إلى معرفة أي إصدار واحد ينهيها."src/main/java/dev/mikko/nettyhttpcheck/RuleTable.java مُولَّد، ولا يُحرَّر يدويًا أبدًا:
python tools/gen_rules.py --dry # تشغيل التأكيدات فقط
python tools/gen_rules.py # إعادة توليد الجدول
سبعة تأكيدات يجب أن تنجح أو لا يُكتب شيء — من بينها: كل نشرة ما زالت
مُراجَعة؛ كلا خطي الإصدار موجودان لكل منها؛ التقاطع المحسوب ما زال
4.1.137.Final / 4.2.17.Final؛ تلك الإصدارات قابلة للجلب فعليًا من Maven Central
(مع إصدار حارس يجب أن يعطي 404، حتى لا يمر فحص معطوب بصمت)؛
حالة الحدود في §3 ما زالت تنقلب؛ وإجابة HTTP/2 من §2 ما زالت تترك ثغرة على هذا الجانب.
فحوصات النهاية إلى النهاية بملفات jar حقيقية موجودة في tools/e2e_real_jars.py — وهي تنزّل ملفات jar
فعلية من Maven Central بدلًا من النماذج، لأن "يعمل على zip مبني يدويًا، يفشل على jar الحقيقي"
هو نمط فشل حقيقي.
MIT