@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.
- package/LICENSE +80 -0
- package/LICENSE-COMMUNITY +28 -0
- package/README.md +121 -0
- package/bin/cli.js +152 -0
- package/package.json +52 -0
- package/payloads/community/README.md +45 -0
- package/payloads/community/ai/ml-poisoning.json +173 -0
- package/payloads/community/ai/prompt-injection.json +247 -0
- package/payloads/community/ai/workflow-abuse.json +222 -0
- package/payloads/community/auth/jwt.json +855 -0
- package/payloads/community/auth/login-bypass.json +623 -0
- package/payloads/community/auth/mfa.json +402 -0
- package/payloads/community/auth/oauth.json +421 -0
- package/payloads/community/auth/open-redirect.json +1028 -0
- package/payloads/community/auth/session.json +404 -0
- package/payloads/community/cache/deception.json +402 -0
- package/payloads/community/cache/poisoning.json +403 -0
- package/payloads/community/deserialization/gadget.json +375 -0
- package/payloads/community/deserialization/prototype.json +370 -0
- package/payloads/community/fuzz/content-type.json +397 -0
- package/payloads/community/fuzz/headers.json +401 -0
- package/payloads/community/fuzz/methods.json +397 -0
- package/payloads/community/fuzz/obfuscation.json +362 -0
- package/payloads/community/fuzz/special-chars.json +740 -0
- package/payloads/community/fuzz/waf-bypass.json +452 -0
- package/payloads/community/graphql/batching-abuse.json +271 -0
- package/payloads/community/graphql/depth-limit.json +271 -0
- package/payloads/community/graphql/introspection.json +267 -0
- package/payloads/community/injection/crlf.json +569 -0
- package/payloads/community/injection/ldap.json +357 -0
- package/payloads/community/injection/nosqli.json +529 -0
- package/payloads/community/injection/oscmd.json +662 -0
- package/payloads/community/injection/rce-polyglots.json +452 -0
- package/payloads/community/injection/sqli.json +681 -0
- package/payloads/community/injection/ssti.json +584 -0
- package/payloads/community/injection/upload-attacks.json +632 -0
- package/payloads/community/injection/xpath.json +357 -0
- package/payloads/community/injection/xxe.json +716 -0
- package/payloads/community/logic/forced-browsing.json +405 -0
- package/payloads/community/logic/idor.json +1026 -0
- package/payloads/community/logic/privilege.json +337 -0
- package/payloads/community/media/exif-injection.json +225 -0
- package/payloads/community/media/metadata-poison.json +239 -0
- package/payloads/community/protocol/http-smuggling.json +798 -0
- package/payloads/community/protocol/http2-attacks.json +382 -0
- package/payloads/community/protocol/websocket-abuse.json +375 -0
- package/payloads/community/rate-limit/burst-simulation.json +286 -0
- package/payloads/community/rate-limit/bypass-attempts.json +326 -0
- package/payloads/community/rate-limit/zone-tests.json +332 -0
- package/payloads/community/services/authentik.json +415 -0
- package/payloads/community/services/immich.json +423 -0
- package/payloads/community/services/n8n.json +366 -0
- package/payloads/community/sqli-basic.json +182 -0
- package/payloads/community/ssrf/cloud-metadata.json +999 -0
- package/payloads/community/ssrf/dns-rebinding.json +503 -0
- package/payloads/community/ssrf/internal-networks.json +627 -0
- package/payloads/community/ssrf/protocol-smuggling.json +350 -0
- package/payloads/community/ssti/multi-language-templates.json +191 -0
- package/payloads/community/ssti/python-templates.json +200 -0
- package/payloads/community/traversal/basic.json +675 -0
- package/payloads/community/traversal/cloud-credentials.json +107 -0
- package/payloads/community/traversal/config-files.json +193 -0
- package/payloads/community/traversal/encoding.json +558 -0
- package/payloads/community/traversal/null-byte.json +105 -0
- package/payloads/community/traversal/symlink.json +93 -0
- package/payloads/community/traversal/unicode.json +134 -0
- package/payloads/community/traversal/unix-advanced.json +195 -0
- package/payloads/community/traversal/windows-advanced.json +195 -0
- package/payloads/community/waf-bypass/cloudflare-bypass.json +102 -0
- package/payloads/community/waf-bypass/encoding-bypass.json +120 -0
- package/payloads/community/waf-bypass/evasion-techniques.json +164 -0
- package/payloads/community/waf-bypass/hpp-bypass.json +92 -0
- package/payloads/community/waf-bypass/modsecurity-crs.json +220 -0
- package/payloads/community/waf-bypass/protocol-attacks.json +101 -0
- package/payloads/community/waf-bypass/sqlmap-tamper.json +252 -0
- package/payloads/community/waf-bypass/unicode-charset.json +152 -0
- package/payloads/community/waf-bypass/vendor-bypasses.json +72 -0
- package/payloads/community/waf-validation/README.md +172 -0
- package/payloads/community/waf-validation/bypass-techniques.json +272 -0
- package/payloads/community/waf-validation/custom-rules.json +952 -0
- package/payloads/community/waf-validation/evasion-techniques.json +272 -0
- package/payloads/community/waf-validation/modsecurity-core.json +151 -0
- package/payloads/community/waf-validation/owasp-top10.json +236 -0
- package/payloads/community/waf-validation/regression-tests.json +227 -0
- package/payloads/community/xss/csp-bypass.json +431 -0
- package/payloads/community/xss/dom.json +389 -0
- package/payloads/community/xss/filter-bypass.json +1242 -0
- package/payloads/community/xss/mutation.json +263 -0
- package/payloads/community/xss/polyglots.json +371 -0
- package/payloads/community/xss/reflected.json +187 -0
- package/payloads/community/xss/stored.json +330 -0
- package/payloads/crlf-injection.json +182 -0
- package/payloads/ids-map.json +155 -0
- package/payloads/ldap-injection.json +182 -0
- package/payloads/nosql-injection.json +227 -0
- package/payloads/prototype-pollution.json +182 -0
- package/payloads/request-smuggling.json +182 -0
- package/payloads/version.json +28 -0
- package/payloads/xss-advanced.json +227 -0
- package/templates/README.md +221 -0
- package/templates/nuclei/http/waf-bypass/crlf-bypass.yaml +146 -0
- package/templates/nuclei/http/waf-bypass/lfi-bypass.yaml +152 -0
- package/templates/nuclei/http/waf-bypass/nosqli-bypass.yaml +166 -0
- package/templates/nuclei/http/waf-bypass/rce-bypass.yaml +171 -0
- package/templates/nuclei/http/waf-bypass/sqli-basic.yaml +142 -0
- package/templates/nuclei/http/waf-bypass/sqli-evasion.yaml +192 -0
- package/templates/nuclei/http/waf-bypass/ssrf-bypass.yaml +130 -0
- package/templates/nuclei/http/waf-bypass/ssti-bypass.yaml +147 -0
- package/templates/nuclei/http/waf-bypass/xss-basic.yaml +163 -0
- package/templates/nuclei/http/waf-bypass/xss-evasion.yaml +217 -0
- package/templates/nuclei/http/waf-bypass/xxe-bypass.yaml +204 -0
- package/templates/nuclei/http/waf-detection/akamai-detect.yaml +105 -0
- package/templates/nuclei/http/waf-detection/aws-waf-detect.yaml +115 -0
- package/templates/nuclei/http/waf-detection/azure-waf-detect.yaml +114 -0
- package/templates/nuclei/http/waf-detection/cloudflare-detect.yaml +121 -0
- package/templates/nuclei/http/waf-detection/modsecurity-detect.yaml +129 -0
- package/templates/nuclei/workflows/waf-assessment-workflow.yaml +71 -0
- package/templates/output/asff.tmpl +61 -0
- package/templates/output/csv.tmpl +4 -0
- package/templates/output/junit.tmpl +34 -0
- package/templates/output/markdown-report.tmpl +92 -0
- package/templates/output/slack-notification.tmpl +95 -0
- package/templates/output/text-summary.tmpl +56 -0
- package/templates/overrides/api-only.yaml +130 -0
- package/templates/overrides/crs-tuning.yaml +204 -0
- package/templates/overrides/false-positive-suppression.yaml +159 -0
- package/templates/policies/owasp-top10.yaml +152 -0
- package/templates/policies/pci-dss.yaml +124 -0
- package/templates/policies/permissive.yaml +40 -0
- package/templates/policies/standard.yaml +57 -0
- package/templates/policies/strict.yaml +72 -0
- package/templates/report-configs/compliance.yaml +173 -0
- package/templates/report-configs/dark.yaml +136 -0
- package/templates/report-configs/enterprise.yaml +175 -0
- package/templates/report-configs/minimal.yaml +84 -0
- package/templates/report-configs/print.yaml +139 -0
- package/templates/workflows/api-scan.yaml +132 -0
- package/templates/workflows/ci-gate.yaml +129 -0
- package/templates/workflows/full-scan.yaml +133 -0
- package/templates/workflows/quick-probe.yaml +80 -0
- package/templates/workflows/waf-detection.yaml +89 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# WAFtester CRS Tuning Override Configuration
|
|
2
|
+
# Fine-tunes scanning for environments running ModSecurity with OWASP CRS
|
|
3
|
+
# Adjusts payloads and expectations based on CRS paranoia levels
|
|
4
|
+
|
|
5
|
+
overrides:
|
|
6
|
+
- id: crs-pl1-baseline
|
|
7
|
+
description: "Adjust expectations for CRS Paranoia Level 1 (baseline rules)"
|
|
8
|
+
match:
|
|
9
|
+
waf: "modsecurity"
|
|
10
|
+
paranoia_level: 1
|
|
11
|
+
action:
|
|
12
|
+
expected_block_rate: 60.0
|
|
13
|
+
skip_tags:
|
|
14
|
+
- "evasion-advanced"
|
|
15
|
+
- "encoding-multi"
|
|
16
|
+
- "unicode-bypass"
|
|
17
|
+
enabled: true
|
|
18
|
+
priority: 100
|
|
19
|
+
|
|
20
|
+
- id: crs-pl2-standard
|
|
21
|
+
description: "Adjust expectations for CRS Paranoia Level 2 (additional rules)"
|
|
22
|
+
match:
|
|
23
|
+
waf: "modsecurity"
|
|
24
|
+
paranoia_level: 2
|
|
25
|
+
action:
|
|
26
|
+
expected_block_rate: 80.0
|
|
27
|
+
skip_tags:
|
|
28
|
+
- "evasion-exotic"
|
|
29
|
+
enabled: true
|
|
30
|
+
priority: 100
|
|
31
|
+
|
|
32
|
+
- id: crs-pl3-strict
|
|
33
|
+
description: "Adjust expectations for CRS Paranoia Level 3 (more rules, more FPs)"
|
|
34
|
+
match:
|
|
35
|
+
waf: "modsecurity"
|
|
36
|
+
paranoia_level: 3
|
|
37
|
+
action:
|
|
38
|
+
expected_block_rate: 92.0
|
|
39
|
+
false_positive_tolerance: 8.0
|
|
40
|
+
enabled: true
|
|
41
|
+
priority: 100
|
|
42
|
+
|
|
43
|
+
- id: crs-pl4-paranoid
|
|
44
|
+
description: "Adjust expectations for CRS Paranoia Level 4 (maximum protection)"
|
|
45
|
+
match:
|
|
46
|
+
waf: "modsecurity"
|
|
47
|
+
paranoia_level: 4
|
|
48
|
+
action:
|
|
49
|
+
expected_block_rate: 98.0
|
|
50
|
+
false_positive_tolerance: 15.0
|
|
51
|
+
enabled: true
|
|
52
|
+
priority: 100
|
|
53
|
+
|
|
54
|
+
- id: crs-sqli-rules
|
|
55
|
+
description: "Tune SQLi testing for CRS rule IDs 942xxx"
|
|
56
|
+
match:
|
|
57
|
+
waf: "modsecurity"
|
|
58
|
+
category: "sqli"
|
|
59
|
+
action:
|
|
60
|
+
expect_rule_ids:
|
|
61
|
+
- "942100"
|
|
62
|
+
- "942110"
|
|
63
|
+
- "942120"
|
|
64
|
+
- "942130"
|
|
65
|
+
- "942140"
|
|
66
|
+
- "942150"
|
|
67
|
+
- "942160"
|
|
68
|
+
- "942170"
|
|
69
|
+
- "942180"
|
|
70
|
+
- "942190"
|
|
71
|
+
- "942200"
|
|
72
|
+
- "942210"
|
|
73
|
+
- "942220"
|
|
74
|
+
- "942230"
|
|
75
|
+
- "942240"
|
|
76
|
+
- "942250"
|
|
77
|
+
- "942260"
|
|
78
|
+
- "942270"
|
|
79
|
+
- "942280"
|
|
80
|
+
- "942290"
|
|
81
|
+
- "942300"
|
|
82
|
+
- "942310"
|
|
83
|
+
- "942320"
|
|
84
|
+
- "942330"
|
|
85
|
+
- "942340"
|
|
86
|
+
- "942350"
|
|
87
|
+
- "942360"
|
|
88
|
+
- "942370"
|
|
89
|
+
- "942380"
|
|
90
|
+
- "942390"
|
|
91
|
+
- "942400"
|
|
92
|
+
- "942410"
|
|
93
|
+
- "942420"
|
|
94
|
+
- "942430"
|
|
95
|
+
- "942440"
|
|
96
|
+
- "942450"
|
|
97
|
+
- "942460"
|
|
98
|
+
- "942470"
|
|
99
|
+
- "942480"
|
|
100
|
+
- "942490"
|
|
101
|
+
- "942500"
|
|
102
|
+
- "942510"
|
|
103
|
+
match_header: "x-modsecurity-rule-id"
|
|
104
|
+
enabled: true
|
|
105
|
+
priority: 80
|
|
106
|
+
|
|
107
|
+
- id: crs-xss-rules
|
|
108
|
+
description: "Tune XSS testing for CRS rule IDs 941xxx"
|
|
109
|
+
match:
|
|
110
|
+
waf: "modsecurity"
|
|
111
|
+
category: "xss"
|
|
112
|
+
action:
|
|
113
|
+
expect_rule_ids:
|
|
114
|
+
- "941100"
|
|
115
|
+
- "941110"
|
|
116
|
+
- "941120"
|
|
117
|
+
- "941130"
|
|
118
|
+
- "941140"
|
|
119
|
+
- "941150"
|
|
120
|
+
- "941160"
|
|
121
|
+
- "941170"
|
|
122
|
+
- "941180"
|
|
123
|
+
- "941190"
|
|
124
|
+
- "941200"
|
|
125
|
+
- "941210"
|
|
126
|
+
- "941220"
|
|
127
|
+
- "941230"
|
|
128
|
+
- "941240"
|
|
129
|
+
- "941250"
|
|
130
|
+
- "941260"
|
|
131
|
+
- "941270"
|
|
132
|
+
- "941280"
|
|
133
|
+
- "941290"
|
|
134
|
+
- "941300"
|
|
135
|
+
- "941310"
|
|
136
|
+
- "941320"
|
|
137
|
+
- "941330"
|
|
138
|
+
- "941340"
|
|
139
|
+
- "941350"
|
|
140
|
+
- "941360"
|
|
141
|
+
- "941370"
|
|
142
|
+
- "941380"
|
|
143
|
+
match_header: "x-modsecurity-rule-id"
|
|
144
|
+
enabled: true
|
|
145
|
+
priority: 80
|
|
146
|
+
|
|
147
|
+
- id: crs-rce-rules
|
|
148
|
+
description: "Tune RCE testing for CRS rule IDs 932xxx"
|
|
149
|
+
match:
|
|
150
|
+
waf: "modsecurity"
|
|
151
|
+
category: "rce"
|
|
152
|
+
action:
|
|
153
|
+
expect_rule_ids:
|
|
154
|
+
- "932100"
|
|
155
|
+
- "932105"
|
|
156
|
+
- "932110"
|
|
157
|
+
- "932115"
|
|
158
|
+
- "932120"
|
|
159
|
+
- "932130"
|
|
160
|
+
- "932140"
|
|
161
|
+
- "932150"
|
|
162
|
+
- "932160"
|
|
163
|
+
- "932170"
|
|
164
|
+
- "932171"
|
|
165
|
+
- "932180"
|
|
166
|
+
- "932190"
|
|
167
|
+
- "932200"
|
|
168
|
+
match_header: "x-modsecurity-rule-id"
|
|
169
|
+
enabled: true
|
|
170
|
+
priority: 80
|
|
171
|
+
|
|
172
|
+
- id: crs-anomaly-scoring
|
|
173
|
+
description: "Account for CRS anomaly scoring mode vs traditional mode"
|
|
174
|
+
match:
|
|
175
|
+
waf: "modsecurity"
|
|
176
|
+
action:
|
|
177
|
+
anomaly_threshold: 5
|
|
178
|
+
check_anomaly_score: true
|
|
179
|
+
anomaly_header: "x-modsecurity-anomaly-score"
|
|
180
|
+
enabled: true
|
|
181
|
+
priority: 70
|
|
182
|
+
|
|
183
|
+
- id: crs-block-indicators
|
|
184
|
+
description: "Recognize CRS-specific block response patterns"
|
|
185
|
+
match:
|
|
186
|
+
waf: "modsecurity"
|
|
187
|
+
action:
|
|
188
|
+
block_indicators:
|
|
189
|
+
status_codes:
|
|
190
|
+
- 403
|
|
191
|
+
- 406
|
|
192
|
+
- 418
|
|
193
|
+
- 429
|
|
194
|
+
- 503
|
|
195
|
+
body_patterns:
|
|
196
|
+
- "ModSecurity"
|
|
197
|
+
- "Access Denied"
|
|
198
|
+
- "Not Acceptable"
|
|
199
|
+
- "SecRule"
|
|
200
|
+
headers:
|
|
201
|
+
- "mod_security"
|
|
202
|
+
- "OWASP_CRS"
|
|
203
|
+
enabled: true
|
|
204
|
+
priority: 60
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# WAFtester False Positive Suppression Override Configuration
|
|
2
|
+
# Rules to suppress known false positives and reduce noise in scan results
|
|
3
|
+
# Use this to tune results after initial baseline assessment
|
|
4
|
+
|
|
5
|
+
overrides:
|
|
6
|
+
- id: suppress-static-assets
|
|
7
|
+
description: "Skip testing on static asset paths (CSS, JS, images, fonts)"
|
|
8
|
+
match:
|
|
9
|
+
path: "\\.(css|js|png|jpg|jpeg|gif|svg|ico|woff2?|ttf|eot|map)$"
|
|
10
|
+
action:
|
|
11
|
+
skip: true
|
|
12
|
+
enabled: true
|
|
13
|
+
priority: 100
|
|
14
|
+
|
|
15
|
+
- id: suppress-favicon
|
|
16
|
+
description: "Skip favicon.ico — most WAFs do not inspect this"
|
|
17
|
+
match:
|
|
18
|
+
path: "/favicon\\.ico$"
|
|
19
|
+
action:
|
|
20
|
+
skip: true
|
|
21
|
+
enabled: true
|
|
22
|
+
priority: 100
|
|
23
|
+
|
|
24
|
+
- id: suppress-robots-txt
|
|
25
|
+
description: "Skip robots.txt probing — not an attack surface"
|
|
26
|
+
match:
|
|
27
|
+
path: "/robots\\.txt$"
|
|
28
|
+
action:
|
|
29
|
+
skip: true
|
|
30
|
+
enabled: true
|
|
31
|
+
priority: 100
|
|
32
|
+
|
|
33
|
+
- id: suppress-healthcheck
|
|
34
|
+
description: "Skip health check and status endpoints"
|
|
35
|
+
match:
|
|
36
|
+
path: "/(health|healthz|health-check|status|ping|readyz|livez|ready|alive)$"
|
|
37
|
+
action:
|
|
38
|
+
skip: true
|
|
39
|
+
enabled: true
|
|
40
|
+
priority: 95
|
|
41
|
+
|
|
42
|
+
- id: suppress-metrics
|
|
43
|
+
description: "Skip metrics and monitoring endpoints"
|
|
44
|
+
match:
|
|
45
|
+
path: "/(metrics|prometheus|_monitoring|debug/vars|debug/pprof)$"
|
|
46
|
+
action:
|
|
47
|
+
skip: true
|
|
48
|
+
enabled: true
|
|
49
|
+
priority: 95
|
|
50
|
+
|
|
51
|
+
- id: suppress-common-fp-sqli
|
|
52
|
+
description: "Suppress SQLi false positives from natural language with SQL-like words"
|
|
53
|
+
match:
|
|
54
|
+
category: "sqli"
|
|
55
|
+
false_positive_indicators:
|
|
56
|
+
- body_contains: "select your"
|
|
57
|
+
- body_contains: "union of"
|
|
58
|
+
- body_contains: "drop us a line"
|
|
59
|
+
- body_contains: "order now"
|
|
60
|
+
- body_contains: "insert your"
|
|
61
|
+
- body_contains: "update your"
|
|
62
|
+
- body_contains: "delete your account"
|
|
63
|
+
- body_contains: "from our"
|
|
64
|
+
- body_contains: "where we"
|
|
65
|
+
action:
|
|
66
|
+
mark_false_positive: true
|
|
67
|
+
confidence_reduction: 0.5
|
|
68
|
+
enabled: true
|
|
69
|
+
priority: 80
|
|
70
|
+
|
|
71
|
+
- id: suppress-common-fp-xss
|
|
72
|
+
description: "Suppress XSS false positives from legitimate HTML-like content"
|
|
73
|
+
match:
|
|
74
|
+
category: "xss"
|
|
75
|
+
false_positive_indicators:
|
|
76
|
+
- body_contains: "<script src="
|
|
77
|
+
- body_contains: "onclick="
|
|
78
|
+
- body_contains: "onload="
|
|
79
|
+
- header_contains: "text/html"
|
|
80
|
+
action:
|
|
81
|
+
mark_false_positive: true
|
|
82
|
+
confidence_reduction: 0.3
|
|
83
|
+
enabled: true
|
|
84
|
+
priority: 80
|
|
85
|
+
|
|
86
|
+
- id: suppress-404-as-block
|
|
87
|
+
description: "Do not count 404 Not Found as WAF blocking unless confirmed"
|
|
88
|
+
match:
|
|
89
|
+
response_code: 404
|
|
90
|
+
action:
|
|
91
|
+
reclassify: "not_found"
|
|
92
|
+
block_confidence: 0.1
|
|
93
|
+
enabled: true
|
|
94
|
+
priority: 75
|
|
95
|
+
|
|
96
|
+
- id: suppress-redirect-as-block
|
|
97
|
+
description: "Do not count 301/302 redirects as WAF blocking"
|
|
98
|
+
match:
|
|
99
|
+
response_code:
|
|
100
|
+
- 301
|
|
101
|
+
- 302
|
|
102
|
+
- 307
|
|
103
|
+
- 308
|
|
104
|
+
action:
|
|
105
|
+
reclassify: "redirect"
|
|
106
|
+
block_confidence: 0.05
|
|
107
|
+
enabled: true
|
|
108
|
+
priority: 75
|
|
109
|
+
|
|
110
|
+
- id: suppress-rate-limit-as-block
|
|
111
|
+
description: "Distinguish rate limiting (429) from WAF blocking"
|
|
112
|
+
match:
|
|
113
|
+
response_code: 429
|
|
114
|
+
action:
|
|
115
|
+
reclassify: "rate_limited"
|
|
116
|
+
block_confidence: 0.3
|
|
117
|
+
enabled: true
|
|
118
|
+
priority: 70
|
|
119
|
+
|
|
120
|
+
- id: suppress-cdn-errors
|
|
121
|
+
description: "Filter out CDN-level errors that are not WAF blocks"
|
|
122
|
+
match:
|
|
123
|
+
response_code:
|
|
124
|
+
- 502
|
|
125
|
+
- 504
|
|
126
|
+
body_patterns:
|
|
127
|
+
- "Bad Gateway"
|
|
128
|
+
- "Gateway Timeout"
|
|
129
|
+
- "upstream connect error"
|
|
130
|
+
action:
|
|
131
|
+
reclassify: "infrastructure_error"
|
|
132
|
+
block_confidence: 0.0
|
|
133
|
+
enabled: true
|
|
134
|
+
priority: 70
|
|
135
|
+
|
|
136
|
+
- id: suppress-captcha-soft-block
|
|
137
|
+
description: "Treat CAPTCHA challenges as soft blocks, not hard blocks"
|
|
138
|
+
match:
|
|
139
|
+
body_patterns:
|
|
140
|
+
- "captcha"
|
|
141
|
+
- "recaptcha"
|
|
142
|
+
- "hCaptcha"
|
|
143
|
+
- "challenge-platform"
|
|
144
|
+
- "turnstile"
|
|
145
|
+
action:
|
|
146
|
+
reclassify: "captcha_challenge"
|
|
147
|
+
block_confidence: 0.7
|
|
148
|
+
enabled: true
|
|
149
|
+
priority: 65
|
|
150
|
+
|
|
151
|
+
- id: suppress-timeout-false-positive
|
|
152
|
+
description: "Do not count request timeouts as bypasses"
|
|
153
|
+
match:
|
|
154
|
+
timeout: true
|
|
155
|
+
action:
|
|
156
|
+
reclassify: "timeout"
|
|
157
|
+
bypass_confidence: 0.0
|
|
158
|
+
enabled: true
|
|
159
|
+
priority: 90
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# WAFtester OWASP Top 10 Policy
|
|
2
|
+
# Maps directly to OWASP Top 10 2021 categories
|
|
3
|
+
# Ensures WAF coverage for each OWASP category
|
|
4
|
+
|
|
5
|
+
name: owasp-top10
|
|
6
|
+
description: "OWASP Top 10 (2021) compliance policy — validates WAF coverage for all ten risk categories"
|
|
7
|
+
version: "2.0.0"
|
|
8
|
+
|
|
9
|
+
severity_threshold: medium
|
|
10
|
+
|
|
11
|
+
owasp_mapping:
|
|
12
|
+
A01_Broken_Access_Control:
|
|
13
|
+
scan_types:
|
|
14
|
+
- idor
|
|
15
|
+
- cors
|
|
16
|
+
- open-redirect
|
|
17
|
+
- path-traversal
|
|
18
|
+
- csrf
|
|
19
|
+
- forced-browsing
|
|
20
|
+
- privilege-escalation
|
|
21
|
+
effectiveness_below: 85.0
|
|
22
|
+
|
|
23
|
+
A02_Cryptographic_Failures:
|
|
24
|
+
scan_types:
|
|
25
|
+
- sensitive-data
|
|
26
|
+
- tls
|
|
27
|
+
- insecure-cookies
|
|
28
|
+
- cleartext-credentials
|
|
29
|
+
effectiveness_below: 80.0
|
|
30
|
+
|
|
31
|
+
A03_Injection:
|
|
32
|
+
scan_types:
|
|
33
|
+
- sqli
|
|
34
|
+
- nosqli
|
|
35
|
+
- cmdi
|
|
36
|
+
- ldap
|
|
37
|
+
- xpath
|
|
38
|
+
- ssti
|
|
39
|
+
- crlf
|
|
40
|
+
- hpp
|
|
41
|
+
- xss
|
|
42
|
+
- xxe
|
|
43
|
+
effectiveness_below: 90.0
|
|
44
|
+
|
|
45
|
+
A04_Insecure_Design:
|
|
46
|
+
scan_types:
|
|
47
|
+
- bizlogic
|
|
48
|
+
- race-condition
|
|
49
|
+
- mass-assignment
|
|
50
|
+
- api-abuse
|
|
51
|
+
effectiveness_below: 70.0
|
|
52
|
+
|
|
53
|
+
A05_Security_Misconfiguration:
|
|
54
|
+
scan_types:
|
|
55
|
+
- misconfig
|
|
56
|
+
- default-creds
|
|
57
|
+
- directory-listing
|
|
58
|
+
- verbose-errors
|
|
59
|
+
- unnecessary-features
|
|
60
|
+
effectiveness_below: 80.0
|
|
61
|
+
|
|
62
|
+
A06_Vulnerable_Components:
|
|
63
|
+
scan_types:
|
|
64
|
+
- cve
|
|
65
|
+
- outdated-software
|
|
66
|
+
- known-exploit
|
|
67
|
+
effectiveness_below: 75.0
|
|
68
|
+
|
|
69
|
+
A07_Auth_Failures:
|
|
70
|
+
scan_types:
|
|
71
|
+
- broken-auth
|
|
72
|
+
- brute-force
|
|
73
|
+
- credential-stuffing
|
|
74
|
+
- session-fixation
|
|
75
|
+
- jwt
|
|
76
|
+
- oauth
|
|
77
|
+
effectiveness_below: 85.0
|
|
78
|
+
|
|
79
|
+
A08_Software_Data_Integrity:
|
|
80
|
+
scan_types:
|
|
81
|
+
- deserialization
|
|
82
|
+
- upload
|
|
83
|
+
- ci-cd
|
|
84
|
+
effectiveness_below: 85.0
|
|
85
|
+
|
|
86
|
+
A09_Logging_Monitoring:
|
|
87
|
+
scan_types:
|
|
88
|
+
- log-injection
|
|
89
|
+
- monitoring-bypass
|
|
90
|
+
effectiveness_below: 60.0
|
|
91
|
+
|
|
92
|
+
A10_SSRF:
|
|
93
|
+
scan_types:
|
|
94
|
+
- ssrf
|
|
95
|
+
- dns-rebinding
|
|
96
|
+
- cloud-metadata
|
|
97
|
+
effectiveness_below: 90.0
|
|
98
|
+
|
|
99
|
+
fail_on:
|
|
100
|
+
bypasses:
|
|
101
|
+
- sqli
|
|
102
|
+
- xss
|
|
103
|
+
- rce
|
|
104
|
+
- ssrf
|
|
105
|
+
- lfi
|
|
106
|
+
- rfi
|
|
107
|
+
- ssti
|
|
108
|
+
- xxe
|
|
109
|
+
- cmdi
|
|
110
|
+
- deserialization
|
|
111
|
+
- nosqli
|
|
112
|
+
- crlf
|
|
113
|
+
- ldap
|
|
114
|
+
- xpath
|
|
115
|
+
- upload
|
|
116
|
+
- idor
|
|
117
|
+
- cors
|
|
118
|
+
- csrf
|
|
119
|
+
- broken-auth
|
|
120
|
+
- jwt
|
|
121
|
+
- oauth
|
|
122
|
+
|
|
123
|
+
categories:
|
|
124
|
+
- injection
|
|
125
|
+
- broken-auth
|
|
126
|
+
- sensitive-data
|
|
127
|
+
- xxe
|
|
128
|
+
- broken-access
|
|
129
|
+
- misconfig
|
|
130
|
+
- xss
|
|
131
|
+
- deserialization
|
|
132
|
+
- components
|
|
133
|
+
- logging
|
|
134
|
+
- ssrf
|
|
135
|
+
|
|
136
|
+
effectiveness_below: 80.0
|
|
137
|
+
|
|
138
|
+
error_rate_above: 5.0
|
|
139
|
+
|
|
140
|
+
false_positive_rate_above: 5.0
|
|
141
|
+
|
|
142
|
+
min_tests_required: 30
|
|
143
|
+
|
|
144
|
+
max_response_time_ms: 15000
|
|
145
|
+
|
|
146
|
+
require_waf_detected: false
|
|
147
|
+
|
|
148
|
+
ignore:
|
|
149
|
+
ids: []
|
|
150
|
+
tags:
|
|
151
|
+
- informational
|
|
152
|
+
severity_below: low
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# WAFtester PCI DSS Policy
|
|
2
|
+
# Aligned with PCI DSS v4.0 requirements for web application firewalls
|
|
3
|
+
# Requirement 6.4.2: Automated technical solution for public-facing web applications
|
|
4
|
+
|
|
5
|
+
name: pci-dss
|
|
6
|
+
description: "PCI DSS v4.0 compliance policy — validates WAF protection for cardholder data environments"
|
|
7
|
+
version: "2.0.0"
|
|
8
|
+
|
|
9
|
+
severity_threshold: medium
|
|
10
|
+
|
|
11
|
+
compliance:
|
|
12
|
+
framework: "PCI DSS"
|
|
13
|
+
version: "4.0"
|
|
14
|
+
requirements:
|
|
15
|
+
- id: "6.4.1"
|
|
16
|
+
description: "Public-facing web applications are protected against attacks"
|
|
17
|
+
- id: "6.4.2"
|
|
18
|
+
description: "Automated technical solution that detects and prevents web-based attacks"
|
|
19
|
+
- id: "6.2.4"
|
|
20
|
+
description: "Software engineering techniques prevent injection attacks"
|
|
21
|
+
- id: "11.6.1"
|
|
22
|
+
description: "Unauthorized changes to HTTP headers and payment page content are detected"
|
|
23
|
+
|
|
24
|
+
pci_controls:
|
|
25
|
+
injection_protection:
|
|
26
|
+
description: "Req 6.2.4 — Prevent common injection attacks"
|
|
27
|
+
scan_types:
|
|
28
|
+
- sqli
|
|
29
|
+
- nosqli
|
|
30
|
+
- xss
|
|
31
|
+
- cmdi
|
|
32
|
+
- ldap
|
|
33
|
+
- xpath
|
|
34
|
+
- ssti
|
|
35
|
+
- xxe
|
|
36
|
+
effectiveness_below: 90.0
|
|
37
|
+
|
|
38
|
+
authentication_protection:
|
|
39
|
+
description: "Req 8 — Identify and authenticate access"
|
|
40
|
+
scan_types:
|
|
41
|
+
- broken-auth
|
|
42
|
+
- brute-force
|
|
43
|
+
- credential-stuffing
|
|
44
|
+
- session-fixation
|
|
45
|
+
- jwt
|
|
46
|
+
effectiveness_below: 90.0
|
|
47
|
+
|
|
48
|
+
data_protection:
|
|
49
|
+
description: "Req 3+4 — Protect stored and transmitted data"
|
|
50
|
+
scan_types:
|
|
51
|
+
- sensitive-data
|
|
52
|
+
- lfi
|
|
53
|
+
- ssrf
|
|
54
|
+
- tls
|
|
55
|
+
effectiveness_below: 85.0
|
|
56
|
+
|
|
57
|
+
access_control:
|
|
58
|
+
description: "Req 7 — Restrict access by business need-to-know"
|
|
59
|
+
scan_types:
|
|
60
|
+
- idor
|
|
61
|
+
- cors
|
|
62
|
+
- csrf
|
|
63
|
+
- path-traversal
|
|
64
|
+
effectiveness_below: 85.0
|
|
65
|
+
|
|
66
|
+
change_detection:
|
|
67
|
+
description: "Req 11.6.1 — Detect unauthorized content/header changes"
|
|
68
|
+
scan_types:
|
|
69
|
+
- crlf
|
|
70
|
+
- host-header
|
|
71
|
+
- cache-poisoning
|
|
72
|
+
- request-smuggling
|
|
73
|
+
effectiveness_below: 85.0
|
|
74
|
+
|
|
75
|
+
fail_on:
|
|
76
|
+
bypasses:
|
|
77
|
+
- sqli
|
|
78
|
+
- xss
|
|
79
|
+
- rce
|
|
80
|
+
- ssrf
|
|
81
|
+
- lfi
|
|
82
|
+
- rfi
|
|
83
|
+
- ssti
|
|
84
|
+
- xxe
|
|
85
|
+
- cmdi
|
|
86
|
+
- deserialization
|
|
87
|
+
- nosqli
|
|
88
|
+
- crlf
|
|
89
|
+
- ldap
|
|
90
|
+
- xpath
|
|
91
|
+
- upload
|
|
92
|
+
- broken-auth
|
|
93
|
+
- session-fixation
|
|
94
|
+
- idor
|
|
95
|
+
- request-smuggling
|
|
96
|
+
|
|
97
|
+
categories:
|
|
98
|
+
- injection
|
|
99
|
+
- broken-auth
|
|
100
|
+
- sensitive-data
|
|
101
|
+
- xxe
|
|
102
|
+
- broken-access
|
|
103
|
+
- xss
|
|
104
|
+
- deserialization
|
|
105
|
+
- ssrf
|
|
106
|
+
|
|
107
|
+
effectiveness_below: 85.0
|
|
108
|
+
|
|
109
|
+
error_rate_above: 3.0
|
|
110
|
+
|
|
111
|
+
false_positive_rate_above: 3.0
|
|
112
|
+
|
|
113
|
+
min_tests_required: 40
|
|
114
|
+
|
|
115
|
+
max_response_time_ms: 10000
|
|
116
|
+
|
|
117
|
+
require_waf_detected: true
|
|
118
|
+
|
|
119
|
+
ignore:
|
|
120
|
+
ids: []
|
|
121
|
+
tags:
|
|
122
|
+
- informational
|
|
123
|
+
- recon
|
|
124
|
+
severity_below: low
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# WAFtester Permissive Security Policy
|
|
2
|
+
# Relaxed policy for development and initial WAF tuning
|
|
3
|
+
# Only fails on critical, actively exploitable bypasses
|
|
4
|
+
|
|
5
|
+
name: permissive
|
|
6
|
+
description: "Relaxed development policy — only fails on critical, actively exploitable WAF bypasses"
|
|
7
|
+
version: "2.0.0"
|
|
8
|
+
|
|
9
|
+
severity_threshold: high
|
|
10
|
+
|
|
11
|
+
fail_on:
|
|
12
|
+
bypasses:
|
|
13
|
+
- sqli
|
|
14
|
+
- rce
|
|
15
|
+
- deserialization
|
|
16
|
+
- request-smuggling
|
|
17
|
+
|
|
18
|
+
categories:
|
|
19
|
+
- injection
|
|
20
|
+
|
|
21
|
+
effectiveness_below: 50.0
|
|
22
|
+
|
|
23
|
+
error_rate_above: 15.0
|
|
24
|
+
|
|
25
|
+
false_positive_rate_above: 10.0
|
|
26
|
+
|
|
27
|
+
min_tests_required: 5
|
|
28
|
+
|
|
29
|
+
max_response_time_ms: 30000
|
|
30
|
+
|
|
31
|
+
require_waf_detected: false
|
|
32
|
+
|
|
33
|
+
ignore:
|
|
34
|
+
ids: []
|
|
35
|
+
tags:
|
|
36
|
+
- informational
|
|
37
|
+
- recon
|
|
38
|
+
- evasion
|
|
39
|
+
- low-confidence
|
|
40
|
+
severity_below: medium
|