@abtnode/router-provider 1.16.38-beta-20250116-083413-dbd33222 → 1.16.38-beta-20250118-033334-2da05ae8

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 (51) hide show
  1. package/lib/nginx/includes/security/crs4/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example +200 -0
  2. package/lib/nginx/includes/security/crs4/rules/REQUEST-901-INITIALIZATION.conf +470 -0
  3. package/lib/nginx/includes/security/crs4/rules/REQUEST-905-COMMON-EXCEPTIONS.conf +57 -0
  4. package/lib/nginx/includes/security/crs4/rules/REQUEST-911-METHOD-ENFORCEMENT.conf +76 -0
  5. package/lib/nginx/includes/security/crs4/rules/REQUEST-913-SCANNER-DETECTION.conf +86 -0
  6. package/lib/nginx/includes/security/crs4/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf +1915 -0
  7. package/lib/nginx/includes/security/crs4/rules/REQUEST-921-PROTOCOL-ATTACK.conf +558 -0
  8. package/lib/nginx/includes/security/crs4/rules/REQUEST-922-MULTIPART-ATTACK.conf +120 -0
  9. package/lib/nginx/includes/security/crs4/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf +203 -0
  10. package/lib/nginx/includes/security/crs4/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf +189 -0
  11. package/lib/nginx/includes/security/crs4/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf +1875 -0
  12. package/lib/nginx/includes/security/crs4/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf +774 -0
  13. package/lib/nginx/includes/security/crs4/rules/REQUEST-934-APPLICATION-ATTACK-GENERIC.conf +366 -0
  14. package/lib/nginx/includes/security/crs4/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf +1071 -0
  15. package/lib/nginx/includes/security/crs4/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf +1978 -0
  16. package/lib/nginx/includes/security/crs4/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf +132 -0
  17. package/lib/nginx/includes/security/crs4/rules/REQUEST-944-APPLICATION-ATTACK-JAVA.conf +463 -0
  18. package/lib/nginx/includes/security/crs4/rules/REQUEST-949-BLOCKING-EVALUATION.conf +270 -0
  19. package/lib/nginx/includes/security/crs4/rules/RESPONSE-950-DATA-LEAKAGES.conf +156 -0
  20. package/lib/nginx/includes/security/crs4/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf +417 -0
  21. package/lib/nginx/includes/security/crs4/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf +108 -0
  22. package/lib/nginx/includes/security/crs4/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf +158 -0
  23. package/lib/nginx/includes/security/crs4/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf +152 -0
  24. package/lib/nginx/includes/security/crs4/rules/RESPONSE-955-WEB-SHELLS.conf +558 -0
  25. package/lib/nginx/includes/security/crs4/rules/RESPONSE-959-BLOCKING-EVALUATION.conf +280 -0
  26. package/lib/nginx/includes/security/crs4/rules/RESPONSE-980-CORRELATION.conf +138 -0
  27. package/lib/nginx/includes/security/crs4/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example +76 -0
  28. package/lib/nginx/includes/security/crs4/rules/iis-errors.data +59 -0
  29. package/lib/nginx/includes/security/crs4/rules/java-classes.data +64 -0
  30. package/lib/nginx/includes/security/crs4/rules/java-code-leakages.data +17 -0
  31. package/lib/nginx/includes/security/crs4/rules/java-errors.data +10 -0
  32. package/lib/nginx/includes/security/crs4/rules/lfi-os-files.data +722 -0
  33. package/lib/nginx/includes/security/crs4/rules/php-config-directives.data +571 -0
  34. package/lib/nginx/includes/security/crs4/rules/php-errors-pl2.data +7 -0
  35. package/lib/nginx/includes/security/crs4/rules/php-errors.data +2147 -0
  36. package/lib/nginx/includes/security/crs4/rules/php-function-names-933150.data +245 -0
  37. package/lib/nginx/includes/security/crs4/rules/php-function-names-933151.data +2201 -0
  38. package/lib/nginx/includes/security/crs4/rules/php-variables.data +30 -0
  39. package/lib/nginx/includes/security/crs4/rules/restricted-files.data +284 -0
  40. package/lib/nginx/includes/security/crs4/rules/restricted-upload.data +177 -0
  41. package/lib/nginx/includes/security/crs4/rules/scanners-user-agents.data +119 -0
  42. package/lib/nginx/includes/security/crs4/rules/sql-errors.data +172 -0
  43. package/lib/nginx/includes/security/crs4/rules/ssrf.data +177 -0
  44. package/lib/nginx/includes/security/crs4/rules/unix-shell.data +670 -0
  45. package/lib/nginx/includes/security/crs4/rules/web-shells-php.data +167 -0
  46. package/lib/nginx/includes/security/crs4/rules/windows-powershell-commands.data +425 -0
  47. package/lib/nginx/includes/security/unicode.mapping +96 -0
  48. package/lib/nginx/index.js +50 -3
  49. package/lib/nginx/templates/security/crs4/crs-setup.conf.js +857 -0
  50. package/lib/nginx/templates/security/modsecurity.conf.js +244 -0
  51. package/package.json +7 -6
@@ -0,0 +1,280 @@
1
+ # ------------------------------------------------------------------------
2
+ # OWASP CRS ver.4.9.0
3
+ # Copyright (c) 2006-2020 Trustwave and contributors. All rights reserved.
4
+ # Copyright (c) 2021-2024 CRS project. All rights reserved.
5
+ #
6
+ # The OWASP CRS is distributed under
7
+ # Apache Software License (ASL) version 2
8
+ # Please see the enclosed LICENSE file for full details.
9
+ # ------------------------------------------------------------------------
10
+
11
+ # You should set the score to the proper threshold you would prefer. If kept at "@gt 0"
12
+ # it will work similarly to previous Mod CRS rules and will create an event in the error_log
13
+ # file if there are any rules that match. If you would like to lessen the number of events
14
+ # generated in the error_log file, you should increase the anomaly score threshold to
15
+ # something like "@gt 20". This would only generate an event in the error_log file if
16
+ # there are multiple lower severity rule matches or if any 1 higher severity item matches.
17
+ #
18
+ # You should also set the desired disruptive action (deny, redirect, etc...).
19
+ #
20
+
21
+ #
22
+ # -= Paranoia Level 0 (empty) =- (apply unconditionally)
23
+ #
24
+
25
+
26
+ # Summing up the blocking and detection anomaly scores in phase 3
27
+ # even when early blocking is disabled, we need to sum up the scores in phase 3
28
+ # this prevents bugs in phase 5 if Apache skips phases because of error handling
29
+ # See: https://github.com/coreruleset/coreruleset/issues/2319#issuecomment-1047503932
30
+
31
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 1" \
32
+ "id:959052,\
33
+ phase:3,\
34
+ pass,\
35
+ t:none,\
36
+ nolog,\
37
+ tag:'OWASP_CRS',\
38
+ ver:'OWASP_CRS/4.9.0',\
39
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl1}'"
40
+
41
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 1" \
42
+ "id:959152,\
43
+ phase:3,\
44
+ pass,\
45
+ t:none,\
46
+ nolog,\
47
+ tag:'OWASP_CRS',\
48
+ ver:'OWASP_CRS/4.9.0',\
49
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl1}'"
50
+
51
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 2" \
52
+ "id:959053,\
53
+ phase:3,\
54
+ pass,\
55
+ t:none,\
56
+ nolog,\
57
+ tag:'OWASP_CRS',\
58
+ ver:'OWASP_CRS/4.9.0',\
59
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl2}'"
60
+
61
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 2" \
62
+ "id:959153,\
63
+ phase:3,\
64
+ pass,\
65
+ t:none,\
66
+ nolog,\
67
+ tag:'OWASP_CRS',\
68
+ ver:'OWASP_CRS/4.9.0',\
69
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl2}'"
70
+
71
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 3" \
72
+ "id:959054,\
73
+ phase:3,\
74
+ pass,\
75
+ t:none,\
76
+ nolog,\
77
+ tag:'OWASP_CRS',\
78
+ ver:'OWASP_CRS/4.9.0',\
79
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl3}'"
80
+
81
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 3" \
82
+ "id:959154,\
83
+ phase:3,\
84
+ pass,\
85
+ t:none,\
86
+ nolog,\
87
+ tag:'OWASP_CRS',\
88
+ ver:'OWASP_CRS/4.9.0',\
89
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl3}'"
90
+
91
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 4" \
92
+ "id:959055,\
93
+ phase:3,\
94
+ pass,\
95
+ t:none,\
96
+ nolog,\
97
+ tag:'OWASP_CRS',\
98
+ ver:'OWASP_CRS/4.9.0',\
99
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl4}'"
100
+
101
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 4" \
102
+ "id:959155,\
103
+ phase:3,\
104
+ pass,\
105
+ t:none,\
106
+ nolog,\
107
+ tag:'OWASP_CRS',\
108
+ ver:'OWASP_CRS/4.9.0',\
109
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl4}'"
110
+
111
+ # at start of phase 4, we reset the aggregate scores to 0 to prevent duplicate counting of per-PL scores
112
+ # this is necessary because the per-PL scores are counted across phases
113
+ SecAction \
114
+ "id:959059,\
115
+ phase:4,\
116
+ pass,\
117
+ t:none,\
118
+ nolog,\
119
+ tag:'OWASP_CRS',\
120
+ ver:'OWASP_CRS/4.9.0',\
121
+ setvar:'tx.blocking_outbound_anomaly_score=0'"
122
+
123
+ SecAction \
124
+ "id:959159,\
125
+ phase:4,\
126
+ pass,\
127
+ t:none,\
128
+ nolog,\
129
+ tag:'OWASP_CRS',\
130
+ ver:'OWASP_CRS/4.9.0',\
131
+ setvar:'tx.detection_outbound_anomaly_score=0'"
132
+
133
+ SecMarker "EARLY_BLOCKING_ANOMALY_SCORING"
134
+
135
+ # Summing up the blocking and detection anomaly scores in phase 4
136
+
137
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 1" \
138
+ "id:959060,\
139
+ phase:4,\
140
+ pass,\
141
+ t:none,\
142
+ nolog,\
143
+ tag:'OWASP_CRS',\
144
+ ver:'OWASP_CRS/4.9.0',\
145
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl1}'"
146
+
147
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 1" \
148
+ "id:959160,\
149
+ phase:4,\
150
+ pass,\
151
+ t:none,\
152
+ nolog,\
153
+ tag:'OWASP_CRS',\
154
+ ver:'OWASP_CRS/4.9.0',\
155
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl1}'"
156
+
157
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 2" \
158
+ "id:959061,\
159
+ phase:4,\
160
+ pass,\
161
+ t:none,\
162
+ nolog,\
163
+ tag:'OWASP_CRS',\
164
+ ver:'OWASP_CRS/4.9.0',\
165
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl2}'"
166
+
167
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 2" \
168
+ "id:959161,\
169
+ phase:4,\
170
+ pass,\
171
+ t:none,\
172
+ nolog,\
173
+ tag:'OWASP_CRS',\
174
+ ver:'OWASP_CRS/4.9.0',\
175
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl2}'"
176
+
177
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 3" \
178
+ "id:959062,\
179
+ phase:4,\
180
+ pass,\
181
+ t:none,\
182
+ nolog,\
183
+ tag:'OWASP_CRS',\
184
+ ver:'OWASP_CRS/4.9.0',\
185
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl3}'"
186
+
187
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 3" \
188
+ "id:959162,\
189
+ phase:4,\
190
+ pass,\
191
+ t:none,\
192
+ nolog,\
193
+ tag:'OWASP_CRS',\
194
+ ver:'OWASP_CRS/4.9.0',\
195
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl3}'"
196
+
197
+ SecRule TX:BLOCKING_PARANOIA_LEVEL "@ge 4" \
198
+ "id:959063,\
199
+ phase:4,\
200
+ pass,\
201
+ t:none,\
202
+ nolog,\
203
+ tag:'OWASP_CRS',\
204
+ ver:'OWASP_CRS/4.9.0',\
205
+ setvar:'tx.blocking_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl4}'"
206
+
207
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@ge 4" \
208
+ "id:959163,\
209
+ phase:4,\
210
+ pass,\
211
+ t:none,\
212
+ nolog,\
213
+ tag:'OWASP_CRS',\
214
+ ver:'OWASP_CRS/4.9.0',\
215
+ setvar:'tx.detection_outbound_anomaly_score=+%{tx.outbound_anomaly_score_pl4}'"
216
+
217
+ #
218
+ # -=[ Anomaly Mode: Overall Transaction Anomaly Score ]=-
219
+ #
220
+
221
+ # if early blocking is active, check threshold in phase 3
222
+ SecRule TX:BLOCKING_OUTBOUND_ANOMALY_SCORE "@ge %{tx.outbound_anomaly_score_threshold}" \
223
+ "id:959101,\
224
+ phase:3,\
225
+ deny,\
226
+ t:none,\
227
+ msg:'Outbound Anomaly Score Exceeded in phase 3 (Total Score: %{tx.blocking_outbound_anomaly_score})',\
228
+ tag:'anomaly-evaluation',\
229
+ tag:'OWASP_CRS',\
230
+ ver:'OWASP_CRS/4.9.0',\
231
+ chain"
232
+ SecRule TX:EARLY_BLOCKING "@eq 1"
233
+
234
+ # always check threshold in phase 4
235
+ SecRule TX:BLOCKING_OUTBOUND_ANOMALY_SCORE "@ge %{tx.outbound_anomaly_score_threshold}" \
236
+ "id:959100,\
237
+ phase:4,\
238
+ deny,\
239
+ t:none,\
240
+ msg:'Outbound Anomaly Score Exceeded (Total Score: %{tx.blocking_outbound_anomaly_score})',\
241
+ tag:'anomaly-evaluation',\
242
+ tag:'OWASP_CRS',\
243
+ ver:'OWASP_CRS/4.9.0'"
244
+
245
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 1" "id:959011,phase:3,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
246
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 1" "id:959012,phase:4,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
247
+ #
248
+ # -= Paranoia Level 1 (default) =- (apply only when tx.detection_paranoia_level is sufficiently high: 1 or higher)
249
+ #
250
+
251
+
252
+
253
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 2" "id:959013,phase:3,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
254
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 2" "id:959014,phase:4,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
255
+ #
256
+ # -= Paranoia Level 2 =- (apply only when tx.detection_paranoia_level is sufficiently high: 2 or higher)
257
+ #
258
+
259
+
260
+
261
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 3" "id:959015,phase:3,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
262
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 3" "id:959016,phase:4,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
263
+ #
264
+ # -= Paranoia Level 3 =- (apply only when tx.detection_paranoia_level is sufficiently high: 3 or higher)
265
+ #
266
+
267
+
268
+
269
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 4" "id:959017,phase:3,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
270
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 4" "id:959018,phase:4,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-959-BLOCKING-EVALUATION"
271
+ #
272
+ # -= Paranoia Level 4 =- (apply only when tx.detection_paranoia_level is sufficiently high: 4 or higher)
273
+ #
274
+
275
+
276
+
277
+ #
278
+ # -= Paranoia Levels Finished =-
279
+ #
280
+ SecMarker "END-RESPONSE-959-BLOCKING-EVALUATION"
@@ -0,0 +1,138 @@
1
+ # ------------------------------------------------------------------------
2
+ # OWASP CRS ver.4.9.0
3
+ # Copyright (c) 2006-2020 Trustwave and contributors. All rights reserved.
4
+ # Copyright (c) 2021-2024 CRS project. All rights reserved.
5
+ #
6
+ # The OWASP CRS is distributed under
7
+ # Apache Software License (ASL) version 2
8
+ # Please see the enclosed LICENSE file for full details.
9
+ # ------------------------------------------------------------------------
10
+
11
+ #
12
+ # This file is used in post processing after the response has been sent to
13
+ # the client (in the logging phase). Its purpose is to provide inbound+outbound
14
+ # correlation of events to provide a more intelligent designation as to the outcome
15
+ # or result of the transaction - meaning, was this a successful attack?
16
+ #
17
+
18
+ #
19
+ # -= Paranoia Level 0 (empty) =- (apply unconditionally)
20
+ #
21
+
22
+ # Combine inbound and outbound scores
23
+ SecAction \
24
+ "id:980099,\
25
+ phase:5,\
26
+ pass,\
27
+ t:none,\
28
+ nolog,\
29
+ noauditlog,\
30
+ tag:'OWASP_CRS',\
31
+ ver:'OWASP_CRS/4.9.0',\
32
+ setvar:'tx.blocking_anomaly_score=%{tx.blocking_inbound_anomaly_score}',\
33
+ setvar:'tx.blocking_anomaly_score=+%{tx.blocking_outbound_anomaly_score}',\
34
+ setvar:'tx.detection_anomaly_score=%{tx.detection_inbound_anomaly_score}',\
35
+ setvar:'tx.detection_anomaly_score=+%{tx.detection_outbound_anomaly_score}',\
36
+ setvar:'tx.anomaly_score=%{tx.blocking_inbound_anomaly_score}',\
37
+ setvar:'tx.anomaly_score=+%{tx.blocking_outbound_anomaly_score}'"
38
+
39
+ #
40
+ # -=[ Anomaly Score Reporting ]=-
41
+ #
42
+
43
+ # -= Reporting Level 0 =- (Skip over reporting when tx.reporting_level is 0)
44
+ SecRule TX:REPORTING_LEVEL "@eq 0" "id:980041,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-REPORTING"
45
+
46
+ # -= Reporting Level 5 =- (Jump to reporting rule immediately when tx.reporting_level is 5 or greater)
47
+ SecRule TX:REPORTING_LEVEL "@ge 5" "id:980042,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
48
+
49
+ # -= Zero detection score =- (Skip over reporting when sum of inbound and outbound detection score is equal to 0)
50
+ SecRule TX:DETECTION_ANOMALY_SCORE "@eq 0" "id:980043,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-REPORTING"
51
+
52
+ # -= Blocking score exceeds threshold =- (Jump to reporting rule immediately if a blocking score exceeds a threshold)
53
+ SecRule TX:BLOCKING_INBOUND_ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" "id:980044,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
54
+ SecRule TX:BLOCKING_OUTBOUND_ANOMALY_SCORE "@ge %{tx.outbound_anomaly_score_threshold}" "id:980045,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
55
+
56
+ # -= Reporting Level 2 =- (Skip over reporting when tx.reporting_level is less than 2)
57
+ SecRule TX:REPORTING_LEVEL "@lt 2" "id:980046,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-REPORTING"
58
+
59
+ # -= Detection score exceeds threshold =- (Jump to reporting rule immediately if a detection score exceeds a threshold)
60
+ SecRule TX:DETECTION_INBOUND_ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" "id:980047,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
61
+ SecRule TX:DETECTION_OUTBOUND_ANOMALY_SCORE "@ge %{tx.outbound_anomaly_score_threshold}" "id:980048,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
62
+
63
+ # -= Reporting Level 3 =- (Skip over reporting when tx.reporting_level is less than 3)
64
+ SecRule TX:REPORTING_LEVEL "@lt 3" "id:980049,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-REPORTING"
65
+
66
+ # -= Blocking score greater than zero =- (Jump to reporting rule immediately when sum of inbound and outbound blocking score is greater than zero)
67
+ SecRule TX:BLOCKING_ANOMALY_SCORE "@gt 0" "id:980050,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:LOG-REPORTING"
68
+
69
+ # -= Reporting Level 4 =- (Skip over reporting when tx.reporting_level is less than 4)
70
+ SecRule TX:REPORTING_LEVEL "@lt 4" "id:980051,phase:5,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-REPORTING"
71
+
72
+ # At this point, the reporting level is 4 and there's a non-zero detection
73
+ # score (already established by rule 980043) so fall through to the reporting
74
+ # rule.
75
+
76
+
77
+ # Requests that land on the following SecMarker:
78
+ # - At reporting level 5 (unconditional reporting)
79
+ # - At reporting levels 1-4 when a blocking score exceeds a threshold
80
+ # - At reporting levels 2-4 when a detection score exceeds a threshold
81
+ # - At reporting levels 3-4 when the total blocking score is greater than zero
82
+ # - At reporting level 4 when the total detection score is greater than zero
83
+ SecMarker "LOG-REPORTING"
84
+
85
+ # Inbound and outbound - all requests
86
+ SecAction \
87
+ "id:980170,\
88
+ phase:5,\
89
+ pass,\
90
+ t:none,\
91
+ noauditlog,\
92
+ msg:'Anomaly Scores: \
93
+ (Inbound Scores: blocking=%{tx.blocking_inbound_anomaly_score}, detection=%{tx.detection_inbound_anomaly_score}, per_pl=%{tx.inbound_anomaly_score_pl1}-%{tx.inbound_anomaly_score_pl2}-%{tx.inbound_anomaly_score_pl3}-%{tx.inbound_anomaly_score_pl4}, threshold=%{tx.inbound_anomaly_score_threshold}) - \
94
+ (Outbound Scores: blocking=%{tx.blocking_outbound_anomaly_score}, detection=%{tx.detection_outbound_anomaly_score}, per_pl=%{tx.outbound_anomaly_score_pl1}-%{tx.outbound_anomaly_score_pl2}-%{tx.outbound_anomaly_score_pl3}-%{tx.outbound_anomaly_score_pl4}, threshold=%{tx.outbound_anomaly_score_threshold}) - \
95
+ (SQLI=%{tx.sql_injection_score}, XSS=%{tx.xss_score}, RFI=%{tx.rfi_score}, LFI=%{tx.lfi_score}, RCE=%{tx.rce_score}, PHPI=%{tx.php_injection_score}, HTTP=%{tx.http_violation_score}, SESS=%{tx.session_fixation_score}, COMBINED_SCORE=%{tx.anomaly_score})',\
96
+ tag:'reporting',\
97
+ tag:'OWASP_CRS',\
98
+ ver:'OWASP_CRS/4.9.0'"
99
+
100
+ SecMarker "END-REPORTING"
101
+
102
+
103
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 1" "id:980011,phase:1,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
104
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 1" "id:980012,phase:2,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
105
+ #
106
+ # -= Paranoia Level 1 (default) =- (apply only when tx.detection_paranoia_level is sufficiently high: 1 or higher)
107
+ #
108
+
109
+
110
+
111
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 2" "id:980013,phase:1,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
112
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 2" "id:980014,phase:2,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
113
+ #
114
+ # -= Paranoia Level 2 =- (apply only when tx.detection_paranoia_level is sufficiently high: 2 or higher)
115
+ #
116
+
117
+
118
+
119
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 3" "id:980015,phase:1,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
120
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 3" "id:980016,phase:2,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
121
+ #
122
+ # -= Paranoia Level 3 =- (apply only when tx.detection_paranoia_level is sufficiently high: 3 or higher)
123
+ #
124
+
125
+
126
+
127
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 4" "id:980017,phase:1,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
128
+ SecRule TX:DETECTION_PARANOIA_LEVEL "@lt 4" "id:980018,phase:2,pass,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.9.0',skipAfter:END-RESPONSE-980-CORRELATION"
129
+ #
130
+ # -= Paranoia Level 4 =- (apply only when tx.detection_paranoia_level is sufficiently high: 4 or higher)
131
+ #
132
+
133
+
134
+
135
+ #
136
+ # -= Paranoia Levels Finished =-
137
+ #
138
+ SecMarker "END-RESPONSE-980-CORRELATION"
@@ -0,0 +1,76 @@
1
+ # ------------------------------------------------------------------------
2
+ # OWASP CRS ver.4.9.0
3
+ # Copyright (c) 2006-2020 Trustwave and contributors. All rights reserved.
4
+ # Copyright (c) 2021-2024 CRS project. All rights reserved.
5
+ #
6
+ # The OWASP CRS is distributed under
7
+ # Apache Software License (ASL) version 2
8
+ # Please see the enclosed LICENSE file for full details.
9
+ # ------------------------------------------------------------------------
10
+
11
+ #
12
+ # The purpose of this file is to hold LOCAL exceptions for your site.
13
+ # The types of rules that would go into this file are one where you want
14
+ # to unconditionally disable rules or modify their actions during startup.
15
+ #
16
+ # Please see the file REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
17
+ # for a description of the rule exclusions mechanism and the correct
18
+ # use of this file.
19
+ #
20
+
21
+ #
22
+ # Example Exclusion Rule: To unconditionally disable a rule ID
23
+ #
24
+ # ModSecurity Rule Exclusion: 942100 SQL Injection Detected via libinjection
25
+ # SecRuleRemoveById 942100
26
+
27
+ # Example Exclusion Rule: Remove a group of rules
28
+ #
29
+ # ModSecurity Rule Exclusion: Disable PHP injection rules
30
+ # SecRuleRemoveByTag "attack-injection-php"
31
+
32
+ #
33
+ # Example Exclusion Rule: To unconditionally remove parameter "foo" from
34
+ # inspection for SQLi rules
35
+ #
36
+ # ModSecurity Rule Exclusion: disable sqli rules for parameter foo.
37
+ # SecRuleUpdateTargetByTag "attack-sqli" "!ARGS:foo"
38
+
39
+
40
+ # -- [[ Changing the Disruptive Action for Anomaly Mode ]] --
41
+ #
42
+ # In Anomaly Mode (default in CRS3), the rules in REQUEST-949-BLOCKING-EVALUATION.conf
43
+ # and RESPONSE-959-BLOCKING-EVALUATION.conf check the accumulated attack scores
44
+ # against your policy. To apply a disruptive action, they overwrite the default
45
+ # actions specified in SecDefaultAction (setup.conf) with a 'deny' action.
46
+ # This 'deny' is by default paired with a 'status:403' action.
47
+ #
48
+ # In order to change the disruptive action from 'deny' to something else,
49
+ # you must use SecRuleUpdateActionByID directives AFTER the CRS rules
50
+ # are configured, for instance in the RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf file.
51
+ #
52
+ # These actions only apply when using Anomaly Mode.
53
+ #
54
+ # Default action: block with error 403
55
+ # (No configuration needed in this file if you want the default behavior.)
56
+ #
57
+
58
+ # Example: redirect back to the homepage on blocking
59
+ #
60
+ # SecRuleUpdateActionById 949110 "t:none,redirect:'http://%{request_headers.host}/'"
61
+ # SecRuleUpdateActionById 959100 "t:none,redirect:'http://%{request_headers.host}/'"
62
+
63
+ # Example: redirect to another URL on blocking
64
+ #
65
+ # SecRuleUpdateActionById 949110 "t:none,redirect:'http://example.com/report_problem'"
66
+ # SecRuleUpdateActionById 959100 "t:none,redirect:'http://example.com/report_problem'"
67
+
68
+ # Example: send an error 404
69
+ #
70
+ # SecRuleUpdateActionById 949110 "t:none,deny,status:404"
71
+ # SecRuleUpdateActionById 959100 "t:none,deny,status:404"
72
+
73
+ # Example: drop the connection (best for DoS attacks)
74
+ #
75
+ # SecRuleUpdateActionById 949110 "t:none,drop"
76
+ # SecRuleUpdateActionById 959100 "t:none,drop"
@@ -0,0 +1,59 @@
1
+ # This list comes from the default IIS error pages
2
+ # To renerate get the files from a default installation and use:
3
+ # grep -h '<title' *.htm
4
+
5
+ <title>401.1 - Unauthorized: Access is denied due to invalid credentials.</title>
6
+ <title>401.2 - Unauthorized: Access is denied due to server configuration.</title>
7
+ <title>401.3 - Unauthorized: Access is denied due to an ACL set on the requested resource.</title>
8
+ <title>401.4 - Unauthorized: Authorization failed by filter installed on the Web server.</title>
9
+ <title>401.5 - Unauthorized: Authorization failed by an ISAPI/CGI application.</title>
10
+ <title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
11
+ <title>403.1 - Forbidden: Execute access is denied.</title>
12
+ <title>403.10 - Forbidden: Web server is configured to deny Execute access.</title>
13
+ <title>403.11 - Forbidden: Password has been changed.</title>
14
+ <title>403.12 - Forbidden: Client certificate is denied access by the server certificate mapper.</title>
15
+ <title>403.13 - Forbidden: Client certificate has been revoked on the Web server.</title>
16
+ <title>403.14 - Forbidden: Directory listing denied.</title>
17
+ <title>403.15 - Forbidden: Client access licenses have exceeded limits on the Web server.</title>
18
+ <title>403.16 - Forbidden: Client certificate is ill-formed or is not trusted by the Web server.</title>
19
+ <title>403.17 - Forbidden: Client certificate has expired or is not yet valid.</title>
20
+ <title>403.18 - Forbidden: Cannot execute requested URL in the current application pool.</title>
21
+ <title>403.19 - Forbidden: Cannot execute CGIs for the client in this application pool.</title>
22
+ <title>403.2 - Forbidden: Read access is denied.</title>
23
+ <title>403.3 - Forbidden: Write access is denied.</title>
24
+ <title>403.4 - Forbidden: SSL is required to view this resource.</title>
25
+ <title>403.5 - Forbidden: SSL 128 is required to view this resource.</title>
26
+ <title>403.6 - Forbidden: IP address of the client has been rejected.</title>
27
+ <title>403.7 - Forbidden: SSL client certificate is required.</title>
28
+ <title>403.8 - Forbidden: DNS name of the client is rejected.</title>
29
+ <title>403.9 - Forbidden: Too many clients are trying to connect to the Web server.</title>
30
+ <title>403 - Forbidden: Access is denied.</title>
31
+ <title>404.1 - File or directory not found: Web site not accessible on the requested port.</title>
32
+ <title>404.11 - URL is double-escaped.</title>
33
+ <title>404.12 - URL has high bit characters.</title>
34
+ <title>404.14 - URL too long.</title>
35
+ <title>404.15 - Query-String too long.</title>
36
+ <title>404.2 - File or directory not found: Lockdown policy prevents this request.</title>
37
+ <title>404.3 - File or directory not found: MIME map policy prevents this request.</title>
38
+ <title>404.4 - File or directory not found: No module handler is registered to handle the request.</title>
39
+ <title>404.5 - URL sequence denied.</title>
40
+ <title>404.6 - HTTP verb denied.</title>
41
+ <title>404.7 - File extension denied.</title>
42
+ <title>404.8 - URL namespace hidden.</title>
43
+ <title>404.9 - File attribute hidden.</title>
44
+ <title>404 - File or directory not found.</title>
45
+ <title>405 - HTTP verb used to access this page is not allowed.</title>
46
+ <title>406 - Client browser does not accept the MIME type of the requested page.</title>
47
+ <title>412 - Precondition set by the client failed when evaluated on the Web server.</title>
48
+ <title>413.1 - Content-Length too large.</title>
49
+ <title>431 - Request header too long.</title>
50
+ <title>500.13 - Server error: Web server is too busy.</title>
51
+ <title>500.14 - Server error: Invalid application configuration on the server.</title>
52
+ <title>500.15 - Server error: Direct requests for GLOBAL.ASA are not allowed.</title>
53
+ <title>500.16 - Server error: UNC authorization credentials incorrect.</title>
54
+ <title>500.17 - Server error: URL authorization store cannot be found.</title>
55
+ <title>500.18 - Server error: URL authorization store cannot be opened.</title>
56
+ <title>500.19 - Server error: Data for this file is configured improperly.</title>
57
+ <title>500 - Internal server error.</title>
58
+ <title>501 - Header values specify a method that is not implemented.</title>
59
+ <title>502 - Web server received an invalid response while acting as a gateway or proxy server.</title>
@@ -0,0 +1,64 @@
1
+ # Java Classes for use with Java RCEs
2
+ #
3
+ # Used With Rule 944130 in Apache Struts and Oracle Weblogic RCEs Detection:
4
+ #
5
+ # CVE-2017-5638 (2017.01.29) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638
6
+ # CVE-2017-9791 (2017.06.21) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9791
7
+ # CVE-2017-9805 (2017.06.21) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9805
8
+ # CVE-2017-10271 (2017.06.21) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10271
9
+ # CVE-2018-11776 (2018.06.05) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-11776
10
+ # CVE-2021-44228 (2021.11.26) https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228
11
+ #
12
+ # Additional Resources
13
+ # Apache S2-057 (2019.01.20) https://cwiki.apache.org/confluence/display/WW/S2-057
14
+
15
+ com.opensymphony.xwork2
16
+ com.sun.org.apache
17
+ freemarker.core
18
+ freemarker.template
19
+ freemarker.ext.rhino
20
+ java.io.BufferedInputStream
21
+ java.io.BufferedReader
22
+ java.io.ByteArrayInputStream
23
+ java.io.ByteArrayOutputStream
24
+ java.io.CharArrayReader
25
+ java.io.DataInputStream
26
+ java.io.File
27
+ java.io.FileOutputStream
28
+ java.io.FilePermission
29
+ java.io.FileWriter
30
+ java.io.FilterInputStream
31
+ java.io.FilterOutputStream
32
+ java.io.FilterReader
33
+ java.io.InputStream
34
+ java.io.InputStreamReader
35
+ java.io.IOException
36
+ java.io.LineNumberReader
37
+ java.io.ObjectOutputStream
38
+ java.io.OutputStream
39
+ java.io.PipedOutputStream
40
+ java.io.PipedReader
41
+ java.io.PrintStream
42
+ java.io.PushbackInputStream
43
+ java.io.Reader
44
+ java.io.StringReader
45
+ java.lang.Class
46
+ java.lang.Integer
47
+ java.lang.Number
48
+ java.lang.Object
49
+ java.lang.Process
50
+ java.lang.ProcessBuilder
51
+ java.lang.reflect
52
+ java.lang.Runtime
53
+ java.lang.String
54
+ java.lang.StringBuilder
55
+ java.lang.System
56
+ java.net.Socket
57
+ javassist
58
+ javax.script.ScriptEngineManager
59
+ org.apache.commons
60
+ org.apache.struts
61
+ org.apache.struts2
62
+ org.omg.CORBA
63
+ java.beans.XMLDecode
64
+ sun.reflect
@@ -0,0 +1,17 @@
1
+ <jsp:
2
+ javax.servlet
3
+ .addheader
4
+ .createtextfile
5
+ .getfile
6
+ .loadfromfile
7
+ response.binarywrite
8
+ response.write
9
+ scripting.filesystemobject
10
+ server.createobject
11
+ server.execute
12
+ server.htmlencode
13
+ server.mappath
14
+ server.urlencode
15
+ vbscript.encode
16
+ wscript.network
17
+ wscript.shell
@@ -0,0 +1,10 @@
1
+ [java.lang.
2
+ class java.lang.
3
+ java.lang.NullPointerException
4
+ java.rmi.ServerException
5
+ at java.lang.
6
+ onclick="toggle('full exception chain stacktrace')"
7
+ at org.apache.catalina
8
+ at org.apache.coyote.
9
+ at org.apache.tomcat.
10
+ at org.apache.jasper.