cncf / cncf/mentoring

[CNCF LFX Proposal] Kubescape External VEX Ingestion for Kubescape Vulnerability Scanning

Open
#1,989 10 comments 2 reactions 0 assignees View on GitHub
2026 CNCF Approved Exported lfx mentorship Maintainer/Contribex Approved Mentors Confirmed Proposal Term 3: Sept-Nov Validation Passed
Dominant language
JavaScript
Stars
3.1k
Forks
816
Avg merge
12h 32m
Merged PRs (30d)
8

Description

### CNCF Project

Kubescape

### Term

2026 Term 3 (Sep-Nov)

### Program Name

External VEX Ingestion for Kubescape Vulnerability Scanning

### Program Description

Kubescape was the first open-source project to *produce* OpenVEX documents
from its own scan results, but it does not *consume* VEX published by
anyone else. Distribution base images (nginx, alpine, python, RHEL UBI)
dominate CVE counts in most clusters, and vendors already triage most of
those CVEs as `not_affected` or `fixed` — Red Hat publishes CSAF/VEX for
every CVE touching its portfolio, and Chainguard publishes OpenVEX for
Wolfi/Chainguard images. Grype, the scanner engine kubevuln already runs,
can consume both formats via `--vex`. Kubescape's own pipeline currently
ignores all of this, so users see dozens of CVEs their upstream vendor has
already resolved or ruled out.

The storage shape and pipeline hook already exist: kubevuln persists VEX as
`OpenVulnerabilityExchangeContainer` objects today (for its own generated
VEX), and the scan pipeline has a well-defined point where a manifest is
produced per image. What's missing is (a) a way to declare and fetch
external VEX feeds, and (b) a join step that applies vendor statements to
suppress matching findings, with provenance preserved.

**Deliverables for the term:**
- A new namespaced `VEXSource` CRD declaring a feed URL, format (OpenVEX
JSON or CSAF), applicable image scope, and refresh interval.
- A controller (built on kubevuln's existing `WatchHandler` /
`CooldownQueue` machinery) that fetches, validates, and persists external
VEX documents into the existing `OpenVulnerabilityExchangeContainer`
shape (or a clearly-scoped sibling kind).
- A join step in the scan pipeline that matches external `not_affected` /
`fixed` statements against scan results and suppresses matching findings
before they reach a user, recording which document/statement caused each
suppression.
- Deduplication and normalization across feeds referencing the same
CVE/image.
- End-to-end tests against at least one real feed (Red Hat CSAF/VEX or
Chainguard OpenVEX).

This composes with — but does not require — the SecurityException CRD work;
a vendor `not_affected` statement is functionally the same shape as a
user-authored exception, so the design intentionally reuses that matching
model. Authoring/editing VEX inside the cluster stays out of scope: this
proposal is read-only ingestion of third-party data.

### Technologies

Go, Kubernetes controller-runtime/operators, OpenVEX, CSAF, Grype

### Skills same as Technologies?

- [x] Yes, the required skills are the same as the technologies listed above.

### Required/Desirable Skills

_No response_

### Mentors

Matthias Bertschy | @matthyx | matthias.bertschy@gmail.com | matthyx
Ben Hirschberg | @slashben | ben@armosec.io | slashben

### Upstream Issue URL

https://github.com/kubescape/kubevuln/issues/387

### Application Prerequisites

- [ ] Resume
- [ ] Cover Letter
- [ ] School Enrollment Verification
- [ ] Participation Permission from school or employer
- [ ] Coding Challenge
- [ ] Custom Prerequisite (fill in details below)

### Coding Challenge URL

_No response_

### Custom Prerequisite Name

_No response_

### Custom Prerequisite Description

_No response_

### Custom Prerequisite — File Upload

- [ ] Yes — completion of this task requires the mentee to submit a file.

---
**LFX program:** [CNCF - Kubescape: External VEX Ingestion for Kubescape Vulnerability Scanning (2026 Term 3)](https://mentorship.lfx.linuxfoundation.org/project/f83cb3c4-2acf-4f80-b734-83bbd43e0ffd)

Contributor guide

Open the contributing guide

Research direction

Start by reading kubevuln's existing WatchHandler and CooldownQueue machinery, the OpenVulnerabilityExchangeContainer storage shape, and the scan pipeline point that produces a manifest per image. Map how external VEX sources could be fetched and joined with findings. Done means namespaced VEXSource support, validated persistence, suppression with provenance, feed deduplication, and an end-to-end test against a real CSAF or OpenVEX feed.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, kubernetes
Domain
devops, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.