O Vim é imune ao ataque de copiar e colar?

112

Você deve nunca colar da web no seu terminal . Em vez disso, você deve colar em seu editor de texto, verificar o comando e colá-lo no terminal.

Tudo bem, mas e se o Vim for meu editor de texto? Poderia forjar um conteúdo que muda o Vim para o modo de comando e executa o comando malicioso?

    
por Adam Trhon 03.04.2017 / 15:07

1 resposta

106

Resposta curta: Em muitas situações, o Vim é vulnerável a esse tipo de ataque (ao colar texto no modo Insert).

Prova de conceito

Usando o artigo vinculado como ponto de partida, consegui criar rapidamente uma página da web com o código a seguir, usando elementos de span de HTML e CSS para ocultar a parte do meio do texto, para que apenas ls -la fosse visível para o texto visualizador casual (não visualiza a fonte). Nota: o ^[ é o caractere Escape e o ^M é o caractere de retorno de carro. O Stack Exchange limpa a entrada do usuário e protege contra a ocultação de conteúdo usando CSS, por isso fiz o upload da prova de conceito .

ls ^[:echom "This could be a silent command."^Mi -la

Se você estivesse no modo Inserir e colasse este texto no terminal Vim (com alguns qualificadores, veja abaixo), você veria ls -la , mas se executar o comando :messages , poderá ver os resultados do comando oculto Vim .

Defesa

Para se defender contra esse ataque, é melhor permanecer no modo normal e colar usando "*p ou "+p . No modo Normal, quando p corta o texto de um registrador, o texto completo (incluindo a parte oculta) é colado. Isso não acontece no modo de inserção (mesmo se :set paste ) tiver sido definido.

Modo de colar entre colchetes

Versões recentes do suporte ao Vim modo de colar entre colchetes que atenuam esse tipo de ataque de copiar e colar. Sato Katsura esclareceu que “Suporte para colar entre colchetes apareceu no Vim 8.0.210 e foi corrigido mais recentemente na versão 8.0.303 (lançada em 2 de fevereiro de 2017)”.

Nota: Pelo que entendi, versões do Vim com suporte para o modo de colar entre colchetes devem protegê-lo ao colar usando Ctrl - Shift - V (a maioria dos ambientes de desktop GNU / Linux), Ctrl - V (MS Windows), Comando - V (Mac OS X), Deslocamento - Inserir ou um clique do meio do mouse.

Teste

Eu fiz alguns testes em uma máquina desktop Lubuntu 16.04 mais tarde, mas meus resultados foram confusos e inconclusivos. Eu já percebi que isso é porque eu sempre uso tela GNU mas acontece que tela filtra a seqüência de escape usada para ativar / desativar o modo de colar entre colchetes (existe um patch , mas parece que foi enviado em um momento em que o projeto não estava sendo mantido ativamente). Nos meus testes, a prova de conceito sempre funciona ao executar o Vim através da tela GNU, independentemente de o Vim ou o emulador de terminal suportarem o modo de colar entre colchetes.

Outros testes seriam úteis, mas, até agora, descobri que o suporte para o modo de colar entre colchetes pelo emulador de terminal bloqueia minha Prova de conceito - desde que a tela GNU não esteja bloqueando as sequências de escape relevantes. No entanto, o usuário nneonneo relata que a criação cuidadosa de sequências de escape pode ser usada para sair do modo de colar entre parênteses.

Observe que, mesmo com uma versão atualizada do Vim, a Prova de Conceito sempre funciona se o usuário cola do registro * no modo Inserir digitando ( Ctrl - < kbd> R * ). Isso também se aplica ao GVim, que pode diferenciar entre entrada digitada e colada. Neste caso, o Vim deixa para o usuário confiar no conteúdo do seu conteúdo de registro. Então, nunca use esse método ao colar de uma fonte não confiável (é algo que geralmente faço, mas agora comecei a treinar para não fazê-lo).

Links relacionados

Conclusão

Use o modo Normal ao colar texto (dos registros + ou * ).

… or use Emacs. I hear it’s a decent operating system. :)

    
por 03.04.2017 / 16:03