VULNERABILITY MANAGEMENT IN CI/CD
Prevent exploitable vulnerabilities from reaching production without slowing developer velocity
Preventive + Risk-informed blocking
PR → Build → Test → Deploy
A. High-Level Architecture (Control Planes)
GitHub/GitLab PR Webhooks
CI Pipeline Events (Build Start / Success / Failure)
Dependency Manager (package.json, pom.xml, go.mod)
IaC Manifests (Terraform, Helm)
Security Processing Layer
SAST Engine
SCA Engine
IaC Scanner
Reachability Engine
Policy Engine
PR Status Checks
Inline Code Comments
Jira Tickets (Grouped by Fix Action)
Runtime Virtual Patch Requests (WAF)
B. End-to-End Orchestration with Data Flow
STEP 1 — PR Event Ingestion
Trigger: Developer opens or updates a Pull Request.
Inbound Data
{
"event_type": "pull_request",
"repo": "payments-api",
"pr_id": 812,
"commit_sha": "a91f3e",
"changed_files": [
"src/payment/processor.java",
"pom.xml",
"infra/sg.tf"
],
"author": "j.smith"
}
File classifier routes:
java → SAST
pom.xml → SCA
.tf → IaC Security
STEP 2 — Parallel Security Scanning
All scanners run in parallel to avoid CI slowdown.
2.1 SAST Device
Output
{
"type": "sast_finding",
"file": "processor.java",
"line": 214,
"rule": "SQL_INJECTION",
"severity": "HIGH",
"fingerprint": "abc123"
}
2.2 SCA Device
Output
{
"dependency": "org.apache.commons:commons-collections",
"version": "3.2.1",
"cve": "CVE-2015-6420",
"cvss": 9.8,
"fix_version": "3.2.2"
}
2.1 SAST Device
Output
{
"type": "sast_finding",
"file": "processor.java",
"line": 214,
"rule": "SQL_INJECTION",
"severity": "HIGH",
"fingerprint": "abc123"
}
STEP 1 — PR Event Ingestion
Trigger: Developer opens or updates a Pull Request.
Inbound Data
{
"event_type": "pull_request",
"repo": "payments-api",
"pr_id": 812,
"commit_sha": "a91f3e",
"changed_files": [
"src/payment/processor.java",
"pom.xml",
"infra/sg.tf"
],
"author": "j.smith"
}
STEP 1 — PR Event Ingestion
Trigger: Developer opens or updates a Pull Request.
Inbound Data
{
"event_type": "pull_request",
"repo": "payments-api",
"pr_id": 812,
"commit_sha": "a91f3e",
"changed_files": [
"src/payment/processor.java",
"pom.xml",
"infra/sg.tf"
],
"author": "j.smith"
}
STEP 1 — PR Event Ingestion
Trigger: Developer opens or updates a Pull Request.
Inbound Data
{
"event_type": "pull_request",
"repo": "payments-api",
"pr_id": 812,
"commit_sha": "a91f3e",
"changed_files": [
"src/payment/processor.java",
"pom.xml",
"infra/sg.tf"
],
"author": "j.smith"
}
STEP 1 — PR Event Ingestion
Trigger: Developer opens or updates a Pull Request.
Inbound Data
{
"event_type": "pull_request",
"repo": "payments-api",
"pr_id": 812,
"commit_sha": "a91f3e",
"changed_files": [
"src/payment/processor.java",
"pom.xml",
"infra/sg.tf"
],
"author": "j.smith"
}