Así de fácil pueden hackear Linux y ejecutar código en él usando solo un archivo de texto

Aunque en las últimas semanas solo se está hablando de los fallos de seguridad en el Escritorio Remoto de Windows, los investigadores de seguridad también han tenido sus ojos puestos en Linux, buscando posibles fallos de seguridad que pudieran poner en peligro la seguridad de los usuarios de este sistema. Así, un investigador ha dado a conocer ayer mismo un grave fallo de seguridad en este sistema operativo, un fallo que permite hackear cualquier sistema Linux y ejecutar código en la memoria de la forma más fácil posible: simplemente abriendo un archivo de texto con Vim o Neovim.

Vim es uno de los editores de texto más potentes que podemos encontrar en Linux. Este editor de texto ha sido diseñado para ser utilizado desde un terminal y permite a cualquier usuario abrir cualquier fichero, crear nuevos ficheros o editar un fichero ya existente, y por ello es muy utilizado para modificar scripts o archivos de configuración desde termina. Neovim, por otro lado, es un fork de Vim pensado para mejorar la experiencia de los usuarios y cuenta con interfaz gráfica.

El investigador de seguridad Armin Razmjou ha sido quien ha descubierto esta grave vulnerabilidad en Linux, fallo que ha sido registrado como CVE-2019-12735. Tal como ha demostrado este investigador, este fallo de seguridad permite a cualquier atacante ejecutar código en la memoria de cualquier sistema vulnerable a través de Vim y Neovim, dos de los editores de texto plano más potentes que vienen instalados por defecto en la mayoría de las distribuciones.

Vim y Neovim permiten ejecutar código directamente en la memoria solo con abrir un archivo

El fallo de seguridad como tal se encuentra en una característica llamada «modeline», una función de Vim (y heredada en Neovim) que permite al editor de texto cargar una serie de configuraciones personalizadas definidas al principio y final del archivo.

Esta característica viene activada por defecto en estos editores de texto y, aunque se puede desactivar desde la configuración, prácticamente nadie lo hace.

Así, creando un simple archivo de texto con un modeline específico al principio es posible conseguir ejecutar código directamente en la memoria del sistema. Aunque Vim y Neovim ejecutan los posibles comandos peligrosos dentro de un sandbox, al utilizar «source» en la línea de código para explotar la vulnerabilidad se consigue salir de este aislamiento, consiguiendo ejecutar el código en la memoria del sistema.

Cómo usar el PoC para demostrar la vulnerabilidad

Es muy fácil probar esta vulnerabilidad en cualquier sistema Linux con Vim o Neovim instalado. Para ello, lo único que debemos hacer es crear un fichero de texto llamado, por ejemplo, poc.txt, e introducir en su interior la siguiente línea:

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

Guardamos el documento y lo abrimos con el comando «vim poc.txt«. Como podremos ver, en vez de abrir el archivo como tal, el sistema ejecutará el comando «uname -a» que hemos definido al principio del archivo.

Con unos pocos cambios es posible incluso configurar un terminal remoto que nos permita ejecutar código y tomar el control absoluto de otro ordenador.

PoC vulnerabilidad Vim

Cómo protegernos de esta vulnerabilidad en Linux

Los responsables de Vim y Neovim ya han lanzado sus respectivos parches de seguridad para corregir estas vulnerabilidades y proteger a los usuarios. En el caso de Vim, el parche que lo protege es el 8.1.1365, y en Neovim el parche que lo soluciona es la versión 0.3.6.

Además de actualizar a estas dos versiones (o cualquiera posterior a ellas), los responsables de ambas aplicaciones recomiendan a los usuarios deshabilitar el modeline, además de deshabilitar el uso de «modelineexpr» para no permitir expresiones. Por último, recomiendan activar el uso de «securemodelines plugin» como una alternativa segura al modeline clásico.