Vous ne devriez jamais coller de Web à votre terminal . Au lieu de cela, vous devez coller dans votre éditeur de texte, vérifier la commande puis coller dans le terminal.
Ce n'est pas grave, mais si Vim est mon éditeur de texte? Pourrait-on forger un contenu qui permette à Vim de passer en mode commande et d'exécuter la commande illicite?
security
vim
escape-characters
clipboard
special-characters
Adam Trhon
la source
la source
/bin/bash ; EOF rm -rf ~
. Une fois collé dans le terminal, il démarrera bash, le terminera et supprimera votre maison. Lorsque collé dans le chat, il laisserait chat imprimer la commande, mettre fin au chat et supprimer votre maison.Réponses:
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 de sorte que seul
ls -la
le spectateur occasionnel puisse le visualiser la source). Remarque: le^[
est le caractère d'échappement et le^M
retour de chariot. Stack Exchange supprime les entrées de l'utilisateur et protège contre le masquage de contenu à l'aide de CSS. J'ai donc téléchargé la preuve de concept .Si vous étiez en mode Insertion et que vous colliez ce texte dans le terminal Vim (avec quelques qualificateurs, voir ci-dessous), vous verriez,
ls -la
mais si vous exécutez la:messages
commande, vous pouvez voir les résultats de la commande masquée Vim.La défense
Pour se défendre contre cette attaque, il est préférable de rester en mode normal et de coller avec
"*p
ou"+p
. En mode normal, lorsque p texte Utting d'un registre, le texte intégral (y compris la partie cachée) est collé. Cela ne se produit pas en mode Insertion (même si:set paste
) a été défini.Mode coller entre crochets
Les versions récentes de Vim prennent en charge le mode coller entre crochets qui atténue ce type d'attaque par copier-coller. Sato Katsura a précisé que «le support pour la pâte entre crochets est apparu dans Vim 8.0.210 et a été corrigé pour la dernière fois dans la version 8.0.303 (publié le 2 février 2017)».
Remarque: Si j'ai bien compris, les versions de Vim prenant en charge le mode coller entre crochets devraient vous protéger 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- Insertou d'une souris. Clic du milieu.
Essai
J'ai fait des tests sur une machine de bureau Lubuntu 16.04 plus tard, mais mes résultats ont été confus et peu concluants. Depuis, j’ai réalisé que c’est parce que j’utilise toujours l’ écran GNU, mais il apparaît que cet écran filtre la séquence d’échappement utilisée pour activer / désactiver le mode coller entre crochets (il existe un patch, mais il semble qu’il ait été soumis à un moment donné. le projet n’était pas activement maintenu). Lors de mes tests, la preuve de concept fonctionne toujours lors de l'exécution de Vim via un écran GNU, que Vim ou l'émulateur de terminal prenne en charge le mode de collage entre crochets.
Des tests supplémentaires seraient utiles mais, jusqu'à présent, j'ai constaté que la prise en charge du mode coller entre crochets par l'émulateur de terminal bloquait ma validation de principe, tant que l'écran GNU ne bloquait pas les séquences d'échappement correspondantes. Cependant, l’utilisateur nneonneo signale qu’il est possible d’ utiliser un assemblage soigneux des séquences d’échappement pour quitter le mode coller entre crochets.
Notez que même avec une version mise à jour de Vim, la preuve de concept fonctionne toujours si l'utilisateur colle depuis le
*
registre en mode Insertion en tapant ( Ctrl- R*). Ceci s'applique également à GVim, qui peut différencier 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 leur registre. Par conséquent, n'utilisez jamais cette méthode lorsque vous collez à partir d'une source non fiable (c'est quelque chose que je fais souvent - mais je commence à m'entraîner moi-même).Liens connexes
Conclusion
Utilisez le mode Normal lors du collage de texte (à partir des registres
+
ou*
).la source
paste
mode (:set paste
) avant de coller dans Vim. La pâte entre crochets doit alors prendre effet, à condition que votre terminal la prenne également en charge. Votre preuve de concept ne fonctionne pas lorsque lepaste
mode est activé.\e[201~
séquence dans la commande Coller pour quitter le mode de pâte entre crochets et de vous poursuivre malgré tout. (Sauf si j'ai manqué quelques détails sur le fonctionnement de la pâte entre crochets?)\x1b[201~
, l’exploit a fonctionné comme avant (c’est-à-dire que seul le script als -la
été écrit et laechom
commande exécutée). Par conséquent, je pense que la pâte entre crochets est toujours vulnérable à une attaque ciblée et n’est pas une solution suffisamment solide. (En effet, toute forme de signalisation dans la bande est vulnérable!):set paste
- l'exploit fonctionne toujours. Pour être parfaitement clair, je collais la blob suivante (base64):bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=
. Sous OS X, vous pouvez copier cela, exécuterpbpaste | base64 -D | pbcopy
pour obtenir une version brute à collervim
.\x1b\x1b[201~[201~
) ou quelque chose pour tromper le filtre.Si vous utilisez la fonctionnalité Presse-papiers X11, ou un équivalent spécifique à la plate-forme, et que vous utilisez le collage au bouton central avec le support de la souris activé ou une commande vim paste et non une commande de collage de terminal (bouton du milieu, ou tout autre raccourci du terminal) offres) alors vous pourriez être en sécurité.
Sinon, si vous avez un émulateur de terminal qui prend en charge le mode coller entre crochets et que vous l'avez activé dans votre terminal et dans vim et que cet émulateur implémente une protection contre l'injection de la séquence d'échappement qui termine le mode coller entre crochets, alors vous pourriez être en sécurité.
Sinon, vous pourriez être vulnérable à l'attaque décrite ici .
la source