Advanced levelPremium

Cloudflare WAF — payload size bypass, oversized body, plan-specific limits

Bypassing the Cloudflare WAF by exploiting body size limits per plan (Free 100kb, Pro 100kb, Business 500kb, Enterprise 1mb): oversize payload trick + chunked transfer encoding.

Gorka El BochiMay 11, 202613 min

Quick answer

The Cloudflare WAF doesn't inspect the whole body: it has per-plan limits (Free ~8 KB, Pro/Business low by default, Enterprise 128 KB). If your payload goes after the limit, the WAF doesn't see it. Classic bypass: padding + real payload at the end of the body. It works on POST/PUT/PATCH, JSON, multipart and form-urlencoded. Combine it with chunked transfer encoding to evade rules that do inspect the first bytes. Real severity only when you chain it with a SQLi/XSS/RCE behind it.


1. The concept: body inspection limits

Cloudflare inspects the first N bytes of the body. Above N, the content passes without analysis to the origin. It's documented by design behavior by Cloudflare — but in bug bounty what matters is the impact on the target's app.

Limits per plan (state post-December 2025)

PlanInspection limitExpandable
Free~8 KBNo
ProLow by defaultUp to 1 MB via support
BusinessLow by defaultUp to 1 MB via support
Enterprise128 KBUp to 1 MB via support

Cloudflare tried to raise the limit to 1 MB for everyone in December 2025 (CVE-2025-55182, React RCE), but reverted due to massive false positives in managed rulesets. Result: the low limits are still in effect in the vast majority of Free/Pro deployments.

[!tip] Plan detection If you see advanced Bot Management, complex custom WAF rules and cf-ray with enterprise prefixes → probably Enterprise. If the cdn-cgi/trace page doesn't expose advanced features and the cf-cache-status values are basic → Free/Pro.


2. Fingerprint the active WAF

Before firing oversize, confirm the WAF is inspecting the body. Send a basic payload that always triggers managed rules:

bash
# SQLi clásico — debería disparar Managed Ruleset
curl -X POST https://target.com/api/search \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "q=' UNION SELECT password FROM users-- "

# Respuesta esperada con WAF activo:
# HTTP/1.1 403 Forbidden
# server: cloudflare
# cf-ray: <id>-<colo>
# (body con "Attention Required! | Cloudflare")

If you get a 403 → WAF active and inspecting. If it passes with 200/500 → either there's no WAF, or it doesn't inspect that endpoint, or it's already bypassed by default.


Keep reading the full chain

The remaining part includes the step-by-step PoC, exploitation code and the full chain that led to impact. Available to subscribers.

Free · no account

The checklist I run on every new target

47 checks ordered by cost: first what can get you in trouble, then the cheap stuff, and finally the expensive stuff — which is where the big bounties are. I'll send it to your inbox right now.

Unsubscribe in one click, from any email.

Practice this in a lab

Cloudflare Waf Bypass

Solve

Keep learning · free account

Save your progress, unlock advanced payloads and rank your flags.

Create account

Related articles

2,482

hunters training

62

labs from real hacks

1,629

completions

$14,790

paid out for these bugs

11 flags captured this week·Real hacks from HackerOne · YesWeHack · Bugcrowd·No commitment·Free Academy