
مساحة عمل ذكاء اصطناعي مستضافة ذاتيًا مع وكلاء ومهارات وأدوات (Gmail، Calendar) تعمل بالكامل على مفاتيح API الخاصة بمزودك (BYOK). أحضر مفاتيحك الخاصة — Groq، OpenRouter، NVIDIA، Hugging Face، Google AI.
مدقّق يعمل دون اتصال بالإنترنت للتنبيهات الأمنية الـ 21 على مستوى المستودع الخاصة بـ
org.asynchttpclient:async-http-client (AsyncHttpClient، "AHC").
يخبرك أيّها يتعرّض لها jar لديك فعليًا، ويشير إلى تلك التي لا يستطيع Dependabot و OSV
رؤيتها، ويعطيك إجابة واحدة لكل سطر: 3.0.13 (3.x) / 2.16.1 (2.x).
ملف jar واحد، بلا أي تبعيات وقت التشغيل، يعمل دون اتصال بالكامل، Java 17+.
في 2026-08-09 نشر القائمون على AsyncHttpClient 17 تنبيهًا أمنيًا على مستودع المشروع
نفسه (AsyncHttpClient/async-http-client → Security → Advisories).
لا يقرأ Dependabot و OSV تلك الصفحة. بل يقرآن قاعدة بيانات التنبيهات العالمية على GitHub. حتى
2026-09-19 تحتوي تلك القاعدة على 4 فقط من الـ 17 (CVE-2026-85716، CVE-2026-85717،
CVE-2026-85720، CVE-2026-85721، وكلها أُضيفت في 2026-09-17). أما الـ 13 الأخرى فتُعيد 404 من
GET /advisories/<GHSA>؛ بل إن اثنين من هؤلاء الـ 13 لديهما معرّفات CVE (CVE-2026-85718، CVE-2026-85719).
وبإضافة التنبيهات الأربعة الأقدم (CVE-2024-53990، CVE-2026-40490، CVE-2026-45300،
CVE-2026-55688)، يسرد المستودع 21 تنبيهًا؛ بينما تحتوي قاعدة البيانات العالمية على 8.
احسب "الإصدار الذي يزيل كل شيء" من قاعدة البيانات العالمية وستكون إجابة 3.x هي
3.0.12. ويوافق OSV على ذلك: POST /v1/query للإصدار 3.0.12 يُعيد صفر ثغرات.
لكن تنبيهات المستودع تقول إن 3.0.12 لا يزال داخل نطاق خمسة منها:
كن دقيقًا بشأن الخطيرين: فهما يسرّبان بيانات الاعتماد، لكن فقط إذا كنت قد ضبطت
بيانات اعتماد (Realm، أو Digest/NTLM، أو وسيط) — كما يحتاج GHSA-jmqq إضافةً إلى ذلك إلى إعادة إرسال إلى
مضيف مختلف. أما عميل يقوم بطلبات GET عادية غير مصادَق عليها فهو غير معرّض لهما. هذه الأداة لا
تعرف كيف تستخدم العميل؛ إنها تُبلّغ بما يقوله نطاق الإصدار وتترك القرار لك.
يقول القائمون على المشروع ذلك بأنفسهم في نص CVE-2026-85721:
لاحظ أن 3.0.12 متأثر هو نفسه بمشكلة منفصلة، GHSA-rqf5-2wxv-rjf4 … قم بالترقية إلى 3.0.13 للحصول على كلا الإصلاحين.
إذن على 3.x: يقول Dependabot إن 3.0.12، وبعد الترقية يُظهر اللون الأخضر. الإجابة الحقيقية هي
3.0.13. أما على 2.x فالإجابة هي 2.16.1 في كلتا الحالتين — لكن 13 من التنبيهات الكامنة خلفها
لا تزال غير مرئية لماسحك الضوئي.
CVE-2026-85721 (عالية) هو التنبيه الذي ينطبق على الإعدادات الافتراضية: فك ضغط الاستجابة
التلقائي مُفعّل افتراضيًا، ومسار HTTP/1.1 يفك ضغط الجسم بلا حد على الحجم الإجمالي.
يمكن لخادم خبيث أو مخترَق — أو أي شخص قادر على تعديل الاستجابة أثناء النقل — أن يرسل
جسم gzip/deflate صغيرًا يستنزف الذاكرة العشوائية. المتأثرون: <= 3.0.11 و <= 2.16.0.
هذا التنبيه موجود في قاعدة البيانات العالمية، لذا يُنبّه Dependabot عليه.
تخلط النطاقات بين >= و <= و < و = 3.0.12 صريح و 3.0.0 مجرّد. الإصدار نفسه 3.0.11 هو
آمن بالنسبة لـ CVE-2026-55688 (< 3.0.11) ومتأثر بالنسبة لـ GHSA-v9f2-7rw2-gr2x
(<= 3.0.11). يحتفظ جدول القواعد بكل معامل كما هو مكتوب تمامًا؛ ويفشل تأكيد في
tools/gen_rules.py واختبار وحدة إذا توقف الحد عن التصرف بهذه الطريقة. أي جزء من نطاق
لا يتعرف عليه المحلل اللغوي يُعد خطأً — وليس أبدًا "غير متأثر".
حيث يحمل كل من المستودع وقاعدة البيانات العالمية تنبيهًا لكنهما يختلفان، يأخذ جدول القواعد
الاتحاد. اليوم هذه حالة واحدة: CVE-2024-53990 — فالمستودع يسرد فقط إصدار 3.x
3.0.0، بينما تسرد قاعدة البيانات العالمية أيضًا 2.x >= 2.1.0, < 2.12.4. والثقة بطرف واحد
فقط ستؤدي إلى تقليل الإبلاغ.
pom.xml — عن قصدعادةً ما يكون AHC تبعية غير مباشرة، تجرّها إليك حزمة SDK أو مكتبة عميل. وقد لا يظهر
artifactId أبدًا في pom.xml لديك. تقرأ هذه الأداة
META-INF/maven/org.asynchttpclient/async-http-client/pom.properties داخل ملفات jar التي تُشحن فعليًا — بما في ذلك ملفات jar المتداخلة في fat-jar الخاص بـ Spring Boot (BOOT-INF/lib) أو WAR (WEB-INF/lib).
الإحداثي القديم 1.x وهو com.ning:async-http-client له نفس artifactId؛ وهو مُدرَج لكنه غير محكوم.
java -jar async-http-client-check.jar target/ # scan build output
java -jar async-http-client-check.jar myapp.jar # fat-jar / war, nested jars included
java -jar async-http-client-check.jar --version-of 3.0.12 # judge a version directly
تطبع كل إصابة المعرّف (CVE إن وُجد، وإلا GHSA)، والخطورة، والعنوان، والإصدار المُصلَح، و
Dependabot/全局库:未收录 ("غير مُدرَج في قاعدة البيانات العالمية") حيث ينطبق ذلك. المخرجات باللغة
الصينية.
"لم أستطع قراءته" و"أنت آمن" يجب أن تكونا جملتين مختلفتين. ملف jar فارغ بشكل مشروع
(سجل EOCD مجرّد بحجم 22 بايت) ليس فشل قراءة. إذا كان ملف متأثرًا و آخر غير قابل للقراءة،
فإن رمز الخروج يبقى 1.
async-http-client. ثغرات Netty في ملفات jar الخاصة بـ Netty التي يعتمد عليها AHC
غير مغطاة.tools/recheck_before_publish.py مما إذا كانت لا تزال موجودة.src/main/java/dev/mikko/ahccheck/RuleTable.java مُولَّد، ولا يُحرَّر يدويًا أبدًا:
python tools/gen_rules.py --dry # run the assertions only
python tools/gen_rules.py # regenerate the table
يقرأ التنبيهات على مستوى المستودع (vulnerable_version_range، patched_versions)، ويبحث عن
كل واحد منها في قاعدة البيانات العالمية، ويسجّل "مرئي لـ Dependabot: نعم/لا" كحقل لكل
قاعدة. يجب أن تنجح سبعة تأكيدات وإلا لا يُكتب شيء: عدد التنبيهات والمجموعة الدقيقة للـ 13
المفقودة من قاعدة البيانات العالمية لا تزال مطابقة لخط الأساس؛ والتقاطعات لا تزال 3.0.13 /
2.16.1 (و 3.0.12 عند الحساب من قاعدة البيانات العالمية وحدها)؛ وتلك الإصدارات تُعيد 200
من Maven Central بينما يُعيد إصدار حرس 404؛ و3.0.12 لا يزال يصطدم بتنبيه عالٍ واحد على الأقل
وليس أي منها في قاعدة البيانات العالمية؛ وجميع أنماط المعاملات موجودة وحالة
الحد لا تزال تنقلب؛ والاختلاف بين المستودع وقاعدة البيانات العالمية لا يزال بالضبط الاختلاف المعروف.
توجد فحوصات شاملة من البداية إلى النهاية على ملفات jar حقيقية في tools/e2e_real_jars.py (ملفات jar فعلية من Maven Central،
بما في ذلك fat-jar و WAR). ويعيد tools/recheck_before_publish.py التحقق من الفجوة —
قاعدة البيانات العالمية، وOSV، وMaven Central، كل منها بضابط إيجابي وحرس — ويخرج
بقيمة غير صفرية إذا تحرّك أي شيء.
Apache License 2.0 — انظر LICENSE.
| التنبيه | الخطورة | ماذا | يحتاج إلى |
|---|
GHSA-rqf5-2wxv-rjf4 | عالية | تحدّي Digest بدون nonce صالح يُجاب عليه بـ Authorization: Basic، أي كلمة المرور بترميز base64 | Realm من نوع Digest (مصادقة الخادم أو الوسيط) |
GHSA-jmqq-x5g9-9p2w | عالية | عند إعادة إرسال طلب إلى مضيف مختلف، يُرسَل طلب المضيف الأول / بيانات اعتماده إلى المضيف الثاني | إعادة الإرسال إلى مضيف آخر (ResponseFilter للتبديل الاحتياطي أو مسار إعادة المحاولة عند IOException) و بيانات اعتماد أو وسيط |
GHSA-vvp4-63h8-v5pm | متوسطة | يُعاد استخدام اتصالات NTLM / Negotiate عبر هويات مختلفة | NTLM أو Negotiate مع بيانات اعتماد لكل طلب |
GHSA-f9m8-cv68-674w | متوسطة | لا يُفحص Domain الخاص بملف تعريف الارتباط مقابل قائمة النطاقات العامة (Domain=co.uk) | CookieStore مشترك عبر أصول مختلفة |
GHSA-qhv6-3pmh-95q4 | منخفضة | qop="auth-int" يُعطّل المصادقة المتبادلة في Digest (في 3.0.12 فقط) | مصادقة Digest |
| الرمز | المعنى |
|---|
0 | غير متأثر بأي من الـ 21، وقد قُرئ كل ملف فعليًا |
1 | متأثر |
2 | تعذّر الحكم — وسائط خاطئة، أو لم يُعثر على jar الخاص بـ AHC، أو إصدار غير معروف، أو إصدار ما قبل الإصدار يقع خارج النطاقات المنشورة |
4 | تعذّرت قراءة بعض الملفات — ليس ملف zip، أو مبتور، أو فشل إدخال/إخراج |