← All projects

Featured project 14 · Security testing · OWASP ZAP

Security Testing with OWASP ZAP

Security checks a QA team can run on every change: OWASP ZAP baseline and full scans in Docker with clear pass/fail rules, and API tests for the vulnerabilities a scanner cannot see. The app comes in a hardened and a deliberately vulnerable build, and every planted vulnerability must be caught.

Live CI status of Security Testing with OWASP ZAP

View source code View documentation View latest CI runs View test report

Purpose

A scan that has only ever been clean has not shown that it can find anything. This project proves its setup: ten vulnerabilities are planted in a second build of the same app, each mapped to the tool that must report it, and a verdict job fails the build if one is missed or if the hardened build has a new warning.

Technology stack

AreaTools
AppNoteVault, Node 24 running TypeScript directly, no dependencies; hardened and vulnerable build from one code base
DASTOWASP ZAP 2.17.0 in Docker: baseline scan (passive) and full scan (active attacks), rules file with FAIL, WARN and IGNORE
Testsnode:test API tests for IDOR, mass assignment, brute force, CSRF on login, session fixation, user enumeration; unit tests for the verdict logic
Isolationboth builds and ZAP on a private Docker network, no ports published, repository mounted read-only
CIGitHub Actions: checks, one scan job per build in parallel, a verdict job that writes the result table into the job summary

Architecture overview

docker network notevault-scan
  notevault-hardened ──┐
  notevault-vulnerable ┴─◄ ZAP baseline + full scan ──► JSON reports
verify.ts: hardened = no FAIL / WARN · vulnerable = every planted defect as its rule id
npm test:  IDOR · mass assignment · brute force (what ZAP cannot know)

Key engineering decisions

Implemented features

Setup and execution

npm ci
npm test                 :: API security tests, no Docker
npm run scan:full        :: ZAP baseline + full scan of both builds (Docker)
npm run verify -- --full :: the verdict

Sample test results

ZAP verdict of a CI run
A CI run: the hardened build has no alerts beyond the two documented informational ones; every planted vulnerability is caught.

CI workflow

On every push: static checks and the API security tests; then the baseline and full scan of each build in parallel jobs; then the verdict, written into the job summary. The whole run takes under four minutes.

Known limitations and future improvements

Limitations

Next steps