
एजेंट, स्किल्स और टूल्स (Gmail, Calendar) के साथ सेल्फ-होस्टेड AI वर्कस्पेस जो पूरी तरह से आपकी अपनी प्रोवाइडर API keys (BYOK) पर चलता है। अपनी खुद की keys लाएँ — Groq, OpenRouter, NVIDIA, Hugging Face, Google AI।
org.asynchttpclient:async-http-client (AsyncHttpClient, "AHC") के 21 रिपॉज़िटरी-स्तरीय सुरक्षा सलाहों के लिए ऑफ़लाइन चेकर।
यह बताता है कि आपका jar वास्तव में किन-किन के प्रति उजागर है, उन पर ध्वज लगाता है जिन्हें Dependabot और OSV
नहीं देख सकते, और प्रति पंक्ति एक उत्तर देता है: 3.0.13 (3.x) / 2.16.1 (2.x)।
एकल jar, शून्य रनटाइम निर्भरताएँ, पूर्णतः ऑफ़लाइन, Java 17+।
2026-08-09 को AsyncHttpClient अनुरक्षकों ने परियोजना के अपने रिपॉज़िटरी
(AsyncHttpClient/async-http-client → Security → Advisories) पर 17 सुरक्षा सलाहें प्रकाशित कीं।
Dependabot और OSV उस पृष्ठ को नहीं पढ़ते। वे GitHub वैश्विक सलाह डेटाबेस को पढ़ते हैं। 2026-09-19 तक
उस डेटाबेस में 17 में से केवल 4 हैं (CVE-2026-85716, CVE-2026-85717,
CVE-2026-85720, CVE-2026-85721, सभी 2026-09-17 को जोड़े गए)। शेष 13 GET /advisories/<GHSA> से
404 लौटाते हैं; उन 13 में से दो के पास तो CVE ID भी हैं (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 सहमत है: 3.0.12 के लिए POST /v1/query शून्य कमज़ोरियाँ लौटाता है।
रिपॉज़िटरी की सलाहें कहती हैं कि 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 बॉडी भेज सकता है जो heap को समाप्त कर देती है। प्रभावित: <= 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 में एक assertion
और एक यूनिट टेस्ट विफल हो जाते हैं यदि सीमा इस तरह व्यवहार करना बंद कर दे। कोई भी सीमा
खंड जिसे पार्सर नहीं पहचानता, एक त्रुटि है — कभी भी "प्रभावित नहीं" नहीं।
जहाँ रिपॉज़िटरी और वैश्विक डेटाबेस दोनों एक सलाह रखते हैं लेकिन असहमत होते हैं, नियम तालिका
संघ लेती है। आज यह एक मामला है: CVE-2024-53990 — रिपॉज़िटरी केवल 3.x
संस्करण 3.0.0 सूचीबद्ध करती है, वैश्विक डेटाबेस 2.x >= 2.1.0, < 2.12.4 भी सूचीबद्ध करता है। केवल एक पक्ष पर भरोसा करना
कम-रिपोर्टिंग करेगा।
pom.xml को स्कैन नहीं करता — जानबूझकरAHC आमतौर पर एक पारगमन निर्भरता होती है, जिसे किसी SDK या क्लाइंट लाइब्रेरी द्वारा खींचा जाता है। artifactId
आपके pom.xml में कभी नहीं दिख सकता। यह उपकरण उन jars के अंदर
META-INF/maven/org.asynchttpclient/async-http-client/pom.properties पढ़ता है जो वास्तव में शिप होते हैं — जिनमें Spring Boot fat-jar (BOOT-INF/lib) या WAR (WEB-INF/lib) में नेस्टेड jars भी शामिल हैं।
विरासत 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
प्रत्येक हिट ID (यदि कोई हो तो CVE, अन्यथा GHSA), गंभीरता, शीर्षक, निश्चित संस्करण, और
जहाँ लागू हो वहाँ Dependabot/全局库:未收录 ("वैश्विक डेटाबेस में नहीं") प्रिंट करता है। आउटपुट
चीनी में है।
"मैं इसे पढ़ नहीं सका" और "आप सुरक्षित हैं" दो अलग वाक्य होने चाहिए। एक वैध रूप से खाली jar
(एक नंगा 22-बाइट EOCD रिकॉर्ड) पढ़ने की विफलता नहीं है। यदि एक फ़ाइल प्रभावित है और दूसरी अपठनीय है,
तो निकास कोड 1 ही रहता है।
async-http-client। Netty jars में Netty CVEs जिन पर 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 को दृश्यमान: हाँ/नहीं" को प्रत्येक
नियम के एक फ़ील्ड के रूप में दर्ज करता है। सात assertions पास होने चाहिए अन्यथा कुछ भी नहीं लिखा जाता: सलाह गणना और वैश्विक डेटाबेस से गुम ठीक 13 का सेट अभी भी बेसलाइन से मेल खाता है; प्रतिच्छेद अभी भी 3.0.13 /
2.16.1 हैं (और 3.0.12 जब केवल वैश्विक डेटाबेस से गणना की जाती है); वे संस्करण Maven Central से 200
लौटाते हैं जबकि एक sentinel संस्करण 404 लौटाता है; 3.0.12 अभी भी कम से कम एक उच्च
सलाह से टकराता है और उनमें से कोई भी वैश्विक डेटाबेस में नहीं है; सभी ऑपरेटर शैलियाँ मौजूद हैं और
सीमा मामला अभी भी पलटता है; और रिपॉज़िटरी/वैश्विक असहमति अभी भी ठीक ज्ञात वाली है।
वास्तविक-jar एंड-टू-एंड जाँचें tools/e2e_real_jars.py में हैं (Maven Central से वास्तविक jars,
जिनमें एक fat-jar और एक WAR शामिल है)। tools/recheck_before_publish.py अंतराल को पुनः सत्यापित करता है —
वैश्विक डेटाबेस, OSV और Maven Central, प्रत्येक एक सकारात्मक नियंत्रण और एक sentinel के साथ — और यदि कुछ भी हिला हो तो
गैर-शून्य निकास करता है।
Apache License 2.0 — देखें LICENSE।
| सलाह | गंभीरता | क्या | आवश्यकता |
|---|
GHSA-rqf5-2wxv-rjf4 | उच्च | उपयोग योग्य nonce के बिना Digest चुनौती का उत्तर Authorization: Basic से दिया जाता है, अर्थात् base64 में पासवर्ड | एक Digest Realm (सर्वर या प्रॉक्सी प्रमाणीकरण) |
GHSA-jmqq-x5g9-9p2w | उच्च | जब कोई अनुरोध भिन्न होस्ट पर पुनः चलाया जाता है, तो पहले होस्ट के अनुरोध / क्रेडेंशियल दूसरे होस्ट को चले जाते हैं | किसी अन्य होस्ट पर पुनः चलाना (एक failover ResponseFilter या IOException retry पथ) और क्रेडेंशियल या एक प्रॉक्सी |
GHSA-vvp4-63h8-v5pm | मध्यम | NTLM / Negotiate कनेक्शन प्रिंसिपल्स के बीच पुनः उपयोग किए जाते हैं | प्रति-अनुरोध क्रेडेंशियल के साथ NTLM या Negotiate |
GHSA-f9m8-cv68-674w | मध्यम | Cookie Domain की जाँच सार्वजनिक सफ़िक्स सूची के विरुद्ध नहीं की जाती (Domain=co.uk) | मूलों के बीच साझा CookieStore |
GHSA-qhv6-3pmh-95q4 | निम्न | qop="auth-int" Digest पारस्परिक प्रमाणीकरण को बंद कर देता है (केवल 3.0.12) | Digest प्रमाणीकरण |
| कोड | अर्थ |
|---|
0 | 21 में से किसी से भी प्रभावित नहीं, और प्रत्येक फ़ाइल वास्तव में पढ़ी गई |
1 | प्रभावित |
2 | निर्णय नहीं कर सका — खराब तर्क, कोई AHC jar नहीं मिला, अपरिचित संस्करण, या एक प्री-रिलीज़ संस्करण जो प्रकाशित सीमाओं के बाहर आता है |
4 | कुछ फ़ाइल पढ़ी नहीं जा सकी — zip नहीं, कटा हुआ, या एक I/O विफलता |