
Workspace AI self-hosted con agenti, competenze e strumenti (Gmail, Calendar) che funziona interamente sulle tue chiavi API del provider (BYOK). Porta le tue chiavi — Groq, OpenRouter, NVIDIA, Hugging Face, Google AI.
Checker offline per i 21 advisory di sicurezza a livello di repository di
org.asynchttpclient:async-http-client (AsyncHttpClient, "AHC").
Ti dice a quali di essi il tuo jar è effettivamente esposto, segnala quelli che Dependabot e OSV
non riescono a vedere, e fornisce una risposta per riga: 3.0.13 (3.x) / 2.16.1 (2.x).
Singolo jar, zero dipendenze a runtime, completamente offline, Java 17+.
Il 2026-08-09 i maintainer di AsyncHttpClient hanno pubblicato 17 advisory di sicurezza sul
repository del progetto stesso (AsyncHttpClient/async-http-client → Security → Advisories).
Dependabot e OSV non leggono quella pagina. Leggono il . Al 2026-09-19 quel database contiene solo dei 17 (, , , , tutti aggiunti il 2026-09-17). Gli altri restituiscono da ; due di questi 13 hanno persino CVE ID (, ).
CVE-2026-85716CVE-2026-85717CVE-2026-85720CVE-2026-85721404GET /advisories/<GHSA>CVE-2026-85718CVE-2026-85719Includendo i quattro advisory più vecchi (CVE-2024-53990, CVE-2026-40490, CVE-2026-45300,
CVE-2026-55688), il repository ne elenca 21; il database globale ne ha 8.
Calcola "la versione che risolve tutto" dal database globale e la risposta per 3.x è
3.0.12. OSV concorda: POST /v1/query per 3.0.12 restituisce zero vulnerabilità.
Gli advisory del repository dicono che 3.0.12 rientra ancora nel range di cinque:
| Advisory | Severità | Cosa | Richiede |
|---|---|---|---|
GHSA-rqf5-2wxv-rjf4 | high | A una sfida Digest senza un nonce utilizzabile si risponde con Authorization: Basic, cioè la password in base64 | Un Realm Digest (autenticazione server o proxy) |
GHSA-jmqq-x5g9-9p2w | high | Quando una richiesta viene riprodotta verso un host diverso, la richiesta / le credenziali del primo host vanno al secondo host | Replay verso un altro host (un ResponseFilter di failover o il percorso di retry su IOException) e credenziali o un proxy |
GHSA-vvp4-63h8-v5pm | medium | Le connessioni NTLM / Negotiate vengono riutilizzate tra principal diversi | NTLM o Negotiate con credenziali per-richiesta |
GHSA-f9m8-cv68-674w | medium | Il Domain del cookie non viene verificato rispetto alla public suffix list (Domain=co.uk) | Un CookieStore condiviso tra origini |
GHSA-qhv6-3pmh-95q4 | low | qop="auth-int" disattiva l'autenticazione mutua Digest (solo 3.0.12) | Autenticazione Digest |
Sii preciso sui due high: fanno trapelare credenziali, ma solo se hai configurato
credenziali (un Realm, Digest/NTLM, o un proxy) — e GHSA-jmqq richiede inoltre un replay verso un
host diverso. Un client che esegue semplici GET non autenticate non è esposto ad essi. Questo tool non
sa come usi il client; riporta ciò che dice il range di versioni e lascia la decisione a te.
I maintainer lo dicono essi stessi nel testo di CVE-2026-85721:
Nota che 3.0.12 è essa stessa affetta da un problema separato, GHSA-rqf5-2wxv-rjf4 … Aggiorna a 3.0.13 per ottenere entrambe le correzioni.
Quindi su 3.x: Dependabot dice 3.0.12, e dopo l'aggiornamento mostra verde. La risposta reale è
3.0.13. Su 2.x la risposta è 2.16.1 in entrambi i casi — ma 13 degli advisory dietro di essa sono
ancora invisibili al tuo scanner.
CVE-2026-85721 (high) è quello che si applica alle impostazioni predefinite: la decompressione
automatica delle risposte è attiva per impostazione predefinita, e il percorso HTTP/1.1 gonfia il body senza limite sulla dimensione
totale. Un server malevolo o compromesso — o chiunque sia in grado di modificare la risposta in transito — può inviare un
piccolo body gzip/deflate che esaurisce l'heap. Affetti: <= 3.0.11 e <= 2.16.0.
Questo è nel database globale, quindi Dependabot avvisa su di esso.
I range mescolano >=, <=, <, un esplicito = 3.0.12, e un semplice 3.0.0. Lo stesso 3.0.11 è
sicuro per CVE-2026-55688 (< 3.0.11) e affetto per GHSA-v9f2-7rw2-gr2x
(<= 3.0.11). La tabella delle regole mantiene ogni operatore esattamente come scritto; un'asserzione in
tools/gen_rules.py e un unit test falliscono se il confine smette di comportarsi così. Qualsiasi frammento di range
che il parser non riconosce è un errore — mai "non affetto".
Dove il repository e il database globale portano entrambi un advisory ma sono in disaccordo, la tabella delle regole
prende l'unione. Oggi è un solo caso: CVE-2024-53990 — il repository elenca solo la versione 3.x
3.0.0, il database globale elenca anche la 2.x >= 2.1.0, < 2.12.4. Fidarsi di un solo lato
sottostimerebbe.
pom.xml — di propositoAHC è di solito una dipendenza transitiva, tirata dentro da un SDK o da una libreria client. L'artifactId
potrebbe non apparire mai nel tuo pom.xml. Questo tool legge
META-INF/maven/org.asynchttpclient/async-http-client/pom.properties dentro i jar che effettivamente
vengono distribuiti — inclusi i jar annidati in un fat-jar Spring Boot (BOOT-INF/lib) o in un WAR (WEB-INF/lib).
La coordinata legacy 1.x com.ning:async-http-client ha lo stesso artifactId; è elencata ma non
giudicata.
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
Ogni hit stampa l'ID (CVE se presente, altrimenti GHSA), la severità, il titolo, la versione corretta, e
Dependabot/全局库:未收录 ("non nel database globale") dove applicabile. L'output è in
cinese.
| Codice | Significato |
|---|---|
0 | Non affetto da nessuno dei 21, e ogni file è stato effettivamente letto |
1 | Affetto |
2 | Impossibile giudicare — argomenti errati, nessun jar AHC trovato, versione non riconosciuta, o una versione pre-release che cade al di fuori dei range pubblicati |
4 | Qualche file non è stato leggibile — non uno zip, troncato, o un errore di I/O |
"Non sono riuscito a leggerlo" e "sei al sicuro" devono essere due frasi diverse. Un jar legittimamente vuoto
(un semplice record EOCD di 22 byte) non è un errore di lettura. Se un file è affetto e un altro è illeggibile,
il codice di uscita resta 1.
async-http-client. Le CVE di Netty nei jar Netty da cui AHC dipende
non sono coperte.tools/recheck_before_publish.py verifica se esiste ancora.src/main/java/dev/mikko/ahccheck/RuleTable.java è generato, mai modificato a mano:
python tools/gen_rules.py --dry # run the assertions only
python tools/gen_rules.py # regenerate the table
Legge gli advisory a livello di repository (vulnerable_version_range, patched_versions), cerca
ciascuno nel database globale, e registra "visibile a Dependabot: sì/no" come campo di ogni
regola. Sette asserzioni devono passare o nulla viene scritto: il conteggio degli advisory e l'esatto insieme dei 13
mancanti dal database globale corrispondono ancora alla baseline; le intersezioni sono ancora 3.0.13 /
2.16.1 (e 3.0.12 quando calcolate dal solo database globale); quelle versioni restituiscono 200
da Maven Central mentre una versione sentinella restituisce 404; 3.0.12 colpisce ancora almeno un advisory
high e nessuno di quelli è nel database globale; tutti gli stili di operatore sono presenti e il
caso limite si inverte ancora; e il disaccordo repository/globale è ancora esattamente quello noto.
I controlli end-to-end su jar reali si trovano in tools/e2e_real_jars.py (jar reali da Maven Central,
inclusi un fat-jar e un WAR). tools/recheck_before_publish.py riverifica il divario —
database globale, OSV e Maven Central, ciascuno con un controllo positivo e una sentinella — ed esce
con codice non-zero se qualcosa è cambiato.
Apache License 2.0 — vedi LICENSE.