Skip to content

Commit 2ac6c00

Browse files
authored
chore: release v4.21.0 (#4368)
Signed-off-by: Felipe Zipitria <[email protected]>
1 parent 2ced5dc commit 2ac6c00

31 files changed

+693
-672
lines changed

CHANGES.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,28 @@
55
or the CRS Google Group at
66
* https://groups.google.com/a/owasp.org/g/modsecurity-core-rule-set-project
77

8-
## Version 4.21.0-dev - 2025-MM-DD
8+
## Version 4.22.0-dev - 2025-MM-DD
9+
10+
## Version 4.21.0 - 2025-12-01
11+
12+
## What's Changed
13+
### 🆕 New features and detections 🎉
14+
* feat(931100): add IPv6 support / XML scan and SSH scheme. by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4321
15+
* feat(920440): add new restricted file extensions by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4322
16+
### 🧰 Other Changes
17+
* fix(942160): adding unit test for double comment by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4315
18+
* fix(920280, 920300, 920310, 920311, 920320, 920330): should be block by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4319
19+
* fix(942151,942152): wrong functions names by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4333
20+
* feat(942460): adding help for non-English folks by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4334
21+
* fix(932180): reduce substring false positives by @EsadCetiner in https://github.com/coreruleset/coreruleset/pull/4338
22+
* fix(942151,942152): wrong functions names by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4337
23+
* fix(920180): wrong unit test - content-type evasion bypass by @touchweb-vincent in https://github.com/coreruleset/coreruleset/pull/4339
24+
* fix(956110): move rule to pl-2 by @EsadCetiner in https://github.com/coreruleset/coreruleset/pull/4344
25+
* docs: comment on disabling `Expect` header in .Net by @theseion in https://github.com/coreruleset/coreruleset/pull/4348
26+
* fix: add missing capture action to affected rules by @airween in https://github.com/coreruleset/coreruleset/pull/4361
27+
28+
29+
**Full Changelog**: https://github.com/coreruleset/coreruleset/compare/v4.20.0...v4.21.0
930

1031
## Version 4.20.0 - 2025-11-02
1132

SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ Along those lines, OWASP CRS team may not issue security notifications for unsup
1111

1212
| Version | Supported |
1313
| --------- | ------------------ |
14+
| 4.21.z | :white_check_mark: |
1415
| 4.20.z | :white_check_mark: |
15-
| 4.19.z | :white_check_mark: |
1616
| 4.y.z | :x: |
1717
| 3.3.x | :white_check_mark: |
1818
| 3.2.x | :x: |

crs-setup.conf.example

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ------------------------------------------------------------------------
2-
# OWASP CRS ver.4.21.0-dev
2+
# OWASP CRS ver.4.21.0
33
# Copyright (c) 2006-2020 Trustwave and contributors. All rights reserved.
44
# Copyright (c) 2021-2025 CRS project. All rights reserved.
55
#
@@ -181,7 +181,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
181181
# t:none,\
182182
# nolog,\
183183
# tag:'OWASP_CRS',\
184-
# ver:'OWASP_CRS/4.21.0-dev',\
184+
# ver:'OWASP_CRS/4.21.0',\
185185
# setvar:tx.blocking_paranoia_level=1"
186186

187187

@@ -209,7 +209,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
209209
# t:none,\
210210
# nolog,\
211211
# tag:'OWASP_CRS',\
212-
# ver:'OWASP_CRS/4.21.0-dev',\
212+
# ver:'OWASP_CRS/4.21.0',\
213213
# setvar:tx.detection_paranoia_level=1"
214214

215215

@@ -235,7 +235,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
235235
# t:none,\
236236
# nolog,\
237237
# tag:'OWASP_CRS',\
238-
# ver:'OWASP_CRS/4.21.0-dev',\
238+
# ver:'OWASP_CRS/4.21.0',\
239239
# setvar:tx.enforce_bodyproc_urlencoded=1"
240240

241241

@@ -270,7 +270,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
270270
# t:none,\
271271
# nolog,\
272272
# tag:'OWASP_CRS',\
273-
# ver:'OWASP_CRS/4.21.0-dev',\
273+
# ver:'OWASP_CRS/4.21.0',\
274274
# setvar:tx.critical_anomaly_score=5,\
275275
# setvar:tx.error_anomaly_score=4,\
276276
# setvar:tx.warning_anomaly_score=3,\
@@ -324,7 +324,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
324324
# t:none,\
325325
# nolog,\
326326
# tag:'OWASP_CRS',\
327-
# ver:'OWASP_CRS/4.21.0-dev',\
327+
# ver:'OWASP_CRS/4.21.0',\
328328
# setvar:tx.inbound_anomaly_score_threshold=5,\
329329
# setvar:tx.outbound_anomaly_score_threshold=4"
330330

@@ -385,7 +385,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
385385
# t:none,\
386386
# nolog,\
387387
# tag:'OWASP_CRS',\
388-
# ver:'OWASP_CRS/4.21.0-dev',\
388+
# ver:'OWASP_CRS/4.21.0',\
389389
# setvar:tx.reporting_level=4"
390390

391391

@@ -417,7 +417,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
417417
# t:none,\
418418
# nolog,\
419419
# tag:'OWASP_CRS',\
420-
# ver:'OWASP_CRS/4.21.0-dev',\
420+
# ver:'OWASP_CRS/4.21.0',\
421421
# setvar:tx.early_blocking=1"
422422

423423

@@ -438,7 +438,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
438438
# t:none,\
439439
# nolog,\
440440
# tag:'OWASP_CRS',\
441-
# ver:'OWASP_CRS/4.21.0-dev',\
441+
# ver:'OWASP_CRS/4.21.0',\
442442
# setvar:tx.enable_default_collections=1"
443443

444444

@@ -476,7 +476,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
476476
# t:none,\
477477
# nolog,\
478478
# tag:'OWASP_CRS',\
479-
# ver:'OWASP_CRS/4.21.0-dev',\
479+
# ver:'OWASP_CRS/4.21.0',\
480480
# setvar:'tx.allowed_methods=GET HEAD POST OPTIONS'"
481481

482482
# Content-Types that a client is allowed to send in a request.
@@ -516,7 +516,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
516516
# t:none,\
517517
# nolog,\
518518
# tag:'OWASP_CRS',\
519-
# ver:'OWASP_CRS/4.21.0-dev',\
519+
# ver:'OWASP_CRS/4.21.0',\
520520
# chain"
521521
# SecRule REQUEST_URI "@rx ^/foo/bar" \
522522
# "t:none,\
@@ -535,7 +535,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
535535
# t:none,\
536536
# nolog,\
537537
# tag:'OWASP_CRS',\
538-
# ver:'OWASP_CRS/4.21.0-dev',\
538+
# ver:'OWASP_CRS/4.21.0',\
539539
# setvar:'tx.allowed_request_content_type=|application/x-www-form-urlencoded| |multipart/form-data| |text/xml| |application/xml| |application/soap+xml| |application/json| |application/reports+json| |application/csp-report|'"
540540

541541
# Allowed HTTP versions.
@@ -551,7 +551,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
551551
# t:none,\
552552
# nolog,\
553553
# tag:'OWASP_CRS',\
554-
# ver:'OWASP_CRS/4.21.0-dev',\
554+
# ver:'OWASP_CRS/4.21.0',\
555555
# setvar:'tx.allowed_http_versions=HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/2.0 HTTP/3 HTTP/3.0'"
556556

557557
# Forbidden file extensions.
@@ -575,7 +575,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
575575
# t:none,\
576576
# nolog,\
577577
# tag:'OWASP_CRS',\
578-
# ver:'OWASP_CRS/4.21.0-dev',\
578+
# ver:'OWASP_CRS/4.21.0',\
579579
# setvar:'tx.restricted_extensions=.ani/ .asa/ .asax/ .ascx/ .back/ .backup/ .bak/ .bck/ .bk/ .bkp/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .cnf/ .com/ .compositefont/ .config/ .conf/ .copy/ .crt/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dist/ .dll/ .dos/ .dpkg-dist/ .drv/ .gadget/ .hta/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .inf/ .ini/ .jse/ .key/ .licx/ .lnk/ .log/ .mdb/ .msc/ .ocx/ .old/ .pass/ .pdb/ .pfx/ .pif/ .pem/ .pol/ .prf/ .printer/ .pwd/ .rdb/ .rdp/ .reg/ .resources/ .resx/ .sav/ .save/ .scr/ .sct/ .sh/ .shs/ .sql/ .sqlite/ .sqlite3/ .swp/ .sys/ .temp/ .tlb/ .tmp/ .vb/ .vbe/ .vbs/ .vbproj/ .vsdisco/ .vxd/ .webinfo/ .ws/ .wsc/ .wsf/ .wsh/ .xsd/ .xsx/'"
580580

581581
# Restricted request headers.
@@ -631,7 +631,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
631631
# t:none,\
632632
# nolog,\
633633
# tag:'OWASP_CRS',\
634-
# ver:'OWASP_CRS/4.21.0-dev',\
634+
# ver:'OWASP_CRS/4.21.0',\
635635
# setvar:'tx.restricted_headers_basic=/content-encoding/ /proxy/ /lock-token/ /content-range/ /if/ /x-http-method-override/ /x-http-method/ /x-method-override/ /x-middleware-subrequest/ /expect/'"
636636
#
637637
# [ Extended ]
@@ -657,7 +657,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
657657
# t:none,\
658658
# nolog,\
659659
# tag:'OWASP_CRS',\
660-
# ver:'OWASP_CRS/4.21.0-dev',\
660+
# ver:'OWASP_CRS/4.21.0',\
661661
# setvar:'tx.restricted_headers_extended=/accept-charset/'"
662662

663663
# Content-Types charsets that a client is allowed to send in a request.
@@ -676,7 +676,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
676676
# t:none,\
677677
# nolog,\
678678
# tag:'OWASP_CRS',\
679-
# ver:'OWASP_CRS/4.21.0-dev',\
679+
# ver:'OWASP_CRS/4.21.0',\
680680
# setvar:'tx.allowed_request_content_type_charset=|utf-8| |iso-8859-1| |iso-8859-15| |windows-1252|'"
681681

682682
#
@@ -702,7 +702,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
702702
# t:none,\
703703
# nolog,\
704704
# tag:'OWASP_CRS',\
705-
# ver:'OWASP_CRS/4.21.0-dev',\
705+
# ver:'OWASP_CRS/4.21.0',\
706706
# setvar:tx.max_num_args=255"
707707

708708
# Block request if the length of any argument name is too high
@@ -716,7 +716,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
716716
# t:none,\
717717
# nolog,\
718718
# tag:'OWASP_CRS',\
719-
# ver:'OWASP_CRS/4.21.0-dev',\
719+
# ver:'OWASP_CRS/4.21.0',\
720720
# setvar:tx.arg_name_length=100"
721721

722722
# Block request if the length of any argument value is too high
@@ -730,7 +730,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
730730
# t:none,\
731731
# nolog,\
732732
# tag:'OWASP_CRS',\
733-
# ver:'OWASP_CRS/4.21.0-dev',\
733+
# ver:'OWASP_CRS/4.21.0',\
734734
# setvar:tx.arg_length=400"
735735

736736
# Block request if the total length of all combined arguments is too high
@@ -744,7 +744,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
744744
# t:none,\
745745
# nolog,\
746746
# tag:'OWASP_CRS',\
747-
# ver:'OWASP_CRS/4.21.0-dev',\
747+
# ver:'OWASP_CRS/4.21.0',\
748748
# setvar:tx.total_arg_length=64000"
749749

750750
# Block request if the file size of any individual uploaded file is too high
@@ -758,7 +758,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
758758
# t:none,\
759759
# nolog,\
760760
# tag:'OWASP_CRS',\
761-
# ver:'OWASP_CRS/4.21.0-dev',\
761+
# ver:'OWASP_CRS/4.21.0',\
762762
# setvar:tx.max_file_size=1048576"
763763

764764
# Block request if the total size of all combined uploaded files is too high
@@ -772,7 +772,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
772772
# t:none,\
773773
# nolog,\
774774
# tag:'OWASP_CRS',\
775-
# ver:'OWASP_CRS/4.21.0-dev',\
775+
# ver:'OWASP_CRS/4.21.0',\
776776
# setvar:tx.combined_file_sizes=1048576"
777777

778778

@@ -812,7 +812,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
812812
# pass,\
813813
# nolog,\
814814
# tag:'OWASP_CRS',\
815-
# ver:'OWASP_CRS/4.21.0-dev',\
815+
# ver:'OWASP_CRS/4.21.0',\
816816
# setvar:tx.sampling_percentage=100"
817817

818818

@@ -833,7 +833,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
833833
# t:none,\
834834
# nolog,\
835835
# tag:'OWASP_CRS',\
836-
# ver:'OWASP_CRS/4.21.0-dev',\
836+
# ver:'OWASP_CRS/4.21.0',\
837837
# setvar:tx.crs_validate_utf8_encoding=1"
838838

839839
# -- [[ Skip Checking Responses ]] ------------------------------------------------
@@ -855,7 +855,7 @@ SecDefaultAction "phase:2,log,auditlog,pass"
855855
# t:none,\
856856
# nolog,\
857857
# tag:'OWASP_CRS',\
858-
# ver:'OWASP_CRS/4.21.0-dev',\
858+
# ver:'OWASP_CRS/4.21.0',\
859859
# setvar:tx.crs_skip_response_analysis=1"
860860

861861
#
@@ -876,5 +876,5 @@ SecAction \
876876
t:none,\
877877
nolog,\
878878
tag:'OWASP_CRS',\
879-
ver:'OWASP_CRS/4.21.0-dev',\
879+
ver:'OWASP_CRS/4.21.0',\
880880
setvar:tx.crs_setup_version=4210"

rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ------------------------------------------------------------------------
2-
# OWASP CRS ver.4.21.0-dev
2+
# OWASP CRS ver.4.21.0
33
# Copyright (c) 2006-2020 Trustwave and contributors. All rights reserved.
44
# Copyright (c) 2021-2025 CRS project. All rights reserved.
55
#

0 commit comments

Comments
 (0)