El
experto en seguridad Armin Razmjou detectó recientemente una vulnerabilidad
de ejecución de comando de sistema operativo arbitraria de alto riesgo
(CVE-2019-12735) en Vim y Neovim.
Para
aquellos que no lo saben, Vim y Neovim son las dos de las aplicaciones de
edición de texto
de línea de comandos más populares y potentes que vienen preinstaladas en
la mayoría de las distribuciones de Linux.
Vim
es un editor de texto que permite a los usuarios crear, ver o editar
cualquier archivo, incluidos textos, documentos y scripts de
programación.
Por
otro lado, Neovim es un derivado de Vim que tiene como objetivo mejorar la
experiencia del usuario, los complementos y las GUI (interfaces gráficas de
usuario). Como resultado, la vulnerabilidad de ejecución de código también
está presente en Neovim.
“Vim anteriores a 8.1.1365 y Neovim anteriores a 0.3.6 son vulnerables a la ejecución de código arbitrario a través de modelines al abrir un archivo de texto especialmente diseñado”, se lee en aviso de seguridad publicado por el experto.
Funcionamiento
Razmjou descubrió la
vulnerabilidad en la forma en que el editor Vim maneja la opción
"modelines". La función modelines
permite especificar opciones de editor personalizadas cerca del inicio o final
de un archivo. Esta función está habilitada de forma predeterminada y
se aplica a todos los tipos de archivos, incluido los .txt simples.
Solo
se permite un subconjunto de opciones en las modelines por razones de
seguridad, y si una expresión se incluye en el valor de la opción, se ejecuta
en un entorno limitado.
Sin
embargo, Razmjou descubrió que el comando :source!
(con el modificador bang [ ! ]) se puede usar para
omitir el sandbox. Lee y ejecuta los comandos de un archivo dado como si
se escribiera manualmente, ejecutándolos después de que se haya dejado el
sandbox. En otras palabras, es posible desarrollar una modeline que pueda
ejecutar el código fuera de la sandbox.
El
experto demostró que es posible que los atacantes exploten la vulnerabilidad
CVE-2019-12735, lo que les permite hackear los sistemas de la víctima
engañándolos para que abran un archivo de aspecto inocente, especialmente
diseñado en Vim o Neovim.
Prueba de concepto
Razmjou
lanzó dos vulnerabilidades de prueba de concepto al público, una de las cuales
demuestra un escenario de ataque en la vida real en el que un atacante remoto
obtiene acceso a una shell inversa.
“Esta prueba de concepto describe un enfoque de ataque en la vida real en el que se inicia un shell inverso una vez que el usuario abre el archivo. Para ocultar el ataque, el archivo se volverá a escribir inmediatamente cuando se abra", continúa la publicación. “Además, la prueba de concepto utiliza secuencias de escape de terminal para ocultar la modeline cuando el contenido se imprime con cat. (cat -v revela el contenido real).
Los equipos de desarrollo de Vim (parche 8.1.1365) y Neovim (lanzado en v0.3.6) ya han lanzado actualizaciones de seguridad en ambas utilidades para solucionar la vulnerabilidad.
Además
de los parches, el investigador de seguridad también sugiere a los usuarios:
- Deshabilitar la
función modelines en el vimrc (establecer nomodeline )
- Usar el
"complemento de securemodelines", una alternativa segura a modelines en Vim
- Deshabilitar
"modelineexpr" para no permitir expresiones en modelines.
¿Qué
opinas sobre esta vulnerabilidad? ¿Eres usuario de Linux, ya actualizaste?
Hazme el favor de compartir el post en las redes sociales.