<?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: Pavan Jadav</title>
    <description>The latest articles on DEV Community by Pavan Jadav (@pavan_jadav_2e44a9b477427).</description>
    <link>https://dev.to/pavan_jadav_2e44a9b477427</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4144727%2Fb884ff16-e051-4665-a828-215b379411ec.png</url>
      <title>DEV Community: Pavan Jadav</title>
      <link>https://dev.to/pavan_jadav_2e44a9b477427</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pavan_jadav_2e44a9b477427"/>
    <language>en</language>
    <item>
      <title>I Built an Open-Source AI Security Scanner That Eliminates False Positives</title>
      <dc:creator>Pavan Jadav</dc:creator>
      <pubDate>Sat, 26 Sep 2026 18:58:41 +0000</pubDate>
      <link>https://dev.to/pavan_jadav_2e44a9b477427/i-built-an-open-source-ai-security-scanner-that-eliminates-false-positives-3cja</link>
      <guid>https://dev.to/pavan_jadav_2e44a9b477427/i-built-an-open-source-ai-security-scanner-that-eliminates-false-positives-3cja</guid>
      <description>&lt;h1&gt;
  
  
  🛡️ I Built an AI Security Scanner That Eliminates False Positives
&lt;/h1&gt;

&lt;p&gt;Most security scanners have one big problem: &lt;strong&gt;too much noise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You run a scan, get 200 alerts, and 160 of them are false positives. You spend hours triaging instead of actually fixing real bugs. Sound familiar?&lt;/p&gt;

&lt;p&gt;That's exactly why I built &lt;strong&gt;Sentinel Bug Engine&lt;/strong&gt; — an open-source, AI-powered security scanner with a unique &lt;strong&gt;Joint Verification Engine (JVE)&lt;/strong&gt; that adversarially scores each finding before it ever reaches you.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pavan67-git/sentinel-bug-engine" rel="noopener noreferrer"&gt;github.com/pavan67-git/sentinel-bug-engine&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 The Problem with Existing Tools
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does well&lt;/th&gt;
&lt;th&gt;The gap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Semgrep&lt;/td&gt;
&lt;td&gt;Fast static patterns&lt;/td&gt;
&lt;td&gt;High false positive rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bandit&lt;/td&gt;
&lt;td&gt;Python-specific&lt;/td&gt;
&lt;td&gt;No verification step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Snyk&lt;/td&gt;
&lt;td&gt;Dependency scanning&lt;/td&gt;
&lt;td&gt;Commercial, not code-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeQL&lt;/td&gt;
&lt;td&gt;Deep analysis&lt;/td&gt;
&lt;td&gt;Complex setup, GitHub-only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of them answer the real question: &lt;strong&gt;"Is this alert actually exploitable in this specific codebase?"&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Solution: 4-Tier Analysis Pipeline
&lt;/h2&gt;

&lt;p&gt;Sentinel uses a layered approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────┐
│  Tier 1: Universal Parser                          │
│  → Detects language, extracts code blocks          │
├────────────────────────────────────────────────────┤
│  Tier 2: Deterministic Fast Filter                 │
│  → Regex + pattern rules (OWASP Top 10, CWEs)     │
│  → Sub-second scanning                             │
├────────────────────────────────────────────────────┤
│  Tier 3: LLM Cognitive Analysis (optional)         │
│  → Gemini / OpenAI / Claude / Ollama               │
│  → Catches business logic bugs, race conditions    │
├────────────────────────────────────────────────────┤
│  Tier 4: Joint Verification Engine (JVE) ← KEY    │
│  → Adversarially evaluates each finding            │
│  → Detects mitigating controls in context          │
│  → Assigns confidence score, discards FPs          │
└────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 The JVE — What Makes This Different
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Joint Verification Engine&lt;/strong&gt; is the core differentiator.&lt;/p&gt;

&lt;p&gt;For every potential finding, the JVE:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reads 20 lines of surrounding code context&lt;/li&gt;
&lt;li&gt;Looks for &lt;strong&gt;mitigating controls&lt;/strong&gt; — sanitizers, parameterized queries, type guards, allowlists&lt;/li&gt;
&lt;li&gt;Assigns a &lt;strong&gt;confidence score (0–100%)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Labels the finding: &lt;code&gt;VERIFIED_TRUE_POSITIVE&lt;/code&gt;, &lt;code&gt;LIKELY_TRUE_POSITIVE&lt;/code&gt;, &lt;code&gt;SUSPECTED_FALSE_POSITIVE&lt;/code&gt;, or &lt;code&gt;DISPROVED_FALSE_POSITIVE&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatically discards&lt;/strong&gt; &lt;code&gt;DISPROVED_FALSE_POSITIVE&lt;/code&gt; findings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's the result in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ❌ VULNERABLE — JVE flags this (LIKELY_TRUE_POSITIVE, 60%)
&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ✅ SAFE — JVE correctly ignores this
&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = ?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;),))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second query uses parameterized inputs — JVE detects this and &lt;strong&gt;does not raise a false alert&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Live Scan Results
&lt;/h2&gt;

&lt;p&gt;I ran Sentinel against a deliberately vulnerable Flask app. Here's the real output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=== SENTINEL SCAN RESULTS ===
Target: vulnerable_flask_app.py
Total findings: 6

  CRITICAL: 2
  HIGH: 3
  MEDIUM: 1

[SEC-001] CRITICAL | CWE-798  | Hardcoded API Secret or Private Key    | JVE: LIKELY_TRUE_POSITIVE (60%)
[SEC-002] HIGH     | CWE-89   | SQL Query Concatenation / Potential SQLi| JVE: LIKELY_TRUE_POSITIVE (60%)
[SEC-003] HIGH     | CWE-78   | Dangerous OS Command Execution          | JVE: LIKELY_TRUE_POSITIVE (60%)
[SEC-004] HIGH     | CWE-78   | Dangerous OS Command Execution          | JVE: LIKELY_TRUE_POSITIVE (60%)
[SEC-005] CRITICAL | CWE-502  | Unsafe Dynamic Code Evaluation (eval)  | JVE: LIKELY_TRUE_POSITIVE (60%)
[SEC-006] MEDIUM   | CWE-400  | Resource Leak (Unclosed File)          | JVE: LIKELY_TRUE_POSITIVE (60%)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6 real findings. 0 false positives.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every finding comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CWE classification&lt;/li&gt;
&lt;li&gt;OWASP Top 10 mapping&lt;/li&gt;
&lt;li&gt;Exact file + line location&lt;/li&gt;
&lt;li&gt;JVE verdict + confidence score&lt;/li&gt;
&lt;li&gt;Suggested fix with code diff&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 What It Detects
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CWE&lt;/th&gt;
&lt;th&gt;Vulnerability&lt;/th&gt;
&lt;th&gt;OWASP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CWE-89&lt;/td&gt;
&lt;td&gt;SQL Injection&lt;/td&gt;
&lt;td&gt;A03:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-78&lt;/td&gt;
&lt;td&gt;OS Command Injection&lt;/td&gt;
&lt;td&gt;A03:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-79&lt;/td&gt;
&lt;td&gt;Cross-Site Scripting&lt;/td&gt;
&lt;td&gt;A03:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-22&lt;/td&gt;
&lt;td&gt;Path Traversal&lt;/td&gt;
&lt;td&gt;A01:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-502&lt;/td&gt;
&lt;td&gt;Unsafe Deserialization / eval&lt;/td&gt;
&lt;td&gt;A08:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-798&lt;/td&gt;
&lt;td&gt;Hardcoded Credentials&lt;/td&gt;
&lt;td&gt;A07:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-918&lt;/td&gt;
&lt;td&gt;Server-Side Request Forgery&lt;/td&gt;
&lt;td&gt;A10:2021&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-400&lt;/td&gt;
&lt;td&gt;Resource Exhaustion / Leaks&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-362&lt;/td&gt;
&lt;td&gt;Race Conditions&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CWE-476&lt;/td&gt;
&lt;td&gt;Null Pointer Dereference&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Supported languages:&lt;/strong&gt; Python, JavaScript, TypeScript, Java, Go, PHP, C/C++, Rust, Ruby, C#&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
git clone https://github.com/pavan67-git/sentinel-bug-engine.git
&lt;span class="nb"&gt;cd &lt;/span&gt;sentinel-bug-engine
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Basic scan&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.cli scan ./your-project

&lt;span class="c"&gt;# With SARIF export (for GitHub Advanced Security / GitLab CI)&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.cli scan ./your-project &lt;span class="nt"&gt;--format&lt;/span&gt; both &lt;span class="nt"&gt;--sarif-out&lt;/span&gt; results.sarif

&lt;span class="c"&gt;# Only HIGH+ severity&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.cli scan ./your-project &lt;span class="nt"&gt;--min-severity&lt;/span&gt; HIGH

&lt;span class="c"&gt;# With LLM reasoning (Gemini)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-key"&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; src.cli scan ./your-project &lt;span class="nt"&gt;--enable-llm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📦 CI/CD Integration
&lt;/h2&gt;

&lt;p&gt;Sentinel exports &lt;strong&gt;SARIF 2.1.0&lt;/strong&gt; — the industry standard supported by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ GitHub Advanced Security (Code Scanning)&lt;/li&gt;
&lt;li&gt;✅ GitLab Security Dashboard&lt;/li&gt;
&lt;li&gt;✅ SonarQube&lt;/li&gt;
&lt;li&gt;✅ Azure DevOps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add it to your GitHub Actions workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Sentinel Security Scan&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;pip install .&lt;/span&gt;
    &lt;span class="s"&gt;python -m src.cli scan . --min-severity HIGH --format sarif --sarif-out results.sarif&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Upload SARIF to GitHub&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github/codeql-action/upload-sarif@v3&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;sarif_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;results.sarif&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] More LLM-powered rules (business logic, race conditions)&lt;/li&gt;
&lt;li&gt;[ ] VS Code extension&lt;/li&gt;
&lt;li&gt;[ ] Web dashboard (already in progress)&lt;/li&gt;
&lt;li&gt;[ ] Benchmark against CVE database&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Contribute
&lt;/h2&gt;

&lt;p&gt;The project is open source and I'd love contributions — especially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New detection rules for more CWEs&lt;/li&gt;
&lt;li&gt;Language-specific pattern improvements&lt;/li&gt;
&lt;li&gt;Benchmark datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/pavan67-git/sentinel-bug-engine" rel="noopener noreferrer"&gt;github.com/pavan67-git/sentinel-bug-engine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If this helped you or the JVE concept interests you, drop a ⭐ on GitHub or leave a comment below. Always open to feedback!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>security</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
