Mountain West Farm Bureau Insurance
office workers empowered by business technology solutions
BLOG
4
20
2020
10.1.2021

Using the OWASP ZAP Baseline Scan GitHub Action

Last updated:
8.16.2021
10.1.2021

Incorporating security testing earlier in the process allows for security vulnerabilities to fixed sooner and quicker to help eliminate costly vulnerabilities the can be exploited in production. Today, security testing can be performed throughout the software delivery pipeline. Once an application has been deployed, running a Dynamic Application Security Testing (DAST) scan can help detect if your web application has any exposed vulnerabilities. These tests can spider your website, detect if there are any vulnerabilities (passive mode) or actively send attacks to your website to simulate an attack.

OWASP ZAP is a popular open source client tool used for pen testing and can be included in our pipelines as an automated scan. The new OWASP ZAP Baseline Scan GitHub Action provides a very simple way to test your website from any Linux workflow runner. The action pulls down the latest stable (or optionally weekly) container, executes the baseline test, and then can be configured to create an issue to track the work to fix the vulnerabilities. The ZAP Scanning Report is also attached to run so you can look at additional details.

Using the following steps you can include the OWASP ZAP baseline scan in your GitHub repo's workflow. In this example, I am starting with the with a project using the ASP.NET Core MVC 3.1 default template in Visual Studio 2019 16.5.4. Your scan results might vary if you are using a different version or platform but all of the steps still apply.

GitHub Actions provide a way to automate your development workflow including CI/CD.  Here we will create a default workflow to build the .NET Core application. Click on the Actions tab to bring up the Workflow page.

Expand the more workflows to find the .NET Core option. Click the Set up this workflow option to create a starter workflow script

This will compile your application. I renamed it to CICD because we are going to deploy it Azure and run the OWASP ZAP scanner against it.

Commit the file and it should trigger the build process. This will ensure that the build succeeds before adding the deploying and scanning actions.

Add the Azure Actions to deploy the application to a preconfigured Azure App Service. Edit the workflow file again. This will display the Marketplace actions. Type Azure into the search and the Azure Web App and Azure Login actions should appear.

Add Azure Login by clicking on the title and then copying the snippet into the YML file. Most examples use publish profile but I prefer using service principal. Either option requires that the publish profile or the service principal information be stored as a secret for your repo. Right click on Settings and open it in a new browser tab. Use the Azure CLI to create the service principal. You can either do it locally or through the Cloud Shell. Replace the subscription ID with your subscription and run this command to generate the credentials.

az ad sp create-for-rbac --name "github_actions" --role contributor --scopes /subscriptions/11111111-0000-1111-0000-111111111111 --sdk-auth

Copy the full JSON output into the secret and give it a name like AZURE_AUTH.

Return to the workflow editor. Add the newly created secret as ${{ secrets.AZURE_AUTH }}

Navigate back in the search results to copy the snippet for the Azure Web App. Most of this snippet will be removed because we are not using that. Add the app name and the package location. Both values were created as environment variables.

At this point, your CICD workflow will build and deploy your web application to the Azure Web App. You can access your site via https://yoursite.azurewebsites.net to verify that it was deployed. The last step is to add the ZAP Scanner. Before adding this action to your workflow, first we need to create a GitHub Token with permission to create an issue with the security vulnerabilities to fix. Your scope might need to be changed if your repo is a private repo.

Adding the OWASP Zap Baseline Scan Action

Edit the workflow file again. This time search for the OWASP and select the OWASP ZAP Baseline Scan action. Copy the snippet to add to the workflow.

Add the token secret and the target website. You can comment out the other lines with a #.

There are a few other updates I made to the script. You can see the latest version here. Save the workflow and that will trigger the workflow and you should see that it runs the scan and fails the build because it finds 8 warnings.

The workflow failed because it found one or more alerts. An Issue was created to create actionable and traceable work for fixing the alerts.

The full OWASP ZAP Scan report is also attached as an artifact to the workflow run. The report contains additional information about the alerts.

At this point, you built, deployed, and performed a baseline DAST scan against the deployed application. The alerts must be fixed or ignored to get the workflow passing. In the next post, I will show how to fix the alerts.

Recent Blog Posts

lunavi logo alternate white and yellow
11.29.2021
11
.
05
.
2021
Improve Your Cloud Security Posture with Azure Security Center

Azure Security Center can help you strengthen your security posture by providing “at a glance” security updates via Secure Score, leveraging Azure policies behind the scenes, and keeping you compliant. In addition, Security Center recommendations can help you rapidly rectify any security concerns in your environment.

Learn more
lunavi logo alternate white and yellow
10.1.2021
07
.
19
.
2021
How Lunavi Approaches Digital Transformation: HostingAdvice Company Profile

For prospective clients and partners, the history, ethos, and capabilities of a vendor are paramount. HostingAdvice.com recently profiled Lunavi to explore our approach.

Learn more
lunavi logo alternate white and yellow
10.1.2021
04
.
26
.
2021
Test Automation Best Practices: Balancing Confidence with Efficiency

Automation can instill confidence to release software and improve the team’s ability to create high-quality applications in the fastest and most efficient way possible. Essentially, it eliminates the need to compromise or choose one set of priorities over another. Instead, it allows teams to strike a balance between confidence/coverage and speed/efficiency. But automation isn’t a one-size-fits-all solution.

Learn more