Est-il sûr d'utiliser un fichier inconnu `_vimrc` ou` vimscript`?

8

Je ne sais pas si cette question doit être posée ici ou non. Dans presque toutes les langues, des logiciels malveillants existent. Est-ce la même chose pour vimscript?

Supposons qu'il vimfonctionne avec des privilèges système élevés. Y a-t-il une possibilité qu'un nouvel vimutilisateur puisse ruiner son système en utilisant un plugin ou un joli vimrcfichier (c'est-à-dire des scripts dits malveillants dans d'autres langages de script)?

Quelles sont les mesures qu'un nouvel utilisateur peut prendre en charge avant d'exécuter des fichiers de script inconnus? Je sais que la désactivation des scripts est une solution évidente à cela. Mais il existe un très bon nombre de plugins qui sont très utiles, même pour les nouveaux apprenants.

Encore une fois, cette question ne convient peut-être pas ici, mais je pense que la sécurité est également une partie très importante du tableau d'ensemble.

Le fait de pointer vers certaines ressources ou informations à ce sujet serait très utile pour les nouveaux vimutilisateurs comme moi.

Cylian
la source
4
Ne pas exécuter Vim (ou quoi que ce soit) en tant que root est votre meilleur pari. En supposant qu'il $EDITORest défini sur vim, utilisez simplement $ sudo -e filename.
romainl
1
Juste au cas où vous exécutez Vim en tant que root (ce que vous ne devriez pas mais cela peut arriver), je recommanderais de n'avoir qu'un vimrc très rudimentaire /root/.vimrc. En général, j'active simplement la coloration syntaxique. Plus votre configuration utilisateur virtuelle est sophistiquée, plus il est évident que vous exécutez en tant que root.
kba se tient avec Monica le
@romainl: merci pour votre aimable suggestion ... j'espère que c'est la chose la plus raisonnable que les nouveaux utilisateurs de vim devraient suivre ...
Cylian
@kba: merci pour votre aimable opinion ... c'est aussi une très bonne option à essayer ...
Cylian

Réponses:

8

Eh bien, Vim peut exécuter des commandes arbitraires avec :!. Il peut définir des variables d'environnement. Les scripts malveillants qui sont des scripts shell peuvent donc être exécutés à partir de Vimscript.

Il peut utiliser des programmes complexes Perl, Python, Ruby ou Lua. Ainsi, les logiciels malveillants écrits dans l'un de ceux-ci et utilisant uniquement des bibliothèques standard pourraient être intégrés dans Vim.

Même si aucune de ces affirmations n'était vraie, Vim est un éditeur. S'il est exécuté en tant que root, nous pourrions facilement modifier vos fichiers /etc/passwdet /etc/shadowpour créer un nouvel utilisateur et /etc/sudoersleur accorder des sudoprivilèges complets , ainsi qu'un cronjobpour exécuter des scripts shell pour configurer cet utilisateur.

Comme pour l'exécution de scripts aléatoires sur Internet, il n'y a pas de moyen simple d'être en sécurité. Sous Linux, vous pouvez exécuter dans une machine virtuelle avec une superposition peut vous dire quels fichiers un vimrc donné modifie. Cela dépend du niveau de risque que vous percevez.

muru
la source
Merci pour votre aide ... la réponse est assez utile ... sous Linux, c'est sans aucun doute une idée géniale. Ce que je crois maintenant, c'est que sans comprendre le code, c'est simplement de ne pas l'utiliser du tout ... ou du moins pour ceux unknownou les lesser knownscripts ...
Cylian
@mMontu: excellente info ... pourquoi ne pas poster ceci comme réponse ... je crois que beaucoup d'informations, c'est au moins donner une idée de base pour un débutant à regarder dans les sources inconnues ... merci beaucoup. ..tu gères!!!
Cylian
@Cylian bonne idée, merci d'être si gentil.
mMontu
5

S'étendant sur la réponse de muru, vous pouvez inspecter le code, d'autant plus que le code du plugin est généralement très court (les exceptions sont certains plugins populaires, mais en étant populaires, ils sont plus sûrs - vous pouvez vous attendre à ce que beaucoup d'autres aient examiné la source).

Vous n'avez pas besoin de bien comprendre le code; il suffirait de rechercher des commandes "dangereuses":

  1. :!et system(): permet l'exécution de commandes shell, pourrait donc changer votre système
  2. :perldo, :python, :lua, :tclEt :ruby: exécuter des commandes sur les langues différentes, qui peuvent contenir des appels de systèmes embarqués
  3. :execute: cette commande exécute une chaîne en tant que commande, elle peut donc être utilisée pour masquer l'une des commandes précédentes (par exemple: afin de la rendre plus difficile à repérer call system('malware')ou perldo malware, quelqu'un pourrait concaténer la chaîne en une variable)
  4. function("MyFunc"): appeler les références de fonction - accepte une variable comme paramètre, permettant ainsi de masquer system()

Vous pouvez également essayer d'exécuter certaines fonctions de plugin en utilisant 'secure'ou sandboxpour détecter le shell et les langages externes (perl, python, etc.).

mMontu
la source
+1, de jolis ensembles d'informations de base sur le sujet spécifique ... vraiment utiles ... merci!
Cylian