Você nunca deve colar da web para o 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?
security
vim
escape-characters
clipboard
special-characters
Adam Trhon
fonte
fonte
/bin/bash ; EOF rm -rf ~
. Quando colado no terminal, ele iniciaria o bash, encerrá-lo e excluir sua casa. Quando colado no gato, ele deixaria o gato imprimir o comando, finalizar o gato e excluir sua casa.Respostas:
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 .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).fonte
paste
mode (:set paste
) antes de colar no Vim. A pasta entre colchetes deve entrar em vigor, desde que o seu terminal também suporte. Sua prova de conceito não funciona quando opaste
modo está ativado.\e[201~
sequência no comando colar para sair do modo de pasta entre parênteses e continuará pressionando você de qualquer maneira. (A menos que eu perdi alguns detalhes sobre como enquadradas obras colar?)\x1b[201~
, a exploração funcionou como antes (ou seja, apenasls -la
foi gravada no buffer e oechom
comando foi executado). Portanto, acho que a pasta entre colchetes ainda está vulnerável a um ataque direcionado e não é uma solução suficientemente forte. (Na verdade, qualquer forma de sinalização in-band é vulnerável!):set paste
- a exploração ainda funciona. Para ser perfeitamente claro, eu colei o seguinte blob (codificado em base64):bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=
. No OS X, você pode copiar isso e executarpbpaste | base64 -D | pbcopy
para obter uma versão bruta na qual colarvim
.\x1b\x1b[201~[201~
) ou algo para enganar o filtro.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 .
fonte