Resposta curta: Em muitas situações, o Vim é vulnerável a esse tipo de ataque (ao colar texto no modo Inserir).
Prova de conceito
Usando o artigo vinculado como ponto de partida, pude criar rapidamente uma página da Web com o código a seguir, usando elementos de extensão HTML e CSS para ocultar a parte do meio do texto, para que ls -la
fique visível apenas para o visualizador casual (sem exibir o 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, então eu enviei a prova de conceito .
ls ^[:echom "This could be a silent command."^Mi -la
Se você estivesse no modo Inserir e colasse esse texto no terminal Vim (com alguns qualificadores, veja abaixo), veria, ls -la
mas se executar o :messages
comando, poderá ver os resultados do comando oculto do Vim.
Defesa
Para se defender deste ataque, é melhor permanecer no modo Normal e colar usando "*p
ou "+p
. No modo Normal, quando p texto Utting de um registro, o texto completo (incluindo a parte oculta) é colado. O mesmo não acontece no modo Inserir (mesmo que :set paste
) tenha sido definido.
Modo de pasta entre colchetes
Versões recentes do Vim suportam o modo de colar entre colchetes que atenua esse tipo de ataque de copiar e colar. Sato Katsura esclareceu que "O suporte para pasta 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, as versões do Vim com suporte ao 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), Command- V(Mac OS X), Shift- Insertou um mouse clique no meio.
Testando
Fiz alguns testes em uma máquina desktop Lubuntu 16.04 mais tarde, mas meus resultados foram confusos e inconclusivos. Desde então, percebi que isso acontece porque eu sempre uso a tela GNU, mas acontece que a tela filtra a sequência de escape usada para ativar / desativar o modo de colagem entre colchetes (há um patch, mas parece que ele foi enviado no momento em que o projeto não estava sendo mantido ativamente). Nos meus testes, a prova de conceito sempre funciona quando o Vim é executado na tela GNU, independentemente de o Vim ou o emulador de terminal suportar o modo de pasta entre colchetes.
Testes adicionais seriam úteis, mas até agora descobri que o suporte ao modo de colagem entre colchetes do emulador de terminal bloqueia minha Prova de Conceito - desde que a tela GNU não esteja bloqueando as seqüê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 colagem entre colchetes.
Observe que, mesmo com uma versão atualizada do Vim, a Prova de conceito sempre funciona se o usuário cola o *
registro no modo Inserir, digitando ( Ctrl- R*). Isso também se aplica ao GVim, que pode diferenciar entre entrada digitada e colada. Nesse caso, o Vim deixa ao usuário confiar no conteúdo do seu registro. Portanto, nunca use esse método ao colar de uma fonte não confiável (é algo que muitas vezes faço - mas agora comecei a me treinar para não usar).
Links Relacionados
Conclusão
Use o modo Normal ao colar texto (dos +
ou *
registradores).
... ou use o Emacs. Ouvi dizer que é um sistema operacional decente. :)