Répertoire d'outils
Catégories
CVE-2026-20660 — Exploit PoC autonome pour CVE-2026-20660 : traversée de chemin dans le décodeur gzip de Safari. Le serveur fournit un gzip malveillant pour écrire des fichiers arbitraires sur macOS vulnérable. | Kitploit
Outils / GitHub / retx0 / cve-2026-20660
retx0/cve-2026-20660 CVE-2026-20660 Exploit PoC autonome pour CVE-2026-20660 : traversée de chemin dans le décodeur gzip de Safari. Le serveur fournit un gzip malveillant pour écrire des fichiers arbitraires sur macOS vulnérable.
2 2 il y a 5 moisDécouvrez les outils les plus utilisés par notre communauté.
7 derniers jours 30 derniers jours
Bundle PoC CVE-2026-20660
Ce dossier regroupe une preuve de concept autonome pour :
CVE-2026-20660
Traversée de chemin CFNetwork NSGZipDecoder via FNAME gzip
Impact sur Safari macOS vulnérable avec l'ouverture automatique activée
1. Structure du répertoire
server.py : serveur PoC principal avec profondeur de traversée et nom de cible configurables
server_overwrite.py : variante ciblée écrivant ../../pwn.sh
README.md : notes de reproduction et journal d'exploitation
2. Prérequis
Le Safari macOS cible est vulnérable (avant la série de correctifs 26.3).
Réglage Safari activé :
Préférences -> Général -> Ouvrir les fichiers sûrs après téléchargement
Vous pouvez accéder à cet hôte depuis le navigateur cible.
3. Résumé de la cause racine Le diff du correctif montre que -[NSGZipDecoder filenameWithOriginalFilename:] a changé de comportement :
Ancien comportement : renvoyer directement le nom dérivé du FNAME gzip.
Nouveau comportement : appliquer lastPathComponent avant de renvoyer.
Cela bloque les composants de répertoire tels que ../ et les chemins absolus dans FNAME.
4. Pourquoi Content-Disposition n'est pas le vecteur Le nom de fichier HTTP peut être propre et l'exploitation réussit quand même.
Nom de fichier HTTP Content-Disposition : propre (exemple : report.gz)
FNAME d'en-tête gzip : malveillant (exemple : ../../proof.txt)
L'assainissement côté Safari s'applique principalement aux noms de la couche HTTP, pas au FNAME gzip intégré consommé par NSGZipDecoder dans le flux vulnérable.
5. Démarrage rapide Depuis la racine du dépôt :
python3 exploit/cve-2026-20660/server.py --port 8888 --depth 2
Ouvrir dans un Safari vulnérable :
Cliquer sur Trigger depth=2.
6. Validation Après le déclenchement, vérifiez le résultat d'écriture sur la machine cible :
ls -la ~/cve-2026-20660-proof.txt
cat ~/cve-2026-20660-proof.txt
Pour la variante d'écrasement :
python3 exploit/cve-2026-20660/server_overwrite.py --port 9999
ls -la ~/pwn.sh
cat ~/pwn.sh
7. Notes sur les paramètres (server.py)
--bind, -b : adresse de liaison (par défaut 0.0.0.0)
--port, -p : port d'écoute (par défaut 8888)
--depth, -d : profondeur de traversée (nombre de répétitions de ../, par défaut 2)
--name, -n : nom du fichier de sortie cible
# write to ~/proof.txt when depth matches runtime directory nesting
python3 exploit/cve-2026-20660/server.py -p 8888 -d 2 -n proof.txt
# explicit absolute path test (if resolver permits)
python3 exploit/cve-2026-20660/server.py -p 8888
# then use: /download?depth=0&fname=/tmp/proof.txt
8. Comportement observé (notes actuelles)
La décompression peut se produire dans un répertoire temporaire sous ~/Downloads, donc la profondeur doit souvent être >= 2 pour s'échapper vers ~/.
Les fichiers cibles existants peuvent ne pas être écrasés ; la pile de téléchargement peut renommer automatiquement pour éviter les collisions.
Les charges utiles de script peuvent apparaître avec les bits exécutables lors des exécutions observées ; validez selon la version/configuration.
9. Dépannage
Aucune écriture observée :
Vérifiez que le réglage d'ouverture automatique de Safari est activé.
Augmentez la profondeur (2, 3, 4) et refaites le test.
Le fichier reste dans Téléchargements :
Profondeur insuffisante pour l'imbrication actuelle du répertoire de décompression.
Échec de connexion :
Vérifiez le pare-feu de l'hôte et l'accessibilité du réseau local.
Chemin cible inchangé :
Un conflit de nom de fichier existant peut entraîner un renommage de la sortie.
10. Sécurité et périmètre À utiliser uniquement dans des environnements de test autorisés.
Ne ciblez pas de systèmes sans autorisation explicite.
Conservez des charges utiles non destructives pour la reproductibilité.
Conservez des captures d'écran et des journaux comme preuve d'évaluation.
11. Collecte de preuves suggérée
Capture d'écran de la version de Safari et de la version du système d'exploitation.
Journaux de la console du serveur PoC (requête + FNAME).
Commandes de vérification du système de fichiers et leur sortie.
Liste du répertoire avant/après pour le chemin cible.
12. Compte-rendu détaillé Pour une explication plus détaillée, voir :