<?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: 5n4vc4smh8-pixel</title>
    <description>The latest articles on DEV Community by 5n4vc4smh8-pixel (@5n4vc4smh8pixel).</description>
    <link>https://dev.to/5n4vc4smh8pixel</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%2F4086775%2Ff49accb8-ccef-4ff8-ad84-0984490d40d4.png</url>
      <title>DEV Community: 5n4vc4smh8-pixel</title>
      <link>https://dev.to/5n4vc4smh8pixel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/5n4vc4smh8pixel"/>
    <language>en</language>
    <item>
      <title>How I Built a WAF-Bypassing Engine in Rust (v9.2.1 Release)</title>
      <dc:creator>5n4vc4smh8-pixel</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:10:09 +0000</pubDate>
      <link>https://dev.to/5n4vc4smh8pixel/how-i-built-a-waf-bypassing-engine-in-rust-v921-release-3fhe</link>
      <guid>https://dev.to/5n4vc4smh8pixel/how-i-built-a-waf-bypassing-engine-in-rust-v921-release-3fhe</guid>
      <description>&lt;p&gt;Building a web vulnerability scanner is easy. Building one that actually works against modern infrastructure protected by WAFs (Web Application Firewalls) is where the real engineering starts.&lt;/p&gt;

&lt;p&gt;Last week, I released vuln-scanner v9.0.0 and the feedback was incredible. But one thing stood out: hardened targets were blocking basic payloads. So, for v9.2.1, I went back to the drawing board to implement advanced stealth and obfuscation techniques.&lt;/p&gt;

&lt;p&gt;Here’s how I approached it using Rust.&lt;/p&gt;

&lt;p&gt;The Problem: Deterministic Pattern Matching&lt;/p&gt;

&lt;p&gt;Most WAFs look for specific strings like ' OR 1=1-- or . If your scanner sends these raw, you get a 403 Forbidden faster than you can say &amp;amp;quot;SQLi&amp;amp;quot;.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;The Solution: Dynamic Obfuscation&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;In vuln-scanner v9.2.1, I implemented a dedicated waf_bypass module in Rust that transforms every payload before it hits the wire.&amp;lt;/p&amp;gt;

&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Double-Encoding (%252F)&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;

&amp;lt;p&amp;gt;Some filters decode the URL once and check for malicious characters. By double-encoding, the WAF sees a harmless string, but the back-end application (which often decodes twice) receives the actual payload.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;// Snippet of our encoding logic&amp;lt;br&amp;gt;
pub fn double_encode(input: &amp;amp;amp;str) -&amp;amp;gt; String {&amp;lt;br&amp;gt;
    let first = utf8_percent_encode(input, NON_ALPHANUMERIC).to_string();&amp;lt;br&amp;gt;
    utf8_percent_encode(&amp;amp;amp;first, NON_ALPHANUMERIC).to_string()&amp;lt;br&amp;gt;
}&amp;lt;/p&amp;gt;

&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Comment Injection &amp;amp;amp; Case Mixing&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;

&amp;lt;p&amp;gt;WAFs often miss payloads if they are interrupted by SQL comments or if the casing is randomized (e.g., sElEcT instead of SELECT).&amp;lt;br&amp;gt;
The scanner now automatically injects /**/ in SQLi payloads and &amp;amp;lt;? ?&amp;amp;gt; or random casing in LFI paths.&amp;lt;/p&amp;gt;

&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Global Response Caching&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;

&amp;lt;p&amp;gt;To avoid rate-limiting (another form of WAF blocking), I implemented a global cache. If the scanner sees the same response structure multiple times, it skips redundant requests, keeping the traffic profile &amp;amp;quot;human-like&amp;amp;quot;.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Why Rust?&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Performance is obvious, but memory safety and concurrency (via Tokio) are the real winners here. We can run 18 different scanner &amp;amp;quot;motors&amp;amp;quot; simultaneously without worrying about race conditions or crashing the engine mid-scan.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Check out the Source Code&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;The project is 100% open-source. I’d love to get your thoughts on the src/scanner/waf_bypass.rs implementation.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;🔗 GitHub Repository: &amp;lt;a href="https://github.com/5n4vc4smh8-pixel/vuln-scanner"&amp;gt;https://github.com/5n4vc4smh8-pixel/vuln-scanner&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Happy Hacking (Responsibly)!&amp;lt;/p&amp;gt;
&lt;/p&gt;

</description>
      <category>rust</category>
      <category>security</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a web vulnerability scanner in Rust — here's what the Threat Intelligence module does</title>
      <dc:creator>5n4vc4smh8-pixel</dc:creator>
      <pubDate>Thu, 20 Aug 2026 13:27:19 +0000</pubDate>
      <link>https://dev.to/5n4vc4smh8pixel/i-built-a-web-vulnerability-scanner-in-rust-heres-what-the-threat-intelligence-module-does-j4p</link>
      <guid>https://dev.to/5n4vc4smh8pixel/i-built-a-web-vulnerability-scanner-in-rust-heres-what-the-threat-intelligence-module-does-j4p</guid>
      <description>&lt;p&gt;A few weeks ago I decided to build something I'd always dreamed of: a web vulnerability scanner. Not a toy — a real tool with behavioral detection, an enterprise dashboard, and a Threat Intelligence module that tells you which of your findings are being actively exploited in the wild.&lt;/p&gt;

&lt;p&gt;It's written in Rust, it's open source (MIT/Apache-2.0), and today I want to share how one specific part of it works: the CTI correlation engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with flat vulnerability lists
&lt;/h2&gt;

&lt;p&gt;Most scanners give you a list: "you have 373 vulnerabilities". But a security team doesn't fix all 373 at once. They need to know: &lt;strong&gt;which ones are hackers actually using right now?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the gap my scanner tries to fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the CTI module works
&lt;/h2&gt;

&lt;p&gt;The scanner ships with a curated knowledge base of emerging ransomware groups (DireWolf, Devman, MintEye, and others) and their known exploitation patterns, plus a live pull of the CISA KEV catalog (Known Exploited Vulnerabilities) — CVEs that CISA confirmed are being exploited in the wild.&lt;/p&gt;

&lt;p&gt;After each scan, the correlation engine matches detected vulnerabilities against both sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CWE-level matching&lt;/strong&gt; against CISA KEV entries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern matching&lt;/strong&gt; against exploitation techniques attributed to specific ransomware groups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priority scoring&lt;/strong&gt; so the report puts the most dangerous findings first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a report section like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;12 of your findings match actively exploited CVEs (CISA KEV). 3 match exploitation patterns of the Devman ransomware group, commonly used against exposed admin panels.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; with &lt;code&gt;reqwest&lt;/code&gt;, &lt;code&gt;tokio&lt;/code&gt;, &lt;code&gt;clap&lt;/code&gt;, &lt;code&gt;rayon&lt;/code&gt; for parallel scanning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axum&lt;/strong&gt; for the Enterprise web dashboard (JWT auth, scan history)&lt;/li&gt;
&lt;li&gt;Reports in Markdown and PDF with executive summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I learned building it
&lt;/h2&gt;

&lt;p&gt;As someone without a formal CS background who learned Rust from scratch for this project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The borrow checker is strict but fair — it caught real bugs before runtime.&lt;/li&gt;
&lt;li&gt;Deterministic detection beats heuristic guessing for scan results; AI-assisted triage is where LLMs shine.&lt;/li&gt;
&lt;li&gt;The Rust ecosystem (crates.io) made PDF generation, HTML sanitization, and parallelism almost painless.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/5n4vc4smh8-pixel/vuln-scanner" rel="noopener noreferrer"&gt;https://github.com/5n4vc4smh8-pixel/vuln-scanner&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Site: &lt;a href="https://5n4vc4smh8-pixel.github.io/vuln-scanner/" rel="noopener noreferrer"&gt;https://5n4vc4smh8-pixel.github.io/vuln-scanner/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only scan systems you own or have permission to test.&lt;/p&gt;

&lt;p&gt;Feedback welcome — especially on the detection engines and the CTI correlation logic. What would you add?&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxe04f1jo3gal6w1ytq8b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxe04f1jo3gal6w1ytq8b.png" alt=" " width="800" height="688"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm806m1cjmw8at6uyi3r7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm806m1cjmw8at6uyi3r7.png" alt=" " width="800" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

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