Respuesta corta: en muchas situaciones, Vim es vulnerable a este tipo de ataque (al pegar texto en modo Insertar).
Prueba de concepto
Utilizando el artículo vinculado como punto de partida, pude crear rápidamente una página web con el siguiente código, usando elementos de extensión HTML y CSS para ocultar la parte media del texto de modo que solo ls -la
sea visible para el espectador casual (sin ver el fuente). Nota: ^[
es el carácter de escape y ^M
es el carácter de retorno de carro. Stack Exchange desinfecta los comentarios de los usuarios y protege contra la ocultación de contenido mediante CSS, por lo que he subido la prueba de concepto .
ls ^[:echom "This could be a silent command."^Mi -la
Si estuviera en modo Insertar y pegue este texto en el terminal Vim (con algunos calificadores, vea más abajo), verá ls -la
pero si ejecuta el :messages
comando, puede ver los resultados del comando Vim oculto.
Defensa
Para defenderse de este ataque, es mejor permanecer en modo Normal y pegar usando "*p
o "+p
. En el modo normal, cuando p texto Utting de un registro, el texto completo (incluyendo la parte oculta) se pega. Esto mismo no sucede en el modo Insertar (incluso si :set paste
) se ha configurado.
Modo de pasta entre corchetes
Las versiones recientes de Vim admiten el modo de pegado entre corchetes que mitiga este tipo de ataque de copiar y pegar. Sato Katsura ha aclarado que "El soporte para la pasta entre corchetes apareció en Vim 8.0.210, y se reparó recientemente en la versión 8.0.303 (lanzada el 2 de febrero de 2017)".
Nota: Según tengo entendido, las versiones de Vim con soporte para el modo de pegado entre corchetes deberían protegerlo al pegar usando Ctrl- Shift- V(la mayoría de los entornos de escritorio GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Inserto un mouse clic medio.
Pruebas
Hice algunas pruebas desde una máquina de escritorio Lubuntu 16.04 más tarde, pero mis resultados fueron confusos y poco concluyentes. Desde entonces me di cuenta de que esto se debe a que siempre uso la pantalla GNU, pero resulta que la pantalla filtra la secuencia de escape utilizada para habilitar / deshabilitar el modo de pegado entre paréntesis (hay un parche pero parece que se envió en un momento en que proyecto no se mantenía activamente). En mis pruebas, la prueba de concepto siempre funciona cuando ejecuto Vim a través de la pantalla GNU, independientemente de si Vim o el emulador de terminal admiten el modo de pegado entre paréntesis.
Sería útil realizar más pruebas, pero, hasta ahora, descubrí que la compatibilidad con el modo de pegado entre paréntesis del emulador de terminal bloquea mi Prueba de concepto, siempre que la pantalla GNU no esté bloqueando las secuencias de escape relevantes. Sin embargo, el usuario nneonneo informa que se puede utilizar una cuidadosa elaboración de secuencias de escape para salir del modo de pegado entre paréntesis.
Tenga en cuenta que incluso con una versión actualizada de Vim, la Prueba de concepto siempre funciona si el usuario pega desde el *
registro mientras está en modo Insertar escribiendo ( Ctrl- R*). Esto también se aplica a GVim, que puede diferenciar entre la entrada escrita y pegada. En este caso, Vim deja que el usuario confíe en el contenido de su contenido de registro. Por lo tanto, nunca use este método cuando pegue desde una fuente no confiable (es algo que hago a menudo, pero ahora he comenzado a entrenarme para no hacerlo).
Enlaces relacionados
Conclusión
Use el modo Normal al pegar texto (desde los registros +
o *
).
... o usa Emacs. Escuché que es un sistema operativo decente. :)