You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit b8f5c68
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: src/content/articles/container-vulnerability-scanning-ci-shift-left-security/index.mdx
+21-18Lines changed: 21 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,7 +24,7 @@ This is what compliance-driven security looks like. Scanning tools get enabled b
24
24
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.
25
25
</Callout>
26
26
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.
28
28
29
29
## Policy Configuration
30
30
@@ -58,7 +58,10 @@ Not every pipeline stage needs the same policy. Teams that apply the same strict
58
58
Tiered gates fix this by matching strictness to context:
59
59
60
60
<List
61
-
variant="check-icons-list"
61
+
variant="chevron-list"
62
+
classes={{
63
+
wrapper: "sm:mb-12",
64
+
}}
62
65
items={[
63
66
{
64
67
lead: "Development branches:",
@@ -90,35 +93,35 @@ The key insight is that you're not lowering security by being permissive on dev
90
93
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:
91
94
92
95
<List
93
-
variant="check-icons-list"
96
+
variant="card-grid-list"
94
97
items={[
95
98
{
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.',
98
101
},
99
102
{
100
-
lead: "Security review:",
103
+
lead: "Security review",
101
104
text: "Is the vulnerable code path reachable? Is there a workaround? What's the actual risk in your context?",
102
105
},
103
106
{
104
-
lead: "Approval and tracking:",
107
+
lead: "Approval and tracking",
105
108
text: "Document the exception centrally with calendar reminders for the expiration date.",
106
109
},
107
110
{
108
-
lead: "Periodic review:",
111
+
lead: "Periodic review",
109
112
text: "Monthly check whether fixes are now available or risk profiles have changed.",
110
113
},
111
114
]}
112
115
/>
113
116
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
117
120
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
122
125
```
123
126
Code: Trivy ignore file with documented exceptions.
124
127
@@ -197,7 +200,7 @@ The tradeoff is debuggability. With no shell in the production image, you can't
197
200
Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
198
201
199
202
<List
200
-
variant="check-icons-list"
203
+
variant="zebra-list"
201
204
items={[
202
205
{
203
206
lead: "No patch available:",
@@ -214,6 +217,8 @@ Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
214
217
]}
215
218
/>
216
219
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.
@@ -234,6 +239,4 @@ Not every CVE can be fixed immediately. Here are the scenarios you'll encounter:
234
239
]}
235
240
/>
236
241
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
-
239
242
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