<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tiya Jose</title>
    <description>The latest articles on DEV Community by Tiya Jose (@tiyajp).</description>
    <link>https://dev.to/tiyajp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F612260%2Fc65b9ecd-ef6e-4266-a3d9-f9914625d135.png</url>
      <title>DEV Community: Tiya Jose</title>
      <link>https://dev.to/tiyajp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tiyajp"/>
    <language>en</language>
    <item>
      <title>Shift-Left Security: Catch CVEs Before They Catch You!</title>
      <dc:creator>Tiya Jose</dc:creator>
      <pubDate>Sat, 02 May 2026 14:08:08 +0000</pubDate>
      <link>https://dev.to/tiyajp/shift-left-security-catch-cves-before-they-catch-you-1eb6</link>
      <guid>https://dev.to/tiyajp/shift-left-security-catch-cves-before-they-catch-you-1eb6</guid>
      <description>&lt;p&gt;CVEs aren't the problem. When you &lt;strong&gt;find&lt;/strong&gt; them is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcnlrali0wwm5jqs5sn0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcnlrali0wwm5jqs5sn0g.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;CVEs in code land at the worst possible moment — after the build has shipped.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If your team has ever lost a sprint to emergency dependency upgrades, this is for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Recurring CVE-Fix Loop Paradox
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Stage 1: Denial
&lt;/h4&gt;

&lt;p&gt;The PR scanner flags a vulnerable package. The warning is non-blocking. The PR merges. The warning joins a pile no one reads.&lt;/p&gt;

&lt;h4&gt;
  
  
  Stage 2: Acceptance
&lt;/h4&gt;

&lt;p&gt;Weeks later, PSIRT files a ticket.&lt;/p&gt;

&lt;h4&gt;
  
  
  Stage 3: Crisis
&lt;/h4&gt;

&lt;p&gt;The fix gets squeezed into a sprint nobody planned for it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The gap isn't a missing tool — the PR scan tool is already in place. The gap is &lt;strong&gt;where&lt;/strong&gt; and &lt;strong&gt;when&lt;/strong&gt; the feedback shows up.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By the time PSIRT shows up, the developer has moved on — and reloading the context costs more than writing the code did.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Loop, loops...
&lt;/h2&gt;

&lt;p&gt;Shifting security left sounds clean on a slide. In practice, teams hit real friction:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Friction&lt;/th&gt;
&lt;th&gt;What it looks like in the real world&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sprint velocity vs. security depth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PRs merged is the scoreboard. Security gates feel like drag.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Threats don't pause&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New CVEs drop daily. Weekly scans are already stale.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tool fatigue&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;More scanners, more dashboards, more alerts nobody reads.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transitive dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your direct deps are clean. The CVE is three levels down.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cultural inertia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Security team's problem" thinking parks it at the end of the pipeline.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Breaking the Loop
&lt;/h2&gt;

&lt;p&gt;Security that lasts moves &lt;em&gt;with&lt;/em&gt; developers, not against them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The strongest setups don't just catch vulnerabilities — they stop them from showing up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developers catch issues while they're still typing. Vulnerabilities never make it past the laptop. Releases go out quieter.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Shift-Left Security?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Shift-left security is pulling security decisions earlier, closer to the code, closer to the people building it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The traditional development cycle follows a familiar path:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup06w461cy4tf141ofzr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup06w461cy4tf141ofzr.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Security usually shows up after the build. The code has moved on. The fix becomes a fire drill.&lt;/p&gt;

&lt;p&gt;Shift-left &lt;em&gt;flips&lt;/em&gt; that timeline. Checks live in planning and coding, so vulnerabilities surface while the developer still has full context.&lt;/p&gt;

&lt;p&gt;It's not about more tools. It's about feedback in the right place — the editor, the terminal, the PR. Inline findings get acted on, because they respect the developer's flow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Implementing Shift-Left: Catch It at the Keyboard
&lt;/h2&gt;

&lt;p&gt;The earlier a CVE is caught, the cheaper it is to fix.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Best case: &lt;strong&gt;vulnerable code never gets committed&lt;/strong&gt;. The catch happens locally, in seconds.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's what "good" looks like:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. At the dev machine
&lt;/h3&gt;

&lt;p&gt;Local CVE scanner before push. IDE plugins flag risky code as it's written. Pre-commit hooks catch the res&lt;/p&gt;

&lt;h3&gt;
  
  
  2. At the PR
&lt;/h3&gt;

&lt;p&gt;Bots scan every change. CI fails when a CVE lands in a called code path.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. For dormant repos
&lt;/h3&gt;

&lt;p&gt;Automation opens fix PRs the moment a CVE drops.&lt;/p&gt;

&lt;p&gt;You can't wait for weekly scans or quarterly reviews. By then the code has moved on, the developer has moved on, and the fix is a context-switch, not a quick edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shift Left All the Way...
&lt;/h2&gt;

&lt;p&gt;Security shouldn't sit at one checkpoint — it belongs at every phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt; — Surface risks during sprint planning so they shape the design, not the patch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding&lt;/strong&gt; — Catch vulnerabilities while the developer still has full context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building&lt;/strong&gt; — Hook static analysis and dependency scans into the build. Issues surface before review, not after deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploying&lt;/strong&gt; — Lock down the CI/CD pipeline itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running&lt;/strong&gt; — Monitor in production. Feed findings back into earlier phases so the next iteration ships safer.&lt;/p&gt;




&lt;p&gt;When security moves left, fire drills move out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Fewer surprise CVEs. Fewer rushed fixes.&lt;/em&gt; Just code that ships with quiet confidence.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Wrestled with this loop — or broken out of it? Drop a note in the comments.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Points to Ponder
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shift-left isn't more scans — it's earlier feedback.&lt;/strong&gt; Editor: minutes. PSIRT report: a sprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security belongs at every stage&lt;/strong&gt;, not just one checkpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a CVE scanner locally and in CI.&lt;/strong&gt; Catch issues before they leave the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate updates for dormant repos.&lt;/strong&gt; Auto-PRs keep stale code from rotting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make merge gates real.&lt;/strong&gt; Warnings that don't block become noise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culture beats tooling.&lt;/strong&gt; Checking for CVEs should be as routine as running tests.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>security</category>
      <category>devsec</category>
      <category>productivity</category>
      <category>cve</category>
    </item>
  </channel>
</rss>
