
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 database globale degli advisory di GitHub. Al
2026-09-19 quel database contiene solo 4 dei 17 (CVE-2026-85716, CVE-2026-85717,
CVE-2026-85720, CVE-2026-85721, tutti aggiunti il 2026-09-17). Gli altri 13 restituiscono 404 da
GET /advisories/<GHSA>; due di questi 13 hanno persino CVE ID (CVE-2026-85718, CVE-2026-85719).
Includendo 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