Jede Anwendung, die unter dem aktuellen Benutzer gestartet wird, hat Zugriff auf die Tastatur, die Maus und das Display (z. B. um einen Screenshot zu machen), und das ist nicht gut.
Alle X11-Clients auf einem Desktop können umfassend aufeinander zugreifen, einschließlich des Abrufens des Inhalts eines beliebigen Fensters, des Änderns, des Schließens eines beliebigen Fensters, des Vortäuschens von Tasten- und Mausereignissen für jeden anderen Client, des Zugriffs auf ein beliebiges Eingabegerät usw.
Das Design des X11-Protokolls basiert auf der Idee, dass die Clients alle VERTRAUENSWÜRDIG sind und zusammenarbeiten, anstatt sich gegenseitig auf die Zehen zu treten (letzteres wird von modernen Apps wie Firefox, Chrome oder Java völlig zerstört).
ABER, wenn wir Programme aus dem offiziellen Repository (z. B. für Debian) installieren, die wahrscheinlich keine Keylogger usw. enthalten, dann ist das Gefahrenproblem eindeutig übertrieben. Liege ich falsch?
Programme haben Fehler, die ausgenutzt werden können. Der X11-Server und die Bibliotheken sind möglicherweise nicht auf dem neuesten Stand. Beispielsweise kann jeder X11-Client abstürzen den X-Server in der aktuellen Version von Debian (Buster 10) über harmlose Xkb-Anfragen. (Das wurde in den Upstream-Quellen behoben, hat es aber noch nicht in Debian geschafft). Wenn es ihn zum Absturz bringen kann, besteht eine gewisse Wahrscheinlichkeit, dass er auch Code mit den Privilegien des X11-Servers ausführen kann (Zugriff auf Hardware usw.).
Zu den Problemen mit der laxen Authentifizierung in Xwayland (und dem regulären Xorg Xserver in Debian) siehe die Anmerkungen am Ende dieser Antwort.
Ja, Sie können Anwendungen auf separaten Servern öffnen (z. B. Xephyr), dies ist jedoch umständlich, da keine gemeinsame Zwischenablage vorhanden ist. Das Erstellen einer Zwischenablage basierend auf tmp-Dateien ist ebenfalls umständlich.
Beachten Sie, dass, wenn Sie keine zusätzlichen Schritte unternehmen, Xephyr
erlaubt jeden lokalen Benutzer um sich standardmäßig damit zu verbinden. Siehe dies für eine Diskussion darüber.
Das Erstellen einer gemeinsamen Zwischenablage zwischen mehreren X11-Servern ist ein interessantes Problem, das eine eigene Frage und Antwort verdient, anstatt sich damit zu vermischen.
Anwendungen, die auf demselben Computer mit demselben Benutzerkonto ausgeführt werden, können den ptrace
verwenden Systemaufruf, um den Prozessspeicher des anderen zu modifizieren, daher ist X11 hier nicht die bequemste Angriffsfläche.
Für Anwendungen, denen Sie nicht vollständig vertrauen, müssen Sie sie zuerst mit einer anderen Benutzer-ID ausführen (wie es Android mit Anwendungen von verschiedenen Anbietern tut), und Sie können die XSECURITY-Erweiterung verwenden, um ein „nicht vertrauenswürdiges“ Zugriffstoken für den X-Server zu generieren , mit der der Zugriff der Anwendung auf X11 eingeschränkt wird:
- kein Zugriff auf Eingabeereignisse, die nicht auf das eigene Fenster gerichtet sind
- kein Zugriff auf die XTEST-Erweiterung
- keine transparenten Fenster
Eingabeereignisse in X11 haben einen Synthetic
Feld, das angibt, ob das Eingabeereignis von einem Eingabegerät generiert oder von einem anderen Programm gesendet wurde, und das empfangende Programm entscheidet, was mit synthetischen Ereignissen geschehen soll, zum Beispiel xterm
ignoriert sie einfach. Die XTEST-Erweiterung ermöglicht die Generierung von Nicht-Synthetic
Ereignisse von Software zu Testzwecken, weshalb nicht vertrauenswürdige Clients diese Erweiterung nicht verwenden dürfen.