El pasado mes de octubre, se publicada en este blog el artículo que llevaba por título “
Ejecución de Código Remoto en dispositivos GNU/Linux con Zeroshell” donde se explicaba cómo ejecutar código remoto aprovechando la vulnerabilidad
CVE 2009-0545 que pone de manifiesto la falta de validación de ciertos parámetros enviados por
GET/POST a la aplicación del estándar criptográfico
X.590 que soportan.
|
Figura 1: ¿Un Backdoor en los routers con ZeroShell? |
Parece que una buena medida de seguridad sobre este tipo de dispositivos sería detener o no levantar los servicios
HTTP y
HTTPS para evitar una posible inyección de código de forma remota. Es por anterior que este artículo se mostrará cómo abrir una shell en el dispositivo con privilegios de
root.
Explorando la línea de comandos de ZeroShell
En muchos dispositivos destinados a la administración de redes y defensa perimetral, como pueden ser los sistemas
ZeroShell, una buena opción para reducir la superficie de exposición es permitir la administración del dispositivo únicamente bajo una interfaz de línea de comandos, a veces de manera remota bajo servicios como
SSH, y otras de manera local.
|
Figura 2: Opciones de la línea de comandos de los dispositivos ZeroShell |
Como parece, la superficie de exposición se reduce de manera considerable, pero el sistema sigue quedando expuesto mientras se pueda interactuar con él, aunque sea bajo una interfaz de línea de comandos.
Una primera aproximación es seleccionar la opción
<s> Shell Prompt para ver si es posible disponer de una
shell sin estar autenticado en sistema. Como es lógico, el sistema solicita la contraseña del usuario que corre en el sistema. Además, como máximo permite tres intentos sobre el password. Si son infructuosos, el sistema regresa a las opciones mostradas en la
Figura 2.
|
Figura 3: Intentos de autenticación fallidos |
Ejecución de comandos bajo root
Dado que no conocemos la contraseña de acceso al sistema, se prueban todas posibilidades que ofrece el menú de línea de comandos.
|
Figura 4: Opciones del router ZeroShell |
Ocurre algo curioso si seleccionamos la opción
Show Firewall Rules para ver cuáles son las reglas que incorpora en su iptables.
|
Figura 5: Reglas iptables en el firewall del router ZeroShell |
Pulsando la tecla ‘
H’ mientras el sistema muestra las cadenas que tiene en
iptables, el sistema ofrece diferentes opciones. Una de ellas parece que permite la ejecución de comandos en una
subshell. Lo único que hay que hacer es escribir el carácter
“!”(ALT+1) seguido del comando que se quiera ejecutar en el sistema.
|
Figura 6: Opción para abrir una shell "sin privilegios administrativos" |
Ejecutando el comando “
uname –a”, se observa que la versión de
ZeroShell que corre en el sistema es la
3.4.19.
|
Figura 7: Información del sistema operativo que se está utilizando |
Se comprueba que el entorno donde se ejecutan los procesos generados por los comandos que recibe el sistema es el del usuario
root y, por lo tanto, es muy posible visualizar archivos críticos del sistema como pueden ser
/etc/passwd o
/etc/shadow.
|
Figura 8: El usuario root no utilizado en la ejecución de comandos |
|
Figura 9: Información de los usuarios del sistema en /etc/passwd |
Entrando por la puerta de atrás
Dado que el entorno donde se ejecutan los comandos es el del usuario
root, probaremos a ejecutar “
/bin/sh” o “
/bin/bash” para intentar obtener la
shell del usuario
root, cualquiera de las dos es buena.
|
Figura 10: Obtención de una shell /bin/bash con privilegios de root |
Como se observa, es posible obtener una
shell dentro del sistema con privilegios de “
root” sin la necesidad de estar autenticado en él.
Consideraciones finales
• Las pruebas realizadas para obtener los resultados expuestos en el artículo, han sido realizadas bajo un entorno virtual con la versión 3.4.19 de Zeroshell, concretamente sobre la máquina virtual proporcionada en uno de los retos de las Cyberolimpiadas organizadas para Centros Educativos en el marco del Cybercamp de este año.
• No se han realizado pruebas exhaustivas en entornos de producción real donde corren este tipo de sistemas, por lo que no se puede determinar que exista realmente un backdoor en la versión 3.14.9 de ZeroShell, en versiones inferiores o posteriores, pero habría que probarlo.
Autores: Amador Aparicio de la Fuente (@amadapa) y Álvaro Gutiérrez Rebollo (@alvgut98), alumno de 1º de Administración de Sistemas Informáticos en Red.
Hola, acabo de probarlo en la última versión públicada (3.8.1) y sigue siendo posible.
ResponderEliminar