<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Paulo Segurança]]></title><description><![CDATA[Paulo Segurança]]></description><link>https://paulo-seg.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Paulo Segurança</title><link>https://paulo-seg.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 21:43:04 GMT</lastBuildDate><atom:link href="https://paulo-seg.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[WAF Bypass Testing: A Defensive Checklist for AppSec and Blue Teams]]></title><description><![CDATA[A WAF can reduce risk, but it should never be treated as the only security control between an attacker and an application.
The most important WAF failures are often not caused by exotic payloads. They]]></description><link>https://paulo-seg.hashnode.dev/waf-bypass-testing-a-defensive-checklist-for-appsec-and-blue-teams</link><guid isPermaLink="true">https://paulo-seg.hashnode.dev/waf-bypass-testing-a-defensive-checklist-for-appsec-and-blue-teams</guid><category><![CDATA[cybersecurity]]></category><category><![CDATA[appsec]]></category><category><![CDATA[waf]]></category><category><![CDATA[blueteam]]></category><dc:creator><![CDATA[Paulo Rigonato]]></dc:creator><pubDate>Mon, 01 Jun 2026 22:48:18 GMT</pubDate><content:encoded><![CDATA[<p>A WAF can reduce risk, but it should never be treated as the only security control between an attacker and an application.</p>
<p>The most important WAF failures are often not caused by exotic payloads. They usually come from interpretation gaps: the edge layer, proxy, framework and backend do not always agree on what the request means.</p>
<p>This version is written for defensive teams: AppSec, Blue Team, security engineering and authorized pentesters who need a safe way to validate WAF behavior without turning the exercise into a payload collection.</p>
<p>&gt; Use this only in systems you own or are explicitly authorized to test. The goal is defensive validation and evidence collection.</p>
<p>## The Core Question</p>
<p>Instead of asking:</p>
<p>&gt; Can this WAF be bypassed?</p>
<p>Ask:</p>
<p>&gt; Do the WAF, backend and logs interpret the same request in the same way?</p>
<p>That shift changes the quality of the test.</p>
<p>A useful WAF validation exercise compares four views:</p>
<p>1. What the client sent.</p>
<p>2. What the WAF inspected.</p>
<p>3. What the backend received.</p>
<p>4. What the logs, alerts and telemetry recorded.</p>
<p>If those four views disagree, the organization has a control gap.</p>
<p>## 1. Encoding and Normalization</p>
<p>Encoding issues appear when one layer decodes data differently from another.</p>
<p>Examples of categories to validate safely:</p>
<p>- URL encoding;</p>
<p>- repeated encoding;</p>
<p>- Unicode normalization;</p>
<p>- HTML entity handling;</p>
<p>- case normalization;</p>
<p>- ambiguous or malformed input.</p>
<p>The goal is not to collect dangerous strings. The goal is to confirm whether the security decision is being made after consistent normalization.</p>
<p>### Evidence to Collect</p>
<p>- Did the WAF log the normalized or raw value?</p>
<p>- Did the backend receive a different representation?</p>
<p>- Did alerts fire for suspicious transformations?</p>
<p>- Did the application still validate the input after WAF inspection?</p>
<p>### Defensive Fixes</p>
<p>- Normalize input once, early and consistently.</p>
<p>- Reject ambiguous encodings when possible.</p>
<p>- Validate input at the application layer.</p>
<p>- Keep security logs useful enough for investigation.</p>
<p>## 2. Parameter Handling</p>
<p>Repeated parameters are a common source of interpretation mismatch.</p>
<p>Different stacks may treat repeated parameters differently:</p>
<p>- first value wins;</p>
<p>- last value wins;</p>
<p>- values become an array;</p>
<p>- values are concatenated;</p>
<p>- proxy and backend disagree.</p>
<p>If the WAF checks one value but the application uses another, policy enforcement may be unreliable.</p>
<p>### Defensive Checklist</p>
<p>- Reject repeated parameters unless explicitly supported.</p>
<p>- Define a single parsing policy at the edge.</p>
<p>- Use schema validation for sensitive endpoints.</p>
<p>- Alert on duplicated sensitive parameters such as `id`, `role`, `redirect`, `url`, `callback`, `file`, `path` and `next`.</p>
<p>## 3. Protocol and Transfer Differences</p>
<p>Some WAF gaps are caused by transport behavior rather than payload content.</p>
<p>Areas to validate:</p>
<p>- HTTP/1.1 to HTTP/2 translation;</p>
<p>- chunked transfer handling;</p>
<p>- oversized headers;</p>
<p>- conflicting headers;</p>
<p>- reverse proxy rewrites;</p>
<p>- content-type confusion.</p>
<p>The defensive objective is to ensure that unsupported or ambiguous request formats are rejected before they reach application logic.</p>
<p>## 4. Business Logic Still Belongs in the Application</p>
<p>A WAF is not a replacement for application authorization.</p>
<p>It cannot reliably understand:</p>
<p>- object ownership;</p>
<p>- tenant boundaries;</p>
<p>- user roles;</p>
<p>- payment rules;</p>
<p>- workflow order;</p>
<p>- account state.</p>
<p>That means WAF validation should be paired with application-layer testing for authorization flaws, IDOR/BOLA, mass assignment and workflow abuse.</p>
<p>## Safe WAF Validation Checklist</p>
<p>Use this checklist in authorized environments:</p>
<p>- [ ] Confirm scope, test window and emergency contact.</p>
<p>- [ ] Run tests in staging before production.</p>
<p>- [ ] Baseline normal request behavior.</p>
<p>- [ ] Compare WAF logs with backend logs.</p>
<p>- [ ] Validate encoding and normalization categories safely.</p>
<p>- [ ] Validate repeated parameter handling.</p>
<p>- [ ] Validate content-type and method enforcement.</p>
<p>- [ ] Confirm blocked and suspicious requests generate useful alerts.</p>
<p>- [ ] Confirm application validation still blocks invalid input.</p>
<p>- [ ] Document evidence: request category, WAF decision, backend interpretation, logs and mitigation.</p>
<p>## What a Good Finding Looks Like</p>
<p>A strong WAF finding should include:</p>
<p>- affected endpoint;</p>
<p>- request category;</p>
<p>- WAF decision;</p>
<p>- backend behavior;</p>
<p>- telemetry evidence;</p>
<p>- business impact;</p>
<p>- reproducible steps in staging;</p>
<p>- recommended rule or application fix.</p>
<p>Avoid reporting only that “payload X bypassed the WAF.” That is rarely enough. Explain why the mismatch happened and how to remove the class of issue.</p>
<p>## Final Thought</p>
<p>WAF validation is not about proving that a control is useless. It is about proving where the control is useful, where it is blind, and where the application must enforce security itself.</p>
<p>If your WAF blocks the obvious request but the backend still accepts an equivalent transformed request, the real issue is inconsistent interpretation across layers.</p>
<p>That is fixable.</p>
<p>---</p>
<p>Further reading: I expanded this topic in Portuguese with practical examples and mitigation notes on [paulo.seg.br](<a href="https://paulo.seg.br/bypass-waf-na-pratica/">https://paulo.seg.br/bypass-waf-na-pratica/</a>).</p>
<p>*Paulo Rigonato writes about offensive security, AppSec and defensive validation at [paulo.seg.br](<a href="https://paulo.seg.br).%5C">https://paulo.seg.br).\</a>*</p>
]]></content:encoded></item></channel></rss>