- De graves vulnérabilités de sécurité ont été découvertes dans GNU Screen 5.0.0 et dans les installations en setuid-root
- Les principaux problèmes incluent une élévation locale de privilèges root, le détournement de TTY et la création de PTY accessibles en écriture à tous
- De nombreuses distributions Linux et UNIX sont affectées en partie ou en totalité
- Des correctifs temporaires sont fournis et une action prioritaire est nécessaire dans plusieurs distributions
- La conception même de Screen en setuid-root présente des risques de sécurité fondamentaux
1. Introduction
- En juillet 2024, l’examen de sécurité a commencé lorsque le mainteneur upstream de Screen a demandé une revue de code
- Aucun problème particulier n’avait été trouvé auparavant, mais cette fois une grave vulnérabilité d’élévation de privilèges root a été découverte dans Screen 5.0.0 lorsqu’il est configuré en setuid-root
- En complément, plusieurs vulnérabilités de moindre gravité affectant aussi les versions antérieures (4.9.1, etc.) ont été identifiées
- Le rapport inclut des jeux de correctifs par version (4.9.1, 5.0.0)
- Il couvre notamment la configuration et la version de Screen selon les distributions, les principales vulnérabilités, les risques de développement liés au setuid-root, les recommandations de durcissement, les problèmes dans le processus de coordination de publication et une matrice d’impact
2. Aperçu de la configuration et des versions de Screen
- En août 2024, Screen 5.0.0 a été publié et intégré dans Arch Linux, Fedora 42 et NetBSD 10.1
- La version 5.0.0 comprend de nombreux refactorings, dont certains portent sur du code présent depuis plus de dix ans
- Certaines vulnérabilités ont été introduites dans 5.0.0, tandis que d’autres existaient déjà dans les versions précédentes (4.9.1, etc.)
- La plupart des distributions utilisent encore 4.9.1
- Le mode multi-utilisateur de Screen n’est disponible que lorsqu’il est installé en setuid-root, ce qui augmente fortement la surface d’attaque en raison de la complexité du code
- Parmi les principales distributions, Arch Linux, FreeBSD et NetBSD installent Screen en setuid-root ; Gentoo ne permet une installation en setuid-root qu’avec le drapeau USE « multiuser »
3. Détails des problèmes de sécurité
3.a) Obtention locale des privilèges root via logfile_reopen() (CVE-2025-23395)
- Lors de l’exécution de la version setuid-root de Screen 5.0.0, la fonction logfile_reopen() crée un fichier à partir d’un chemin fourni par l’utilisateur sans abandonner ses privilèges
- Un attaquant peut créer un fichier arbitraire appartenant à root afin d’y enregistrer des données de terminal puis en abuser
- Des fichiers déjà existants peuvent aussi être exploités, par exemple via l’injection de code dans un script shell privilégié
- Arch Linux et NetBSD 5.0.0 sont entièrement vulnérables, tandis que Fedora et certains environnements Gentoo sont partiellement vulnérables
- Le correctif a été appliqué en restaurant une gestion sécurisée des fichiers, avec des impacts spécifiques selon les distributions
3.b) Détournement de TTY lors de l’attachement à une session multi-utilisateur (CVE-2025-46802)
- Dans la fonction Attach(), lorsque l’option multiattach est activée, les permissions du TTY passent temporairement à 0666
- Pendant cette opération, une condition de concurrence (race condition) permet à un troisième utilisateur d’obtenir un accès en lecture/écriture à ce TTY
- Les risques incluent l’écoute des données d’entrée, leur modification et le vol de mots de passe
- Il existe également des chemins de code où les permissions du TTY ne sont pas restaurées
- Le correctif supprime la modification en chmod 666 ; certains cas de reconnexion peuvent ne plus fonctionner, mais ils ne fonctionnaient déjà pas auparavant
3.c) Vulnérabilité des permissions par défaut des PTY (CVE-2025-46803)
- Dans la version 5.0.0, les permissions par défaut des PTY sont passées de 0620 à 0622 (écriture pour tous)
- Cela augmente le risque potentiel en matière de sécurité, en particulier parce que tous les utilisateurs peuvent écrire sur les PTY d’autres utilisateurs
- Ce changement semble avoir été introduit par erreur, et le correctif rétablit la valeur sûre par défaut (0620) à la compilation
- Arch Linux et NetBSD sont les principaux systèmes affectés
3.d) Divulgation d’informations sur l’existence de fichiers via les messages d’erreur de socket (CVE-2025-46804)
- En utilisant la variable d’environnement SCREENDIR et les messages d’erreur, il est possible de vérifier avec les privilèges root l’existence réelle de fichiers ou répertoires
- Il s’agit d’une fuite d’informations mineure, mais le risque existe dans tous les environnements installés en setuid-root
3.e) Condition de concurrence TOCTOU dans l’envoi de signaux (CVE-2025-46805)
- En raison du décalage temporel entre les fonctions CheckPid() et Kill(), un signal pourrait être envoyé avec les privilèges root à un PID autre que celui visé
- Comme seuls SIGCONT, SIGHUP et quelques autres signaux sont principalement autorisés, l’impact reste limité, mais peut entraîner un déni de service (DoS) ou une légère atteinte à l’intégrité
3.f) Débordement lors de l’envoi de commandes dû à une mauvaise utilisation de strncpy()
- Dans la version 5.0.0, une mauvaise utilisation de
strncpy() provoque un débordement de tampon et un plantage du programme
- Si le correctif n’est pas appliqué correctement, l’envoi de commandes peut écraser la mémoire au-delà de MAXPATHLEN et conduire à une indisponibilité du service
- Ce n’est pas un problème de sécurité, mais une correction rapide est nécessaire pour la stabilité
4. Risques supplémentaires liés à l’implémentation setuid-root
- Une logique insuffisante dans la gestion des UID de plusieurs utilisateurs a été constatée en mode multi-utilisateur
- En mode setuid-root, la logique d’abandon des privilèges n’est pas complète
- Dans les sessions créées par root, la baisse effective des privilèges ne s’effectue pas correctement, ce qui augmente le niveau de risque global
5. Recommandations générales de durcissement
- Le vaste travail de refactoring a montré un affaiblissement de la logique de sécurité existante
- Étant donné la nature d’un binaire setuid-root, il est nécessaire d’introduire une suite de tests de sécurité et de concevoir de manière conservatrice tout traitement lié au système de fichiers et aux variables d’environnement
- L’exécution complète en setuid-root n’est particulièrement pas recommandée ; la fonctionnalité multi-utilisateur devrait être limitée à un mécanisme d’adhésion explicite pour un groupe de confiance
- Les variables d’environnement (PAH, etc.) doivent impérativement être limitées à des chemins de confiance
6. Problèmes dans la coordination de la divulgation des vulnérabilités
- Le processus de coordination avec l’upstream a été inefficace, entraînant des retards dans le développement des correctifs et dans la publication
- La compréhension du code et les capacités de l’upstream étaient insuffisantes, rendant une réponse étroite difficile
- Les distributions ont finalement pris l’initiative du développement des correctifs, et le rapport a été publié selon un calendrier coordonné
- Le manque de capacités de maintenance et de gestion du projet Screen lui-même a également été mis en évidence
7. Matrice d’impact
- Arch Linux (5.0.0, setuid-root) : toutes les vulnérabilités 3.a, 3.b, 3.c, 3.d, 3.e, 3.f s’appliquent
- Debian/Ubuntu et de nombreuses autres distributions : 3.b (impact partiel)
- Fedora 42 (5.0.0, setgid-screen) : 3.b (impact partiel), 3.f affecte
- Gentoo (4.9.1, setgid-utmp) : 3.b (impact partiel), et même impact que 5.0.0 avec un ebuild unstable + drapeau USE multiuser
- FreeBSD 14.2 (4.9.1, setuid-root) : 3.b, 3.d, 3.e affectent
- NetBSD 10.1 (5.0.0, setuid-root) : 3.a, 3.b, 3.c, 3.d, 3.e, 3.f affectent
- OpenBSD 7.7 (4.9.1) : 3.b (impact partiel)
- openSUSE TW : 3.b (impact partiel)
8. Calendrier
- 2024-07-01 : réception d’une demande de revue de code de l’upstream
- 2025-01-08 : début de la revue
- 2025-02-07 : signalement privé des vulnérabilités à l’upstream, avec demande de divulgation coordonnée
- 2025-02~04 : discussion autour des correctifs, puis réajustement du calendrier en raison de problèmes liés à la période d’embargo
- 2025-05-12 : publication du présent rapport et annonce officielle
9. Liens de référence
- GNU Savannah [page du projet Screen]
- openSUSE Bugzilla, avec les correctifs associés, les CVE de référence, les rapports de bug et les liens de documentation
1 commentaires
Avis Hacker News
setuid, cela ne semble pas nécessiter les privilèges root ; d’après l’explication dans le TFA, les développeurs actuels de screen ne semblent pas maîtriser entièrement la base de code, et auraient donc choisi le modesetuid-rootparce qu’il facilitait l’implémentation de la fonctionnalitéscreen -x <fenêtre d’un utilisateur donné>, afin qu’ils ne puissent utiliser que les fenêtres autorisées par cette ACL screen ; j’affiche ensuite l’écran de chaque étudiant un par un via le projecteur ; du coup, le fait que ce soit truffé de failles de sécurité ne me surprend passcreen -xsetuid rootSETGIDest défini sur le groupeutmp, sans que je sache vraiment ce que cela impliquesetuidsetuid rootdans les années 90setuid-root; seules les distributions configurées de cette façon sont vulnérables, les autres ne sont pas concernées ; quand les correctifs officiels tardent, les distributions appliquent directement leurs propres patchssetuidmentionnés ensemble ; une fois, pour résoudre un problème étrange, j’avais fait unchmod u+ssur screen ; le simple fait d’avoir à faire ça me paraissait bizarre ; mais j’ai fini par découvrir que screen avait des fonctionnalités qui dépendent desetuid, et que certains systèmes le distribuaient ainsi par défaut ; et après avoir activéu+s, screen lisait le~/.screenrcde root au lieu de mon~/.screenrc(je l’ai pris comme une rustine temporaire) ; j’imagine que la prise en charge desetuidpeut varier selon les builds de screensetuidest censé fonctionner à l’origine ; si on positionne ce bit spécial sur le binaire, cela signifie qu’il doit toujours s’exécuter sous l’utilisateur fourni