💣Jenkins - Ataques
Atacando a Jenkins
Hemos confirmado que el host está ejecutando Jenkins y está configurado con credenciales débiles. Verifiquemos qué tipo de acceso nos brindará esto.
Una vez que hayamos obtenido acceso a una aplicación Jenkins, una forma rápida de lograr la ejecución de comandos en el servidor subyacente es a través de la consola de scripts . La consola de scripts nos permite ejecutar scripts Groovy arbitrarios dentro del entorno de ejecución del controlador Jenkins. Esto se puede aprovechar para ejecutar comandos del sistema operativo en el servidor subyacente. Jenkins se instala a menudo en el contexto de la cuenta raíz o SYSTEM, por lo que puede ser una victoria fácil para nosotros.
Script Console
Se puede acceder a la consola de scripts en la URL http://jenkins.inlanefreight.local:8000/script
. Esta consola permite al usuario ejecutar scripts de Apache Groovy , que son un lenguaje orientado a objetos compatible con Java. El lenguaje es similar a Python y Ruby. El código fuente de Groovy se compila en Java Bytecode y puede ejecutarse en cualquier plataforma que tenga instalado JRE.
Con esta consola de scripts, es posible ejecutar comandos arbitrarios, que funcionan de manera similar a un shell web. Por ejemplo, podemos usar el siguiente fragmento para ejecutar el comando id
.
Existen varias formas de aprovechar el acceso a la consola de scripts para obtener un reverse shell. Por ejemplo, utilizando el comando que aparece a continuación o este módulo de Metasploit.
La ejecución de los comandos anteriores da como resultado una conexión de reverse shell.
En un host Windows, podríamos intentar agregar un usuario y conectarnos al host a través de RDP o WinRM o, para evitar realizar un cambio en el sistema, usar un soporte de descarga de PowerShell con Invoke-PowerShellTcp.ps1 . Podríamos ejecutar comandos en una instalación de Jenkins basada en Windows usando este fragmento:
También podríamos usar este reverse shell de Java para obtener la ejecución de comandos en un host de Windows, intercambiando localhost
y el puerto por nuestra dirección IP y el puerto de escucha.
Vulnerabilidades varias
Existen varias vulnerabilidades de ejecución remota de código en varias versiones de Jenkins. Un exploit reciente combina dos vulnerabilidades, CVE-2018-1999002 y CVE-2019-1003000, para lograr una ejecución remota de código autenticada previamente, evadiendo la protección de la zona protegida de seguridad de scripts durante la compilación de scripts. Existen PoC de exploits públicos para explotar una falla en el enrutamiento dinámico de Jenkins para evadir la ACL de lectura/general y usar Groovy para descargar y ejecutar un archivo JAR malicioso. Esta falla permite a los usuarios con permisos de lectura evadir las protecciones de la zona protegida y ejecutar código en el servidor maestro de Jenkins. Este exploit funciona contra la versión 2.137 de Jenkins.
Existe otra vulnerabilidad en Jenkins 2.150.2, que permite a los usuarios con privilegios de creación de JOB y BUILD ejecutar código en el sistema a través de Node.js. Esta vulnerabilidad requiere autenticación, pero si se habilitan usuarios anónimos, la explotación tendrá éxito porque estos usuarios tienen privilegios de creación de JOB y BUILD de forma predeterminada.
Como hemos visto, obtener acceso a Jenkins como administrador puede llevar rápidamente a la ejecución remota de código. Si bien existen varios exploits de RCE que funcionan para Jenkins, son específicos de la versión. Al momento de escribir este artículo, la versión LTS actual de Jenkins es 2.303.1, que corrige los dos fallos detallados anteriormente. Como con cualquier aplicación o sistema, es importante reforzar Jenkins tanto como sea posible, ya que la funcionalidad incorporada se puede usar fácilmente para tomar el control del servidor subyacente.
Seguimos adelante
Hemos analizado varias formas en las que se pueden utilizar de forma abusiva los CMS y los contenedores de servlets o las aplicaciones de desarrollo de software más populares para explotar tanto las vulnerabilidades conocidas como las funciones integradas. Ahora, centrémonos un poco en dos herramientas de monitorización de infraestructuras y redes muy conocidas: Splunk y PRTG Network Monitor.
Caso práctico
Ataca el objetivo de Jenkins y obtén la ejecución remota del código. Envía el contenido del archivo flag.txt en el directorio /var/lib/jenkins3
Vamos a usar el script console con el siguiente script en groovy:
De igual manera también podemos conseguir un RCE con el siguiente script:
Última actualización