desenv-web-rp.com

O Vim é imune a ataques de copiar e colar?

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

Tudo bem, mas e se o Vim for meu editor de texto? Alguém poderia criar um conteúdo que alterne o Vim para o modo de comando e execute o comando malicioso?

112
Adam Trhon

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, de modo que apenas ls -la é visível para o visualizador casual (não está visualizando a fonte). Note 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 o 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), veria ls -la mas se você executar o :messages, você pode ver os resultados do comando Vim oculto.

Defesa

Para se defender desse ataque, é melhor permanecer no modo Normal e colar usando "*p ou "+p. No modo Normal, quando p utilizando texto de um registro, o texto completo (incluindo a parte oculta) é colado. O mesmo não acontece no modo Inserir (mesmo que :set paste) foi definido.

Modo de pasta entre colchetes

Versões recentes do Vim suportam modo de colagem entre colchetes que atenuam esse tipo de ataque de copiar e colar. Sato Katsura esclareceu que “O suporte à 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 colagem entre colchetes deveriam protegem você ao colar usando Ctrl-Shift-V (a maioria dos ambientes de desktop GNU/Linux), Ctrl-V (MS Windows), Command-V (Mac OS X), Shift-Insert ou um clique no meio do mouse.

Teste

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 tela filtra a fuga sequência usada para ativar/desativar o modo de colar entre colchetes (existe um patch mas parece que ele 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 por meio da 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 GNU não esteja bloqueando as seqüências de escape relevantes No entanto, o usuário nneonneorelatórios que a elaboração cuidadosa de sequências de escape pode ser usada para sair do modo de colar entre colchetes.

Observe que, mesmo com uma versão atualizada do Vim, a Prova de conceito sempre funcionará se o usuário colar do * registre-se 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 de seu conteúdo de registro. Portanto, nunca use esse método ao colar de uma fonte não confiável (é algo que costumo fazer - mas agora comecei a me treinar para não usar).

Links Relacionados

Conclusão

Use o modo Normal ao colar texto (a partir de + ou * registra).

... ou use o Emacs. Ouvi dizer que é um sistema operacional decente. :)

106
Anthony Geoghegan

Se você estiver usando o recurso da área de transferência X11, ou um equivalente específico da plataforma, e usar colar com o botão do meio com o suporte ao mouse ativado ou um comando vim paste e não com nenhum comando de colar no terminal (shift-middle-button ou qualquer atalho no terminal ofertas), então você pode estar seguro.

Caso contrário, se você possui um emulador de terminal que suporta o modo de colar entre parênteses, e ativou isso no seu terminal e no vim, e esse emulador de terminal implementa proteção contra a injeção da sequência de escape que termina o modo de colar entre parênteses, então você pode estar seguro.

Caso contrário, você pode estar vulnerável ao ataque descrito aqui .

0
sh1