# Análisis DAST en nuestro Pipeline con OWASP ZAP

En esta entrada vamos a configurar [OWASP ZAP](https://owasp.org/www-project-zap/) en nuestro Pipeline Jenkins. En esta ocasión no vamos a hacer una instalación de **OWASP ZAP**, vamos a ejecutarlo en un contenedor Docker en el mismo host que Jenkins y sumarlo al "Stage" a nuestro Pipeline.

Para comenzar vamos a correr el Docker de OWASP ZAP.

```bash
docker run --detach --name zap -u zap -v "/opt/dast/reports":/zap/reports/:rw \
  -i owasp/zap2docker-stable zap.sh -daemon -host 0.0.0.0 -port 8080 \
  -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true \
  -config api.disablekey=true
```

Como ven el tag -v apunta a una carpeta nuestro SO, para poder depositar los reportes que generemos.

Vamos a hacer una llamada directa al Docker con el comando **zap-cli**.

Elegí el quick-scan y agregamos un tag de Medium. La finalidad es que no me reporte los Low.

```bash
docker exec zap zap-cli --verbose quick-scan http://pipeline.ironbox.com.ar:8090 -l Medium
```

Vamos a crear un Stage en nuestro código Groovy de Jenkins. Agregue un Try & Catch. Me interesa, por los falsos positivos, que el Pipeline continue aun si tenemos vulnerabilidades **Medium** o **High**.

A continuación creamos el reporte. En este caso, para su posterior publicación, la salida es html pero podríamos jugar con otros formatos para alimentar otro sistema. Por ejemplo JSON para utilizar ArcherySec o DefectDojo y poder gestionar la vulnerabilidad hallada.

```bash
        stage('DAST') {
            steps {
                script {
                    try {
                        echo "Inicio de Scanneo Dinamico"
                        sh "docker exec zap zap-cli --verbose quick-scan http://pipeline.ironbox.com.ar:8090 -l Medium" 
                        //sh "docker exec zap zap-cli --verbose alerts --alert-level Medium -f json | jq length"
                        currentBuild.result = 'SUCCESS' 
                    }
                    catch (Exception e) {
                            //echo e.getMessage() 
                            //currentBuild.result = 'FAILURE'
                            println ("Revisar Reporte ZAP. Se encontraron Vulnerabilidades.")

                        }
                    }  
                    echo currentBuild.result 
                    echo "Generacion de Reporte"
                    sh "docker exec zap zap-cli --verbose report -o /zap/reports/owasp-quick-scan-report.html --output-format html"
                    publishHTML target: [
                        allowMissing: false,
                        alwaysLinkToLastBuild: false,
                        keepAll: true,
                        reportDir: '/opt/dast/reports',
                        reportFiles: 'owasp-quick-scan-report.html',
                        reportName: 'Analisis DAST'
                      ]          
            }
        }
```

¡Vamos a correr ese Pipeline! A ver que nos entrega.

![](https://i1.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/07/Captura-de-Pantalla-2020-07-06-a-las-20.31.32.png?fit=640%2C640&ssl=1 align="center")

Como habíamos configurado el Pipeline continuo aun habiendo encontrado una vulnerabilidad Medium.

Ahora podemos revisar el reporte.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2020/07/Captura-de-Pantalla-2020-07-06-a-las-20.34.32-1-1024x1024.png align="center")

Muchas cosas para configurar y seguir jugando. Espero que les sea de utilidad.

¡Nos vemos en la próxima entrada!
