Se você possui um shell raiz em uma sessão de tela (desanexada ou não, protegida por senha ou não) e seu screen
executável não é setxid, um invasor que obtém seus privilégios pode executar comandos nesse shell. Se nada mais, eles podem fazer isso rastreando o processo da tela.
Se a tela for setuid ou setgid e a sessão for desanexada e protegida por senha, em princípio, será necessária a senha da tela para executar comandos nesse shell. Se esse princípio for válido, alguém que apenas comprometeu sua conta teria que colocar um cavalo de Troia no lugar e esperar que você digite a senha. No entanto, a superfície de ataque (ou seja, o número de lugares onde as coisas podem dar errado devido a um bug ou configuração incorreta) é desconfortavelmente grande. Além dos recursos básicos de segurança do sistema, você confia em:
- para obter a senha correta.
- tela para impedir o acesso à sessão por outros meios.
- tela para usar os mecanismos de controle de acesso do SO corretamente (por exemplo, permissões nos tubos).
- o kernel para executar as verificações de segurança do ptrace corretamente (essa é uma fonte frequente de vulnerabilidades).
- o shell em execução para não fazer nada estúpido.
- algum outro recurso para não morder você.
“Alguma outra característica para não te morder”: sim, isso é vago. Mas é sempre uma preocupação em segurança. Você pode ficar tentado a descartar isso como um simples pensamento positivo, mas você realmente pensou em tudo? Por exemplo…
Contanto que você possa gravar no dispositivo do terminal, poderá injetar dados na entrada desse shell. Sob a configuração padrão da tela em minha máquina:
printf '\ekfoo\017bar\e\\' >/dev/pts/33
printf '\e[21t' >/dev/pts/33
Isso insere ␛]lfoobar␛l
no fluxo de entrada do shell. \ek
é a sequência de controle que permite que um aplicativo (ou qualquer coisa que possa gravar no dispositivo do terminal) defina o título da janela (consulte a seção “Nomeando janelas” no manual da tela ) e \e[21t
faz com que o terminal relate seu título na entrada padrão do aplicativo ( A tela não documenta essa sequência, mas a implementa; você pode encontrá-la CSI Ps ; Ps ; Ps ; t
na lista de seqüências de controle xterm.De fato, pelo menos na tela 4.0.3, todos os caracteres de controle são removidos do título relatado, para que o shell leia lfoobar
(supondo que ␛]
não esteja vinculado a um comando de edição) e nenhuma nova linha.Portanto, o invasor não pode realmente executar um comando dessa maneira, mas pode preencher um comando comochmod u+s /bin/sh
seguido por muitos espaços e um prompt de aparência provável.
Screen implementa várias outras seqüências de controle de risco semelhantes, não sei qual é a potencialidade delas para vulnerabilidades. Mas espero que agora você possa ver que a proteção oferecida pelas senhas das sessões de tela não é tão boa. Uma ferramenta de segurança dedicada, como o sudo, tem muito menos chances de ter vulnerabilidades.
sudo
.