web-dev-qa-db-fra.com

Vim est-il à l'abri des attaques copier-coller?

Vous devez ne jamais coller du Web sur votre terminal . Au lieu de cela, vous devez coller dans votre éditeur de texte, vérifier la commande, puis coller dans le terminal.

C'est OK, mais que faire si Vim est mon éditeur de texte? Peut-on forger un contenu qui fait passer Vim en mode commande et exécute la commande malveillante?

112
Adam Trhon

Réponse courte: Dans de nombreuses situations, Vim est vulnérable à ce type d'attaque (lors du collage de texte en mode Insertion).

Preuve de concept

En utilisant l'article lié comme point de départ, j'ai pu créer rapidement une page Web avec le code suivant, en utilisant des éléments HTML span et CSS pour masquer la partie centrale du texte afin que seulement ls -la est visible pour le spectateur occasionnel (ne visualise pas la source). Noter la ^[ est le caractère d'échappement et le ^M est le caractère de retour chariot. Stack Exchange nettoie les entrées des utilisateurs et protège contre le masquage de contenu à l'aide de CSS, j'ai donc téléchargé le preuve de concept .

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

Si vous étiez en mode Insertion et colliez ce texte dans le terminal Vim (avec certains qualificatifs, voir ci-dessous), vous verriez ls -la mais si vous exécutez le :messages, vous pouvez voir les résultats de la commande Vim cachée.

La défense

Pour se défendre contre cette attaque, il est préférable de rester en mode Normal et de coller en utilisant "*p ou "+p. En mode Normal, lorsque p texte en provenance d'un registre, le texte intégral (y compris la partie masquée) est collé. Cela ne se produit pas en mode Insertion (même si :set paste) a été mis en.

Mode de collage entre crochets

Les versions récentes de Vim prennent en charge mode de collage entre crochets qui atténue ce type d'attaque par copier-coller. Sato Katsura a précisé que "la prise en charge de la pâte entre crochets est apparue dans Vim 8.0.210 et a été corrigée le plus récemment dans la version 8.0.303 (publiée le 2 février 2017)".

Remarque: Si je comprends bien, les versions de Vim avec prise en charge du mode de collage entre crochets devrait vous protègent lors du collage à l'aide de Ctrl-Shift-V (la plupart des environnements de bureau GNU/Linux), Ctrl-V (MS Windows), Command-V (Mac OS X), Shift-Insert ou un clic du milieu de la souris.

Essai

J'ai fait des tests à partir d'une machine de bureau Lubuntu 16.04 plus tard, mais mes résultats étaient déroutants et peu concluants. J'ai depuis réalisé que c'est parce que j'utilise toujours l'écran GNU mais il s'avère que écran filtre l'échappement séquence utilisée pour activer/désactiver le mode de collage entre crochets (il y a un patch mais il semble qu'il ait été soumis à un moment où le projet n'était pas activement maintenu). Dans mes tests, la preuve de concept fonctionne toujours lors de l'exécution de Vim via l'écran GNU, que Vim ou l'émulateur de terminal supporte le mode de collage entre crochets).

Des tests supplémentaires seraient utiles mais, jusqu'à présent, j'ai trouvé que la prise en charge du mode de collage entre crochets par l'émulateur de terminal bloque ma preuve de concept - tant que l'écran GNU ne bloque pas les séquences d'échappement pertinentes Cependant, l'utilisateur nneonneorapports que la fabrication soigneuse des séquences d'échappement peut être utilisée pour quitter le mode de collage entre crochets.

Notez que même avec une version à jour de Vim, le Proof of Concept fonctionne toujours si l'utilisateur passe du * inscrivez-vous en mode Insertion en tapant (Ctrl-R*). Cela s'applique également à GVim qui peut faire la différence entre les entrées tapées et collées. Dans ce cas, Vim laisse à l'utilisateur le soin de faire confiance au contenu du contenu de son registre. Donc, n'utilisez jamais cette méthode lorsque vous collez à partir d'une source non fiable (c'est quelque chose que je fais souvent - mais j'ai maintenant commencé à m'entraîner à ne pas le faire).

Liens connexes

Conclusion

Utilisez le mode Normal lorsque vous collez du texte (à partir du + ou * registres).

… Ou utilisez Emacs. J'ai entendu dire que c'était un système d'exploitation décent. :)

106

Si vous utilisez la fonction de presse-papiers X11, ou un équivalent spécifique à la plate-forme, et que vous utilisez le collage du bouton du milieu avec la prise en charge de la souris activée ou une commande de collage de vim et non aucune commande de collage du terminal (bouton du milieu ou tout raccourci du terminal offres) alors vous pourriez être en sécurité.

Si ce n'est pas le cas, alors si vous avez un émulateur de terminal qui prend en charge le mode de collage entre crochets, et que vous l'avez activé dans votre terminal et dans vim, et que l'émulateur de terminal implémente une protection contre l'injection de la séquence d'échappement qui termine le mode de collage entre crochets, alors vous pourriez être en sécurité.

Sinon, vous pourriez être vulnérable à l'attaque décrite ici .

0
sh1