Os terminais VT100 (que todos os emuladores modernos de terminal imitam até certo ponto) suportam vários comandos problemáticos, mas os emuladores ou distribuições modernos desativam os mais problemáticos e os menos úteis. Aqui está uma lista não exaustiva de sequências de escape potencialmente arriscadas (sem incluir as que simplesmente tornam a exibição ilegível de alguma forma):
- Os comandos arbitrários do arquivo de log em rxvt e Eterm relatados por HD Moore . Esses são realmente grandes erros, felizmente corrigidos por muito tempo.
- O comando answerback, também conhecido como Return Terminal Status, chamado por
ENQ
( Ctrl+E
). Isso insere o texto no terminal como se o usuário o tivesse digitado. No entanto, este texto não está sob controle do atacante: é o próprio nome do terminal, geralmente algo como xterm
ou screen
. No meu sistema (compressão Debian), o xterm retorna a string vazia por padrão (isso é controlado pelo answerbackString
recurso).
- Os comandos Enviar Atributos do Dispositivo
ESC [ c
e amigos. O terminal responde com ESC [ … c
(onde …
pode conter dígitos e sinais de pontuação ASCII apenas). Essa é uma maneira de consultar alguns recursos do terminal, principalmente obsoletos, mas talvez usados por aplicativos antigos. Novamente, a resposta do terminal é indistinguível da entrada do usuário, mas não está sob controle do invasor. A sequência de controle pode parecer uma tecla de função, mas somente se o usuário tiver uma configuração incomum (nenhuma das configurações usuais que encontrei possui uma sequência de escape válida da tecla de função que é um prefixo da resposta do terminal).
- As várias funções de controle do dispositivo (o DCS escapa, começando com
ESC P
).
- Não sei que mal pode ser causado
DECUDK
(defina teclas definidas pelo usuário) em um emulador de terminal típico.
DECRQSS
(Request Status String) é outro comando ao qual o terminal responde com uma sequência de escape, desta vez começando com \eP
; isso pode ser problemático, pois \eP
é uma chave válida ( Alt+ Shift+ P).
- O Xterm possui mais dois recursos experimentais:
ESC P + p …
e ESC P + q …
, para obter e definir seqüências de caracteres termcap. A partir da descrição, isso pode ser usado pelo menos para modificar o efeito das teclas de função.
- Vários comandos do relatório de status:
ESC [ … n
(Relatório de status do dispositivo). O terminal responde com uma sequência de escape. A maioria dessas seqüências de escape não corresponde às seqüências de escape das teclas de função. Parece problemático: o relatório ESC [ 6 n
é da forma onde e são seqüências de dígitos, e isso pode parecer com alguns modificadores.ESC [ x ; y R
x
y
F3
- Comandos de manipulação de janelas
ESC [ … t
.
- Alguns deles permitem que a janela do xterm seja redimensionada, iconificada etc., o que é perturbador.
- Alguns deles fazem com que o terminal responda com uma sequência de escape. A maioria dessas seqüências de escape parece de baixo risco, no entanto, existem dois comandos perigosos: as respostas
ESC [ 2 0 t
e ESC [ 2 1 t
o rótulo e o título do ícone da janela do terminal, respectivamente, e o atacante pode escolher esses.
- Pelo menos no Debian squeeze, o xterm ignora esses comandos por padrão; eles podem ser ativados configurando o
allowWindowOps
recurso ou seletivamente através do disallowedWindowOps
recurso. O Gnome-terminal no Ubuntu 10.04 implementa até as respostas ao título por padrão. Não verifiquei outros terminais ou versões.
- Comandos para definir o título do terminal ou o nome do ícone. No xterm e na maioria dos outros terminais X, eles são . Em Tela, a sequência de escape é . Acho que a preocupação com esses comandos é superestimada. Embora eles permitam uma certa quantidade de travessuras, qualquer página da Web tem o mesmo problema. Atuar em uma janela baseada apenas em seu título e não em sua classe é semelhante a abrir um arquivo cujo nome foi dado a você por uma parte não confiável, ou não citar uma expansão variável em um script de shell ou dar um tapinha no nariz de um cão raivoso - não reclame se você for mordido.
ESC ] digit ; title ESC \
ESC k title ESC \
Acho a resposta de Varnish falsa. Parece que ele está tentando mudar a culpa, ou no modo nazista de segurança (qualquer preocupação de segurança, genuína ou não, justifica o blackballing de um recurso).
A sabedoria das fugas de resposta de terminal em geral tem sido questionada em intervalos regulares, mas ainda assim nenhum dos principais programas de emulação de terminal achou adequado descartar essas seqüências, provavelmente em uma tentativa equivocada de compatibilidade com a tecnologia não usada nos anos 1970. (…)
Em vez de culpar todo e qualquer programa que grava arquivos de log, seria muito mais produtivo, do ponto de vista da segurança, fazer com que os programas de emulação de terminal parem de fazer coisas estúpidas e, assim, conserte esse e outros problemas de segurança de uma vez e para todos.
Muitas das respostas são recursos úteis: um aplicativo precisa saber coisas como a posição do cursor e o tamanho da janela. Definir o título da janela também é muito útil. Seria possível confiar inteiramente nas ioctl
chamadas para elas, no entanto, isso exigiria código e utilitários adicionais para fazer essas ioctl
chamadas e transformá-las em texto no estilo unix, transmitindo descritores de arquivos. Mudar essas interfaces agora seria muito trabalhoso, com pouco benefício.
Os arquivos de texto não devem conter caracteres não imprimíveis, como caracteres de controle. Geralmente, espera-se que os arquivos de log sejam arquivos de texto. Os arquivos de log não devem conter caracteres de controle.
Se você está preocupado que um arquivo pode conter sequências de escape, abra-o em um editor, ou vê-lo com less
sem -r
ou -R
opção, ou visualizá-lo através de cat -v
.