WAF Testing That Ships with Your Code
Catch WAF regressions on every push. SARIF for GitHub, SAST for GitLab, JUnit for Jenkins — native output for every pipeline.
WAF configurations drift over time. Rules get updated, new endpoints go live, vendors change policies. Without continuous testing, regressions go unnoticed until an attacker exploits them. WAFtester fits into any CI/CD pipeline — GitHub Actions, GitLab CI, Azure DevOps, Jenkins — and produces native output formats (SARIF, JUnit, GitLab SAST) so findings appear alongside your other security results. No custom parsers needed.
The Problem
WAF Rules Drift
WAF configurations change. New rules get added, existing ones get modified. Without continuous testing, regressions go unnoticed until an attacker finds them.
Security Is an Afterthought
WAF assessments happen quarterly at best. Between assessments, rule changes ship without verification. That gap is where bypasses live.
No Visibility in Dashboards
Security teams track SAST and SCA findings in GitHub Security, SonarQube, or GitLab. WAF test results live in separate spreadsheets.
GitHub Actions
Use the official GitHub Action to run WAF tests on every push or PR. Results appear in GitHub's Security tab alongside your other findings.
name: WAF Security Test
on:
push:
branches: [main]
pull_request:
schedule:
- cron: '0 6 * * 1' # Weekly Monday 6am
jobs:
waf-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run WAFtester
uses: waftester/waftester-action@v1
with:
target: ${{ secrets.WAF_TARGET_URL }}
mode: scan
args: --smart -o results.sarif -o results.json
- name: Upload to GitHub Security
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
- name: Archive results
uses: actions/upload-artifact@v4
with:
name: waf-results
path: results.json SARIF Upload
Results in GitHub Security tab
PR Annotations
Findings appear on pull requests
Scheduled Runs
Weekly regression checks
GitLab CI
WAFtester outputs GitLab SAST format. Results appear in the GitLab Security Dashboard and merge request widgets.
waf-test:
image: ghcr.io/waftester/waftester:latest
stage: test
script:
- waf-tester scan -u $WAF_TARGET_URL --smart -o gl-sast.json
artifacts:
reports:
sast: gl-sast.json
paths:
- gl-sast.json
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main" Azure DevOps
Run WAFtester in Azure Pipelines with npx. Export results as build artifacts or create work items automatically.
- task: CmdLine@2
displayName: WAF Security Test
inputs:
script: |
npx -y @waftester/cli scan \
-u $(WAF_TARGET_URL) \
--smart \
-o results.sarif \
-o results.json
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: results.sarif
artifactName: waf-results Pipeline-Native Output
WAFtester speaks the language of your pipeline. No custom parsers or format converters needed.
| Format | Flag | Consumed By |
|---|---|---|
| SARIF | -o results.sarif | GitHub Code Scanning, VS Code |
| GitLab SAST | -o gl-sast.json | GitLab Security Dashboard |
| SonarQube | -o results.sonarqube.json | SonarQube / SonarCloud |
| JUnit XML | -o results.junit.xml | Jenkins, CircleCI, any CI |
| JSON | -o results.json | Custom scripts, APIs |
| CycloneDX VEX | -o results.cdx.json | Supply chain security tools |
Multiple outputs in a single run: -o report.html -o results.sarif -o data.json
Why DevSecOps Teams Choose WAFtester
Zero Dependencies
Single binary. No Python, no Java, no Ruby runtime. Install with npx, Homebrew, or download directly. Works in any container.
Streaming Output
Results stream to stdout in real-time. No waiting for the full scan to finish before seeing findings in your pipeline logs.
Exit Codes
Non-zero exit on findings. Gate deployments on WAF security — fail the build if critical bypasses are detected.
Docker Images
Multi-arch images on GHCR and Docker Hub. Use ghcr.io/waftester/waftester:latest in any containerized pipeline.
WAFtester can also generate pipeline configs for you: waf-tester cicd -p github-actions.
See the CI/CD cheat sheet for more commands,
the Compliance & Benchmarking guide for scoring thresholds,
or the documentation for installation and troubleshooting.
Ready to Try It?
One command to install. One command to scan. Real results in seconds.