Toute application lancée sous l'utilisateur actuel a accès au clavier, à la souris, à l'affichage (par exemple, prendre une capture d'écran), et ce n'est pas bon.
Tous les clients X11 sur un bureau peuvent accéder les uns aux autres en profondeur, y compris obtenir le contenu de n'importe quelle fenêtre, le modifier, fermer n'importe quelle fenêtre, simuler des événements de touche et de souris à n'importe quel autre client, saisir n'importe quel périphérique d'entrée, etc.
La conception du protocole X11 est basée sur l'idée que les clients sont tous de CONFIANCE et collaboreront, et non pas se marcher sur les pieds (ce dernier étant complètement cassé par les applications modernes comme Firefox, Chrome ou Java).
MAIS, si nous installons des programmes à partir du référentiel officiel (par exemple, pour Debian), qui sont peu susceptibles de contenir des enregistreurs de frappe, etc., le problème de danger est clairement exagéré. Ai-je tort ?
Les programmes ont des bugs, qui peuvent être exploités. Le serveur X11 et les bibliothèques peuvent ne pas être à jour. Par exemple, n'importe quel client X11 peut planter le serveur X dans la version actuelle de Debian (Buster 10) via des requêtes Xkb anodines. (Cela a été corrigé dans les sources en amont, mais ne l'a pas encore fait dans Debian). S'il est capable de le planter, il est alors probable qu'il soit également capable d'exécuter du code avec les privilèges du serveur X11 (accès au matériel, etc.).
Pour les problèmes avec l'authentification laxiste dans Xwayland (et le Xorg Xserver régulier dans Debian), voir les notes de la fin de cette réponse.
Oui, vous pouvez ouvrir des applications sur des serveurs séparés (par exemple, Xephyr), mais ce n'est pas pratique car il n'y a pas de presse-papiers partagé. La création d'un presse-papiers basé sur des fichiers tmp est également peu pratique.
Notez qu'à moins que vous ne preniez des mesures supplémentaires, Xephyr
autorise tout utilisateur local pour s'y connecter par défaut. Voir ceci pour une discussion à ce sujet.
La création d'un presse-papiers partagé entre plusieurs serveurs X11 est un problème intéressant, qui mérite son propre Q&A, plutôt que mélangé avec celui-ci.
Les applications exécutées sur la même machine avec le même compte utilisateur peuvent utiliser le ptrace
appel système pour modifier la mémoire de processus de l'autre, donc X11 n'est pas la surface d'attaque la plus pratique ici.
Pour les applications auxquelles vous ne faites pas entièrement confiance, vous devez d'abord les exécuter avec un ID utilisateur différent (comme Android le fait avec les applications de différents fournisseurs), et vous pouvez utiliser l'extension XSECURITY pour générer un jeton d'accès "non approuvé" pour le serveur X , avec lequel l'accès de l'application à X11 est restreint :
- pas d'accès aux événements d'entrée non dirigés vers la propre fenêtre
- pas d'accès à l'extension XTEST
- pas de fenêtres transparentes
Les événements d'entrée dans X11 ont un Synthetic
champ qui indique si l'événement d'entrée a été généré à partir d'un périphérique d'entrée ou envoyé à partir d'un autre programme, et le programme récepteur décide quoi faire avec les événements synthétiques, par exemple xterm
les ignore tout simplement. L'extension XTEST permet de générer des non-Synthetic
événements du logiciel à des fins de test, c'est pourquoi les clients non approuvés ne sont pas autorisés à utiliser cette extension.