Suppress vulnerabilities applying Kubernetes context to scans
(this logo is not AI generated)
Vex8s generates VEX documents by correlating container vulnerabilities with Kubernetes settings to determine which CVEs are actually exploitable in your cluster.
Please note, this is an experimental project. Things might change quickly.
The project aims to assess the exploitability of known CVEs within Kubernetes workloads by combining vulnerability classification and securityContext analysis.

It is based on the following concept:
For a more in-depth reading you can consult this paper: Environment-Aware Vulnerability Suppression Using Kubernetes Security Contexts and VEX
You can download the latest binary from the release page.
Or you can build it manually:
make build
vex8s currently supports 2 ways to generate VEX documents:
passive-mode: passing an already generated vulnerability report created by trivy or grype.
active-mode: actively scanning the images using trivy or grype engines and then gereating the document based on the results.
Using trivy:
# generate vulnerability report.
trivy image --format json --output nginx.trivy.json nginx:1.21.0
# generate VEX document by processing vulnerability report.
vex8s generate --manifest examples/nginx.yaml --report nginx.trivy.json --output nginx.vex.json
# scan again with VEX document to suppress vulnerabilities.
trivy image --vex nginx.vex.json --show-suppressed nginx:1.21.0
The same can be applied using grype:
# generate sbom report.
grype --output cyclonedx-json --file nginx.grype.json nginx:1.21.0
# generate vulnerability report.
grype sbom:./nginx.grype.json --output json --file nginx.grype-vr.json
# generate VEX document by processing vulnerability report.
vex8s generate --manifest examples/nginx.yaml --report nginx.grype-vr.json --output nginx.vex.json
# scan sbom with VEX document to suppress vulnerabilities.
grype sbom:./nginx.grype.json --output table --vex nginx.vex.json --show-suppressed
Using trivy:
# scan the image and automatically generate VEX document.
vex8s generate --manifest examples/nginx.yaml --scan.engine trivy --output nginx.vex.json
# scan again with VEX document to suppress vulnerabilities.
trivy image --vex nginx.vex.json --show-suppressed nginx:1.21.0
The same can be applied using grype:
# generate sbom report.
grype --output cyclonedx-json --file nginx.grype.json nginx:1.21.0
# scan the image and automatically generate VEX document.
vex8s generate --manifest examples/nginx.yaml --scan.engine grype --output nginx.vex.json
# scan sbom with VEX document to suppress vulnerabilities.
grype sbom:./nginx.grype.json --output table --vex nginx.vex.json --show-suppressed
Each CVE is classified into one or more exploitation classes, which drive the
mitigation decision. vex8s supports two classifier engines via --classifier:
embedded (default): an offline ONNX ML model
bundled in the binary. No network access required.gemini: uses Google's Gemini LLM to classify the CVE description.
Requires the GEMINI_API_KEY environment variable (optionally GEMINI_MODEL).export GEMINI_API_KEY="your-api-key"
vex8s generate --manifest examples/nginx.yaml --report nginx.trivy.json \
--output nginx.vex.json --classifier gemini
See the documentation — in particular the User Guide — for a full walkthrough, the Gemini classifier setup, and a complete flag reference.
This project was inspired by Akihiro Suda's project vexllm.