
Sou novo no X11 e quero entender se ele é realmente tão perigoso quanto dizem na Internet.
Vou explicar como entendo isso. Qualquer aplicativo iniciado pelo usuário atual tem acesso ao teclado, mouse, tela (por exemplo, fazer uma captura de tela), e isso não é bom. Mas, se instalarmos programas do repositório oficial(por exemplo, para Debian), que provavelmente não contêm keyloggers, etc., então o perigo parece exagerado. Estou errado?
Sim, você pode abrir aplicativos em servidores separados(por exemplo, Xephyr), mas isso é inconveniente, pois não há área de transferência compartilhada. Criar uma área de transferência baseada em arquivos tmp também é inconveniente.
Responder1
Qualquer aplicativo iniciado pelo usuário atual tem acesso ao teclado, mouse, tela (por exemplo, fazer uma captura de tela), e isso não é bom.
Todos os clientes X11 em um desktop podem acessar uns aos outros em profundidade, incluindo obter o conteúdo de qualquer janela, alterá-lo, fechar qualquer janela, falsificar eventos de teclas e mouse para qualquer outro cliente, capturar qualquer dispositivo de entrada, etc.
O design do protocolo X11 é baseado na ideia de que todos os clientes são CONFIÁVEIS e irão colaborar, e não pisar nos pés uns dos outros (este último completamente quebrado por aplicativos modernos como Firefox, Chrome ou Java).
MAS, se instalarmos programas do repositório oficial (por exemplo, para Debian), que provavelmente não contêm keyloggers, etc., então o problema do perigo é claramente exagerado. Estou errado?
Os programas possuem bugs, que podem ser explorados. O servidor X11 e as bibliotecas podem não estar atualizados. Por exemplo, qualquer cliente X11 podecolidiro servidor X na versão atual do Debian (Buster 10) por meio de solicitações Xkb inócuas. (Aquilo foifixonas fontes originais, mas ainda não apareceu no Debian). Se for capaz de travá-lo, há alguma probabilidade de que ele também seja capaz de executar código com os privilégios do servidor X11 (acesso ao hardware, etc.).
Para os problemas com a autenticação frouxa no Xwayland (e no Xorg Xserver regular no Debian), veja as notas no final doesta resposta.
Sim, você pode abrir aplicativos em servidores separados (por exemplo, Xephyr), mas isso é inconveniente, pois não há área de transferência compartilhada. Criar uma área de transferência baseada em arquivos tmp também é inconveniente.
Observe que, a menos que você tome medidas extras, Xephyr
permitequalquer usuário localpara se conectar a ele por padrão. Veressepara uma discussão sobre isso.
Criar uma área de transferência compartilhada entre vários servidores X11 é um problema interessante, que merece suas próprias perguntas e respostas, em vez de ser misturado a isso.
Responder2
Os aplicativos executados na mesma máquina com a mesma conta de usuário podem usar a ptrace
chamada do sistema para modificar a memória do processo uns dos outros, portanto, o X11 não é a superfície de ataque mais conveniente aqui.
Para aplicativos nos quais você não confia totalmente, primeiro é necessário executá-los com um ID de usuário diferente (como o Android faz com aplicativos de fornecedores diferentes) e você pode usar a extensão XSECURITY para gerar um token de acesso "não confiável" para o servidor X , com o qual o acesso do aplicativo ao X11 é restrito:
- sem acesso a eventos de entrada não direcionados à própria janela
- sem acesso à extensão XTEST
- sem janelas transparentes
Os eventos de entrada no X11 possuem um Synthetic
campo que informa se o evento de entrada foi gerado a partir de um dispositivo de entrada ou enviado de outro programa, e o programa receptor decide o que fazer com os eventos sintéticos, por exemplo, xterm
apenas os ignora. A extensão XTEST permite gerar não Synthetic
eventos de software para fins de teste, razão pela qual clientes não confiáveis não têm permissão para usar essa extensão.