Skip to content

Commit b8f5c68

Browse files
committed
List and Table updates to container-vulnerability-scanning-ci-shift-left-security article
1 parent 70a73dc commit b8f5c68

2 files changed

Lines changed: 92 additions & 67 deletions

File tree

  • src/content/articles/container-vulnerability-scanning-ci-shift-left-security

‎src/content/articles/container-vulnerability-scanning-ci-shift-left-security/index.mdx‎

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ This is what compliance-driven security looks like. Scanning tools get enabled b
2424
The fix isn't better scanners — it's abandoning compliance theater for actual security outcomes. A scanner that reports 200 unfixable CVEs trains developers to ignore all alerts. A scanner configured to report 3 fixable criticals with clear remediation steps gets those vulnerabilities fixed the same day.
2525
</Callout>
2626

27-
The difference between scanning that works and scanning that gets disabled comes down to three things: policy configuration that produces actionable findings, base image choices that eliminate CVEs at the source, and documented processes for the vulnerabilities you genuinely can't fix yet. This article uses Trivy as the reference implementation — it's become the de facto open-source choice for CI scanning due to its speed and breadth of coverage.
27+
<Highlighter>The difference between scanning that works and scanning that gets disabled comes down to three things:</Highlighter> policy configuration that produces actionable findings, base image choices that eliminate CVEs at the source, and documented processes for the vulnerabilities you genuinely can't fix yet. This article uses Trivy as the reference implementation — it's become the de facto open-source choice for CI scanning due to its speed and breadth of coverage.
2828

2929
## Policy Configuration
3030

@@ -58,7 +58,10 @@ Not every pipeline stage needs the same policy. Teams that apply the same strict
5858
Tiered gates fix this by matching strictness to context:
5959

6060
<List
61-
variant="check-icons-list"
61+
variant="chevron-list"
62+
classes={{
63+
wrapper: "sm:mb-12",
64+
}}
6265
items={[
6366
{
6467
lead: "Development branches:",
@@ -90,35 +93,35 @@ The key insight is that you're not lowering security by being permissive on dev
9093
Some vulnerabilities can't be fixed immediately. You need a process for handling these legitimately rather than pretending they don't exist. The workflow has four steps:
9194

9295
<List
93-
variant="check-icons-list"
96+
variant="card-grid-list"
9497
items={[
9598
{
96-
lead: "Developer request:",
97-
text: "Add the CVE to `.trivyignore` with a comment explaining why, a ticket reference, and an expiration date.",
99+
lead: "Developer request",
100+
text: 'Add the CVE to <span class="font-mono">.trivyignore</span> with a comment explaining why, a ticket reference, and an expiration date.',
98101
},
99102
{
100-
lead: "Security review:",
103+
lead: "Security review",
101104
text: "Is the vulnerable code path reachable? Is there a workaround? What's the actual risk in your context?",
102105
},
103106
{
104-
lead: "Approval and tracking:",
107+
lead: "Approval and tracking",
105108
text: "Document the exception centrally with calendar reminders for the expiration date.",
106109
},
107110
{
108-
lead: "Periodic review:",
111+
lead: "Periodic review",
109112
text: "Monthly check whether fixes are now available or risk profiles have changed.",
110113
},
111114
]}
112115
/>
113116

114-
```text title=".trivyignore"
115-
# CVE in test dependency, not shipped to production
116-
CVE-2023-12345
117+
```gitignore title=".trivyignore"
118+
# CVE in test dependency, not shipped to production
119+
CVE-2023-12345
117120
118-
# No fix available, risk accepted until Q2 2024
119-
# Ticket: SEC-123
120-
# Expires: 2024-06-30
121-
CVE-2023-11111
121+
# No fix available, risk accepted until Q2 2024
122+
# Ticket: SEC-123
123+
# Expires: 2024-06-30
124+
CVE-2023-11111
122125
```
123126
Code: Trivy ignore file with documented exceptions.
124127

@@ -197,7 +200,7 @@ The tradeoff is debuggability. With no shell in the production image, you can't
197200
Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
198201

199202
<List
200-
variant="check-icons-list"
203+
variant="zebra-list"
201204
items={[
202205
{
203206
lead: "No patch available:",
@@ -214,6 +217,8 @@ Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
214217
]}
215218
/>
216219

220+
The key principle for all these scenarios: document and track, don't pretend they don't exist. An acknowledged risk with compensating controls is better than an ignored vulnerability that nobody's watching.
221+
217222
<Download
218223
resource="container-vulnerability-scanning-ci-shift-left-security"
219224
title="Download the Container Security Guide"
@@ -234,6 +239,4 @@ Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
234239
]}
235240
/>
236241

237-
The key principle for all these scenarios: document and track, don't pretend they don't exist. An acknowledged risk with compensating controls is better than an ignored vulnerability that nobody's watching.
238-
239242
The goal isn't zero CVEs or passing audits — it's reducing actual risk. A team with 15 documented exceptions and a 10-day remediation SLA has better security posture than a team with 200 ignored findings and a scanner that "passes" because nobody runs it. Measure what matters: time-to-remediation, bypass rates, and trend direction. The checkbox is irrelevant if the vulnerabilities ship anyway.

0 commit comments

Comments
 (0)