Repository navigation
Releases: xiaoqiMikko/async-http-client-check
Release list
v0.2.0 —— 更正:3.x 要升 3.0.14;2.x 已停止维护,2.16.1 仍中 5 条且不会再修
更正:v0.1.0 的三句结论都已过时(截至 2026-10-12)
v0.1.0(2026-09-20)说的是:「全局漏洞库只收了 17 条里的 4 条」「Dependabot 叫你升 3.0.12」「终点是 3.0.13 / 2.16.1」。这三句在当时成立,现在都不成立:
- 2026-09-24 官方仓库又发了 5 条公告,修复在 3.0.14;2.x 线不修。
- 2026-10-08 GitHub 全局漏洞库补收了 9 条(08-09 那批 5 条 + 09-24 那批 4 条)。
v0.1.0 会把 3.0.13 和 2.16.1 判成干净,它们现在都不是。请换用 v0.2.0。
现在的结论
| 线 | 结论 |
|---|---|
| 3.x | 升到 3.0.14 |
| 2.x | 没有干净的 2.x 版本。 终版 2.16.1 仍中 5 条,这 5 条在 2.x 上没有修复版,只能迁到 3.0.14 |
2.x 那 5 条,官方公告的 Patches 段逐条写着同一句:
The 2.x line is end of life and will not receive a fix. Upgrade to 3.0.14.
| 编号 | 官方评级 | 2.x 区间 | 触发前提 |
|---|---|---|---|
| CVE-2026-107230 | high | >= 2.0.0, <= 2.16.1 |
用 NTLM / Kerberos / SPNEGO,或走需要登录的 SOCKS / CONNECT 代理,且同一个 client 发不同身份的请求 |
| CVE-2026-107227 | high | >= 2.2.0, <= 2.16.1 |
开了 WebSocket 压缩(默认关) |
| CVE-2026-107228 | medium | >= 2.1.0, <= 2.16.1 |
默认开启的 cookie 存储里有该源的 cookie,同时又用 setHeader 自己设 Cookie 头 |
| CVE-2026-107226 | medium | >= 2.1.0, <= 2.16.1 |
同一个 cookie 存储同时访问同站的明文 HTTP 与 HTTPS |
| CVE-2026-107229 | medium | >= 2.16.0, <= 2.16.1 |
同一个 client 访问多个源,其中一个受攻击者影响 |
两条 high 都不是「发普通请求就中」;三条 medium 落在默认开启的 cookie 存储上。本工具只按版本区间判,用没用到由你自己判断。
另外:26 条仓库级公告里,全局漏洞库(Dependabot / OSV 的数据源)截至 2026-10-12 仍缺 9 条,其中官方评 high 的 2 条(CVE-2026-107232、CVE-2026-85719,都与代理凭据有关,影响 <= 3.0.11 / <= 2.16.0)。
这一版改了什么
- 规则表从 21 条重新生成为 26 条(七条断言全过,其中一条专门守着「修复版为空只在官方写明停止维护时才认,不许当成不受影响」)。
- 新增「本线无修复版」的判定与输出:
2.16.1退出码由0改为1,不再给出任何 2.x 版本号当答案。 - 老的 2.x 版本会如实写「留在 2.x 线最多能升到 2.16.1,升完仍中 5 条」。
- 输出首行印出规则表生成日 —— 「未收录」是那一天的快照,之后可能已补收。
- 41 个单元测试;8 个真 jar 端到端场景(Central 上的 3.0.11 / 3.0.12 / 3.0.13 / 3.0.14 / 2.12.3 / 2.16.1,含 fat-jar 与 war)。
tools/recheck_before_publish.py换成新口径,独立口径用 OSV(OSV 对 3.0.14 返回零漏洞、对 2.16.1 返回 4 条)。
用法
java -jar async-http-client-check.jar target/
java -jar async-http-client-check.jar myapp.jar
java -jar async-http-client-check.jar --version-of 2.16.1Java 17+,零依赖,离线。退出码:0 = 没中 · 1 = 中了 · 2 = 判不了 · 4 = 有文件读不动。
SHA256(async-http-client-check.jar):8c7663dfc94ea260c0a1c994e1499e73d5a09293ccf1177e32d6b76521da86f9
v0.1.0 —— Dependabot 叫你升 3.0.12,官方仓库说还中 5 条,要 3.0.13
17 条公告,GitHub 全局漏洞库只收了 4 条(截至 2026-09-20)
2026-08-09 AsyncHttpClient 仓库一次发布了 17 条 security advisory。GitHub 全局漏洞库(Dependabot / OSV 的数据源)只收录了其中 4 条(CVE-2026-85716 / 85717 / 85720 / 85721),其余 13 条按编号查全部 404。
于是 Dependabot 会让你升到 3.0.12 修 CVE-2026-85721(解压炸弹),升完显示干净——但官方仓库公告显示 3.0.12 还中 5 条(其中 2 条 high),要 3.0.13。85721 的公告原文自己也写着:3.0.12 is itself affected by a separate issue, GHSA-rqf5-2wxv-rjf4 … Upgrade to 3.0.13。
| 线 | Dependabot 叫你升到 | 仓库级公告的终点 |
|---|---|---|
| 3.x | 3.0.12 | 3.0.13 |
| 2.x | 2.16.1 | 2.16.1 |
凭据泄露类的几条都有前提(用了 Digest 认证 / HTTP 或 SOCKS 代理 / 请求被重放到另一台主机),多数项目碰不到;85721 默认配置即可触发,前提是对端恶意或传输中被篡改。
用法
java -jar async-http-client-check.jar /path/to/app/lib # 部署目录
java -jar async-http-client-check.jar app.jar # Spring Boot fat jar / war
java -jar async-http-client-check.jar --version-of 3.0.12 # 只问一个版本号
退出码:0 = 没中 · 1 = 中了 · 2 = 用法错误 / 版本认不出 · 4 = 有文件读不动。
判定表由 tools/gen_rules.py 从仓库级 advisory 生成,逐条查全局库收录状态;tools/recheck_before_publish.py 用 OSV / Maven Central / 原文三个独立口径复核。需要 Java 8+。