retX0/CVE-2026-20660
GitHub: retX0/CVE-2026-20660
针对 macOS Safari 的 gzip FNAME 路径遍历漏洞(CVE-2026-20660)的 PoC 工具,支持自定义遍历深度和目标文件名。
Stars: 0 | Forks: 0
# CVE-2026-20660 PoC 捆绑包
此文件夹打包了一个独立的漏洞概念验证 (PoC),针对:
- CVE-2026-20660
- CFNetwork `NSGZipDecoder` 通过 gzip FNAME 实现的路径遍历
- 对启用了自动打开的易受攻击 macOS Safari 的影响
## 1. 目录结构
- `server.py`: 主 PoC 服务器,支持配置遍历深度和目标名称
- `server_overwrite.py`: 专注于写入 `../../pwn.sh` 的变体
- `README.md`: 复现笔记和操作日志
## 2. 前置条件
1. 目标是易受攻击的 macOS Safari(26.3 补丁线之前)。
2. Safari 设置已启用:
- 偏好设置 -> 通用 -> 下载后打开“安全”文件
3. 您可以从目标浏览器访问此主机。
## 3. 根本原因摘要
补丁差异显示 `-[NSGZipDecoder filenameWithOriginalFilename:]` 改变了行为:
- 旧行为:直接返回派生自 gzip FNAME 的名称。
- 新行为:在返回前应用 `lastPathComponent`。
这阻止了目录组件(如 `../`)和 FNAME 中的绝对路径。
## 4. 为什么 Content-Disposition 不是攻击载体
HTTP 文件名可以是干净的,但攻击仍然成功。
- HTTP `Content-Disposition` 文件名:干净的(例如:`report.gz`)
- gzip 头 FNAME:恶意的(例如:`../../proof.txt`)
Safari 端的清理主要应用于 HTTP 层名称,而不是易受攻击流程中 `NSGZipDecoder` 消耗的嵌入式 gzip FNAME。
## 5. 快速开始
从 repo 根目录:
```
python3 exploit/cve-2026-20660/server.py --port 8888 --depth 2
```
在易受攻击的 Safari 中打开:
```
http://:8888/
```
点击 `Trigger depth=2`。
## 6. 验证
触发后,在目标机器上验证写入结果:
```
ls -la ~/cve-2026-20660-proof.txt
cat ~/cve-2026-20660-proof.txt
```
对于覆盖变体:
```
python3 exploit/cve-2026-20660/server_overwrite.py --port 9999
```
然后打开:
```
http://:9999/
```
检查:
```
ls -la ~/pwn.sh
cat ~/pwn.sh
```
## 7. 参数说明 (`server.py`)
- `--bind`, `-b`: 绑定地址(默认 `0.0.0.0`)
- `--port`, `-p`: 监听端口(默认 `8888`)
- `--depth`, `-d`: 遍历深度(`../` 重复次数,默认 `2`)
- `--name`, `-n`: 目标输出文件名
示例:
```
# 当深度匹配运行时目录嵌套时写入 ~/proof.txt
python3 exploit/cve-2026-20660/server.py -p 8888 -d 2 -n proof.txt
# 显式绝对路径测试(如果 resolver 允许)
python3 exploit/cve-2026-20660/server.py -p 8888
# 然后使用:/download?depth=0&fname=/tmp/proof.txt
```
## 8. 观察到的行为(当前笔记)
1. 解压可能发生在 `~/Downloads` 下的临时目录中,因此深度通常需要 >= 2 才能逃逸到 `~/`。
2. 现有的目标文件可能不会被覆盖;下载堆栈可能会自动重命名以避免冲突。
3. 在观察到的运行中,脚本载荷可能出现可执行位;请根据构建/配置进行验证。
## 9. 故障排除
1. 未观察到写入:
- 确认 Safari 自动打开设置已启用。
- 增加深度(`2`, `3`, `4`)并重新测试。
2. 文件停留在 Downloads 中:
- 对于当前的解压目录嵌套,深度太浅。
3. 连接失败:
- 确认主机防火墙和 LAN 可达性。
4. 目标路径未更改:
- 现有文件名冲突可能导致输出被重命名。
## 10. 安全与范围
仅在授权的测试环境中使用。
- 未经明确许可,不得针对系统。
- 保持载荷非破坏性以利于复现。
- 存储截图/日志作为评估证据。
## 11. 建议的证据收集
1. Safari 版本和 OS 构建截图。
2. PoC 服务器控制台日志(请求 + FNAME)。
3. 文件系统验证命令和输出。
4. 目标路径的前后目录列表。
## 12. 详细文章
有关更详细的解释,请参阅:
- https://ret0.dev/posts/cve-2026-20660/
标签:CFNetwork, CISA项目, CVE-2026-20660, DNS 反向解析, DNS 解析, ExP, Gzip解压, macOS安全, NSGZipDecoder, PoC, Safari漏洞, 文件写入, 暴力破解, 漏洞复现, 目录穿越, 编程工具, 自动打开, 路径遍历, 远程代码执行, 逆向工具