edgecases-PurpleHax/cve-images
GitHub: edgecases-PurpleHax/cve-images
Stars: 0 | Forks: 0
# cve-images — intentionally vulnerable lab images
A collection of **deliberately vulnerable** Docker images for security study in an
isolated lab. Started as nginx CVE reproductions and is growing into a broader set of
vulnerable-by-design images (e.g. DVWA).
## nginx CVE images
All built on a shared base that compiles **nginx 1.30.0 from source** — the last release
affected by these CVEs (fixed in 1.30.1 / 1.31.0).
| Directory | Image | CVE | Module / area |
|---|---|---|---|
| `base/` | `rwils83/nginx-vuln-base:1.30.0` | — | shared nginx 1.30.0 source build |
| `cve-2026-42945-rewrite-lab/` | `rwils83/cve-2026-42945` | CVE-2026-42945 | rewrite module heap overflow (RCE) |
| `cve-2026-42946-scgi-uwsgi-lab/` | `rwils83/cve-2026-42946` | CVE-2026-42946 | scgi/uwsgi buffer overread |
| `cve-2026-40701-resolver-lab/` | `rwils83/cve-2026-40701` | CVE-2026-40701 | resolver use-after-free (OCSP) |
| `cve-2026-42934-charset-lab/` | `rwils83/cve-2026-42934` | CVE-2026-42934 | charset module buffer overread |
## Application images
| Directory | Image | Notes |
|---|---|---|
| `dvwa-curl-lab/` | `rwils83/dvwa_with_curl` | maintained DVWA (`ghcr.io/digininja/DVWA`) + curl/python3 |
Each folder has its own `README.md` with details and references.
## Build locally
The nginx base must be built first (the CVE images `FROM` it):
docker build -t rwils83/nginx-vuln-base:1.30.0 ./base
docker build -t rwils83/cve-2026-42945:1.30.0 ./cve-2026-42945-rewrite-lab
docker build -t rwils83/cve-2026-42946:1.30.0 ./cve-2026-42946-scgi-uwsgi-lab
docker build -t rwils83/cve-2026-40701:1.30.0 ./cve-2026-40701-resolver-lab
docker build -t rwils83/cve-2026-42934:1.30.0 ./cve-2026-42934-charset-lab
docker build -t rwils83/dvwa_with_curl:latest ./dvwa-curl-lab
`./build_all.sh` builds the nginx set (base + 4 CVE images).
## Releases (GitHub Actions → Docker Hub)
CI builds every `*-lab/` image on each PR/push (build-only, no push) to catch breakage
before merge. Publishing is driven by git tags:
| Tag pattern | Builds & pushes | Tags applied |
|---|---|---|
| `v*` (e.g. `v1.30.0-lab.2`) | the four nginx CVE images | `` + `:latest` |
| `dvwa-v*` (e.g. `dvwa-v1`) | `dvwa_with_curl` | `` + `:latest` |
git tag v1.30.0-lab.2 && git push --tags # release the nginx images
git tag dvwa-v1 && git push --tags # release DVWA
Publishing requires the repo secrets `DOCKERHUB_USERNAME` and `DOCKERHUB_TOKEN`.