Cualquier aplicación iniciada desde debajo del usuario actual tiene acceso al teclado, el mouse, la pantalla (por ejemplo, tomar una captura de pantalla), y esto no es bueno.
Todos los clientes X11 en un escritorio pueden acceder entre sí en profundidad, lo que incluye obtener el contenido de cualquier ventana, cambiarlo, cerrar cualquier ventana, falsificar eventos de teclas y mouse para cualquier otro cliente, tomar cualquier dispositivo de entrada, etc.
El diseño del protocolo X11 se basa en la idea de que todos los clientes son DE CONFIANZA y colaborarán, no se pisarán los pies unos a otros (este último completamente roto por aplicaciones modernas como Firefox, Chrome o Java).
PERO, si instalamos programas del repositorio oficial (por ejemplo, para Debian), que es poco probable que contengan registradores de pulsaciones de teclas, etc., entonces el problema del peligro es claramente exagerado. ¿Me equivoco?
Los programas tienen errores, que pueden ser explotados. Es posible que el servidor y las bibliotecas X11 no estén actualizados. Por ejemplo, cualquier cliente X11 puede bloquearse el servidor X en la versión actual de Debian (Buster 10) a través de solicitudes inocuas de Xkb. (Eso se solucionó en las fuentes ascendentes, pero aún no llegó a Debian). Si puede bloquearlo, entonces existe cierta probabilidad de que también pueda ejecutar código con los privilegios del servidor X11 (acceso al hardware, etc.).
Para los problemas con la autenticación laxa en Xwayland (y el servidor Xorg X regular en Debian), consulte las notas al final de esta respuesta.
Sí, puede abrir aplicaciones en servidores separados (por ejemplo, Xephyr), pero esto es un inconveniente, ya que no hay un portapapeles compartido. Crear un portapapeles basado en archivos tmp también es un inconveniente.
Tenga en cuenta que, a menos que tome medidas adicionales, Xephyr
permite cualquier usuario local para conectarse a él de forma predeterminada. Vea esto para una discusión al respecto.
Crear un portapapeles compartido entre múltiples servidores X11 es un problema interesante, que merece su propia sesión de preguntas y respuestas, en lugar de mezclarlo con esto.
Las aplicaciones que se ejecutan en la misma máquina con la misma cuenta de usuario pueden usar el ptrace
llamada al sistema para modificar la memoria de proceso de cada uno, por lo que X11 no es la superficie de ataque más conveniente aquí.
Para las aplicaciones en las que no confía completamente, primero debe ejecutarlas con una ID de usuario diferente (como lo hace Android con aplicaciones de diferentes proveedores), y puede usar la extensión XSECURITY para generar un token de acceso "no confiable" para el servidor X. , con el que se restringe el acceso de la aplicación a X11:
- sin acceso a eventos de entrada no dirigidos a la propia ventana
- sin acceso a la extensión XTEST
- sin ventanas transparentes
Los eventos de entrada en X11 tienen un Synthetic
campo que indica si el evento de entrada se generó desde un dispositivo de entrada o se envió desde otro programa, y el programa receptor decide qué hacer con los eventos sintéticos, por ejemplo xterm
simplemente los ignora. La extensión XTEST permite generar no Synthetic
eventos del software con fines de prueba, razón por la cual los clientes que no son de confianza no pueden usar esa extensión.