
エージェント、スキル、ツール(Gmail、Calendar)を備えたセルフホスト型AIワークスペース。すべて自分のプロバイダーAPIキー(BYOK)で動作します。自分のキーを持ち込みましょう — Groq、OpenRouter、NVIDIA、Hugging Face、Google AI。
org.asynchttpclient:async-http-client (AsyncHttpClient、"AHC") のリポジトリレベルのセキュリティアドバイザリ21件に対応したオフラインチェッカー。
あなたの jar が実際にどのアドバイザリに晒されているかを判定し、Dependabot と OSV では見えないものにフラグを立て、1行につき1つの答えを返します: 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件のうち2件には CVE ID さえ付いています (CVE-2026-85718、CVE-2026-85719)。
古い4件のアドバイザリ (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 が依然として5件の範囲内にあると述べています:
2件の high については正確に述べておきます: これらは認証情報を漏洩させますが、認証情報を設定した場合のみ (a Realm、Digest/NTLM、またはプロキシ) であり、さらに GHSA-jmqq は別ホストへのリプレイを必要とします。認証なしの平文 GET を行うクライアントはこれらに晒されません。このツールはあなたがクライアントをどう使っているかを知りません。バージョン範囲が示すことを報告し、判断はあなたに委ねます。
メンテナ自身が CVE-2026-85721 の本文でこう述べています:
Note that 3.0.12 is itself affected by a separate issue, GHSA-rqf5-2wxv-rjf4 … Upgrade to 3.0.13 to pick up both fixes.
つまり 3.x では: Dependabot は 3.0.12 と言い、アップグレード後は緑色を示します。本当の答えは 3.0.13 です。 2.x ではどちらでも答えは 2.16.1 ですが、その背後にある13件のアドバイザリは依然としてあなたのスキャナには見えません。
CVE-2026-85721 (high) は デフォルト設定 に適用されるものです: 自動レスポンス解凍はデフォルトで有効であり、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 のアサーションとユニットテストは、境界がこのように振る舞わなくなると失敗します。パーサが認識しない範囲断片はエラーです — 決して「影響なし」ではありません。
リポジトリとグローバルデータベースの両方がアドバイザリを持ちながら不一致の場合、ルールテーブルは 和集合 を取ります。現在それは1件です: CVE-2024-53990 — リポジトリは 3.x バージョン 3.0.0 のみを掲載し、グローバルデータベースは 2.x >= 2.1.0, < 2.12.4 も掲載しています。片方だけを信頼すると過少報告になります。
pom.xml をスキャンしない — 意図的にAHC は通常 推移的 依存であり、SDK やクライアントライブラリによって取り込まれます。artifactId があなたの pom.xml に現れないこともあります。このツールは、実際に出荷される jar の中の META-INF/maven/org.asynchttpclient/async-http-client/pom.properties を読み取ります — Spring Boot fat-jar (BOOT-INF/lib) や WAR (WEB-INF/lib) にネストされた jar も含みます。レガシーな 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 があれば CVE、なければ GHSA)、深刻度、タイトル、修正バージョン、そして該当する場合は Dependabot/全局库:未收录 (「グローバルデータベースに未収録」) を出力します。出力は中国語です。
| コード | 意味 |
|---|
「読み取れなかった」と「安全である」は別々の文でなければなりません。正当に空の jar (裸の22バイトの EOCD レコード) は読み取り失敗ではありません。あるファイルが影響を受け、かつ 別のファイルが読み取れない場合、終了コードは 1 のままです。
async-http-client のみ。 AHC が依存する Netty jar 内の Netty CVE は対象外です。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 に可視: はい/いいえ」をすべてのルールのフィールドとして記録します。7つのアサーションがパスしなければ何も書き込まれません: アドバイザリ数とグローバルデータベースから欠落している13件の正確な集合が依然としてベースラインと一致すること; 交差部分が依然として 3.0.13 / 2.16.1 であること (そしてグローバルデータベースのみから計算した場合は 3.0.12); それらのバージョンが Maven Central から 200 を返し、センチネルバージョンが 404 を返すこと; 3.0.12 が依然として少なくとも1件の high アドバイザリに該当し、それらのいずれもグローバルデータベースにないこと; すべての演算子スタイルが存在し、境界ケースが依然として反転すること; そしてリポジトリ/グローバルの不一致が依然として既知の1件のみであること。
実際の jar によるエンドツーエンドチェックは tools/e2e_real_jars.py にあります (Maven Central からの実際の jar、fat-jar と WAR を含む)。tools/recheck_before_publish.py はギャップを再検証します — グローバルデータベース、OSV、Maven Central のそれぞれについて、ポジティブコントロールとセンチネル付きで — そして何かが動いていれば非ゼロで終了します。
Apache License 2.0 — LICENSE を参照。
| アドバイザリ | 深刻度 | 内容 | 必要条件 |
|---|
GHSA-rqf5-2wxv-rjf4 | high | 使用可能な nonce のない Digest チャレンジに対して Authorization: Basic で応答する。つまりパスワードが base64 で送られる | Digest Realm (サーバーまたはプロキシ認証) |
GHSA-jmqq-x5g9-9p2w | high | リクエストが 別の ホストにリプレイされると、最初のホストのリクエスト / 認証情報が2番目のホストに送られる | 別ホストへのリプレイ (フェイルオーバー ResponseFilter または IOException リトライ経路) かつ 認証情報またはプロキシ |
GHSA-vvp4-63h8-v5pm | medium | NTLM / Negotiate 接続がプリンシパル間で再利用される | リクエストごとの認証情報を用いた NTLM または Negotiate |
GHSA-f9m8-cv68-674w | medium | Cookie の Domain が public suffix list に対してチェックされない (Domain=co.uk) | オリジン間で共有される CookieStore |
GHSA-qhv6-3pmh-95q4 | low | qop="auth-int" が Digest 相互認証をオフにする (3.0.12 のみ) | Digest 認証 |
0 | 21件のいずれにも影響されず、かつすべてのファイルが実際に読み取られた |
1 | 影響あり |
2 | 判定不能 — 不正な引数、AHC jar が見つからない、認識できないバージョン、または公開範囲外のプレリリースバージョン |
4 | 一部のファイルを読み取れなかった — zip でない、切り詰められている、または I/O 障害 |