La ejecución de código remoto (RCE o Remote Code Excecution) es una de las técnicas más utilizadas en el mundo de Hacking Web Technologies. Tiene como objetivo aprovechar una vulnerabilidad en un sistema para ejecutar en él diversos comandos de el propios sistema operativo. Por lo general, los comandos se ejecutan dentro del sistema vulnerado con los privilegios que tenga la cuenta con la que se ejecuta el servicio vulnerable - que podría una cuenta administrativa - debido a que el sistema no valida de forma correcta los datos que recibe.
En el año 2009, se publicó la vulnerabilidad con CVE 2009-0545 donde se avisó del impacto que tenía la ejecución de código remoto en dispositivos sobre los que corría Zeroshell, una distribución GNU/Linux destinada a servidores y dispositivos empotrados con un claro enfoque de defensa perimetral.
La vulnerabilidad permite a los atacantes ejecutar comandos del sistema operativo de manera remota sin estar autenticados en el sistema con permisos de administrador aprovechando la falta de validación de ciertos parámetros enviados por GET y POST relacionados con la aplicación del estándar criptográfico X.509 que soporta.
Se muestran a continuación diferentes URLs con los diferentes parámetros enviados por GET y que no son validados de manera correcta en el servidor.
Búsqueda de dispositivos con Zeroshell
Para realizar una prueba de concepto y comprobar si a día de hoy todavía es posible explotar la vulnerabilidad comentada anteriormente, lo primero será localizar dispositivos en los cuales corra esta distribución de GNU/Linux. Haciendo un poco de Hacking con buscadores podemos observar que aún sigue habiendo máquinas expuestas en Internet sobre las que corre Zeroshell, aunque no son muchas
Es necesario que la máquina a vulnerar reciba peticiones GET bajo los servicios HTTP y/o HTTPS.
Búsqueda del payload
Localizados objetivos potencialmente vulnerables, el siguiente paso es la búsqueda de payloads que aprovechen la vulnerabilidad descrita anteriormente. Nada mejor que realizar una búsqueda en la “gran base de conocimiento” ExploitDatabase.
Los payloads que podemos utilizar durante la explotación de la vulnerabilidad son los siguientes:
Ejecución de código en el parámetro User
Inyectando el payload '&cat /etc/passwd&' en el parámetro User, observamos cómo es posible la ejecución remota de comandos para obtener el nombre de los usuarios que pueden acceder al sistema de manera legítima.
Aplicando el payload User='&ls /DB&'&PW al parámetro User que se envía por GET también es posible descubrir backups de las bases de datos utilizadas por el sistema.
¿Serías capaz de descargar alguno de estos backup utilizando la herramienta wget?
Conclusiones
Este artículo no es más que una prueba clara de lo que explicaba Pablo González en su charla de lo sencillo que puede ser para los malos "Conquistar el mundo con OSINT y Well-Known Bugs" ya que nada de lo que se cuenta es nuevo, y sin embargo los sistemas siguen estando disponibles en la red para quien los quiera explotar. Si tienes un equipo con ZeroShelll, hazle un proceso de Hardening a tu GNU/Linux.
Obvio que alguno puede ser un HoneyPot, pero lo más seguro es que muchos no lo sean. También refuerza el mensaje de que si un fabricante tiene una vulnerabilidad Highly Critical como esta, tal vez deba avisar de forma pro-activa a sus clientes buscándolos fácilmente como hemos visto aquí.
Autor: Amador Aparicio de la Fuente (@amadapa), escritor del libro de Hacking Web Technologies.
Figura 1: Ejecución de Código Remoto en dispositivos GNU/Linux con ZeroShell |
En el año 2009, se publicó la vulnerabilidad con CVE 2009-0545 donde se avisó del impacto que tenía la ejecución de código remoto en dispositivos sobre los que corría Zeroshell, una distribución GNU/Linux destinada a servidores y dispositivos empotrados con un claro enfoque de defensa perimetral.
Figura 2: Detalles de la vulnerabilidad con CVE-2009-0545 |
La vulnerabilidad permite a los atacantes ejecutar comandos del sistema operativo de manera remota sin estar autenticados en el sistema con permisos de administrador aprovechando la falta de validación de ciertos parámetros enviados por GET y POST relacionados con la aplicación del estándar criptográfico X.509 que soporta.
Figura 3: Opciones que envía por GET parámetros que no son filtrados correctamente |
Se muestran a continuación diferentes URLs con los diferentes parámetros enviados por GET y que no son validados de manera correcta en el servidor.
Figura 4: Parámetros enviados por GET que no son validados en el servidor |
Búsqueda de dispositivos con Zeroshell
Para realizar una prueba de concepto y comprobar si a día de hoy todavía es posible explotar la vulnerabilidad comentada anteriormente, lo primero será localizar dispositivos en los cuales corra esta distribución de GNU/Linux. Haciendo un poco de Hacking con buscadores podemos observar que aún sigue habiendo máquinas expuestas en Internet sobre las que corre Zeroshell, aunque no son muchas
Figura 5: Algunos sistemas con Zeroshell accesibles desde Internet localizados con Shodan |
Es necesario que la máquina a vulnerar reciba peticiones GET bajo los servicios HTTP y/o HTTPS.
Búsqueda del payload
Localizados objetivos potencialmente vulnerables, el siguiente paso es la búsqueda de payloads que aprovechen la vulnerabilidad descrita anteriormente. Nada mejor que realizar una búsqueda en la “gran base de conocimiento” ExploitDatabase.
Figura 6: Información en https://www.exploit-db.com/ sobre cómo explotar el bug CVE-2009-0545 |
Los payloads que podemos utilizar durante la explotación de la vulnerabilidad son los siguientes:
Figura 7: Payloads junto con las URLs y los parámetros GET vulnerables. |
Ejecución de código en el parámetro User
Inyectando el payload '&cat /etc/passwd&' en el parámetro User, observamos cómo es posible la ejecución remota de comandos para obtener el nombre de los usuarios que pueden acceder al sistema de manera legítima.
Figura 8: Usuarios presentes en el sistema ZeroShell |
Aplicando el payload User='&ls /DB&'&PW al parámetro User que se envía por GET también es posible descubrir backups de las bases de datos utilizadas por el sistema.
Figura 9: Backup de la base de datos del sistema |
¿Serías capaz de descargar alguno de estos backup utilizando la herramienta wget?
Conclusiones
Este artículo no es más que una prueba clara de lo que explicaba Pablo González en su charla de lo sencillo que puede ser para los malos "Conquistar el mundo con OSINT y Well-Known Bugs" ya que nada de lo que se cuenta es nuevo, y sin embargo los sistemas siguen estando disponibles en la red para quien los quiera explotar. Si tienes un equipo con ZeroShelll, hazle un proceso de Hardening a tu GNU/Linux.
Obvio que alguno puede ser un HoneyPot, pero lo más seguro es que muchos no lo sean. También refuerza el mensaje de que si un fabricante tiene una vulnerabilidad Highly Critical como esta, tal vez deba avisar de forma pro-activa a sus clientes buscándolos fácilmente como hemos visto aquí.
Autor: Amador Aparicio de la Fuente (@amadapa), escritor del libro de Hacking Web Technologies.
No comments:
Post a Comment