Skip to content

blog: crs migration part 5#505

Merged
fzipi merged 11 commits intomainfrom
blog/crs-migration-part-5
Apr 26, 2026
Merged

blog: crs migration part 5#505
fzipi merged 11 commits intomainfrom
blog/crs-migration-part-5

Conversation

@fzipi
Copy link
Copy Markdown
Member

@fzipi fzipi commented Apr 22, 2026

Summary by CodeRabbit

  • Documentation
    • Added Part 5 of the migration guide detailing rule-level changes from CRS 3.3 → CRS 4.25 LTS: new response-phase web-shell detections, HTTP/3 enabled by default and HTTP/0.9 effectively blocked, header restriction tiers, regex engine compatibility changes, and a three-step audit workflow to review and validate excluded rules before enabling blocking.

fzipi and others added 6 commits March 31, 2026 09:10
Covers new web shell detection rules, HTTP/3 support, HTTP/0.9
removal, restructured restricted headers (basic/extended), RE2/Hyperscan
compatibility, and a 3-step methodology for auditing existing exclusions
against the CRS 4 rule set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sets refLinksErrorLevel=WARNING so cross-post ref links don't break
the build when sibling posts don't yet exist on the same branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The author is already shown from the front matter. Adds the
related-pages shortcode to cross-link migration series posts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Web shell detection is in the 955xxx range (RESPONSE-955-WEB-SHELLS.conf),
  not 950xxx
- Rewrite the HTTP/0.9 section: the protocol enforcement mechanism and
  the default allowed list are identical in CRS 3 and CRS 4, so no new
  rule blocks HTTP/0.9. The actual change is narrower — rule 921110
  (response-splitting detection) dropped its HTTP/0.9 carve-out per PR #1966
- Complete the basic restricted headers list with proxy, lock-token,
  content-range, and if, matching the default tx.restricted_headers_basic
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Apr 22, 2026

Deploying website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 272ec15
Status: ✅  Deploy successful!
Preview URL: https://5fd2e179.website-1u6.pages.dev
Branch Preview URL: https://blog-crs-migration-part-5.website-1u6.pages.dev

View logs

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds the next entry in the CRS 3→4 migration blog series, along with its header image, and tweaks Hugo’s internal-ref error handling to accommodate missing references during publication staging.

Changes:

  • Add Part 5 post: “Rule Changes” (new content page + hero image).
  • Add Part 1 post: “Overview” (new content page).
  • Update Hugo config to downgrade missing ref/relref targets from errors to warnings.

Reviewed changes

Copilot reviewed 1 out of 2 changed files in this pull request and generated 1 comment.

File Description
static/images/2026/04/pexels-egorkomarov-8824026.jpg Adds the hero image used by the new post.
content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md New Part 5 article content and internal navigation refs.
content/blog/2026-03-30-migrating-from-crs-3-to-crs-4-part-1-overview.md New Part 1 article content and internal navigation refs.
config/_default/hugo.yaml Changes Hugo behavior for missing internal ref targets (ERROR → WARNING).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Felipe Zipitria <felipe.zipitria@owasp.org>
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
Co-authored-by: Max Leske <250711+theseion@users.noreply.github.com>
@fzipi fzipi requested a review from theseion April 26, 2026 12:59
Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 26, 2026

📝 Walkthrough

Walkthrough

Documents rule-level changes when migrating from CRS 3.3 to CRS 4.25 LTS: new/removed/renumbered rules, response-phase web‑shell detections, default HTTP version adjustments, header restriction tiers, regex engine compatibility shifts, and an exclusion-auditing workflow.

Changes

Cohort / File(s) Summary
CRS Migration Blog Post
content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md
Adds a new migration article detailing rule-level differences between CRS 3.3 and 4.25 LTS: new response-phase web‑shell rule set (RESPONSE-955-WEB-SHELLS.conf), HTTP/3/HTTP/3.0 added to allowed versions, tightened request-line validation blocking HTTP/0.9, header blocking split into basic vs extended tiers, shift from PCRE-only to RE2/Hyperscan-compatible regex patterns, and a three-step exclusion auditing process referencing CHANGES.md.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

Poem

🐰 I hopped through lines of rules tonight,

Found web‑shell guards and headers tight,
HTTP versions set just right,
Regex tuned for faster flight,
Exclusions checked beneath moonlight 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'blog: crs migration part 5' directly and specifically describes the changeset, which adds the fifth article in a CRS migration series documenting rule-level changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch blog/crs-migration-part-5

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md (1)

31-31: Use version-pinned CHANGES.md links to prevent doc drift.

At Line 31, Line 61, and Line 110, linking to .../blob/main/CHANGES.md can silently change over time and make migration guidance inconsistent with the stated CRS baseline. Prefer linking to a release tag/commit-specific CHANGES.md.

Proposed doc-link hardening
-The authoritative source for all of these changes is the [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/main/CHANGES.md) in the CRS 4.0 release.
+The authoritative source for all of these changes is the [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/v4.0/CHANGES.md) in the CRS 4.0 release.
-See the "drop HTTP/0.9 support" change in [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/main/CHANGES.md) (PR `#1966`).
+See the "drop HTTP/0.9 support" change in [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/v4.0/CHANGES.md) (PR `#1966`).
-For each rule ID you found in Step 1, search for it in [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/main/CHANGES.md).
+For each rule ID you found in Step 1, search for it in [CHANGES.md](https://github.com/coreruleset/coreruleset/blob/v4.0/CHANGES.md).

Also applies to: 61-61, 110-110

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md`
at line 31, Replace the unstable ".../blob/main/CHANGES.md" links found at the
referenced lines (31, 61, 110) with release-tagged or commit-specific URLs
(e.g., ".../blob/v4.0.0/CHANGES.md" or a commit SHA) so the CHANGES.md
referenced is pinned to the CRS 4.0 release; update each markdown link
occurrence of ".../blob/main/CHANGES.md" accordingly to a tag/commit-specific
path to prevent doc drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md`:
- Line 62: Fix the extra double-space typo in the user-facing sentence
describing CRS 4.25.1 and rule `920100`: locate the paragraph mentioning "CRS
4.25.1 (first quarterly LTS backport, scheduled) — request-line validation (rule
`920100`)" and change "requests  will trigger" to "requests will trigger"
(remove the extra space) so the sentence reads correctly.

---

Nitpick comments:
In
`@content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md`:
- Line 31: Replace the unstable ".../blob/main/CHANGES.md" links found at the
referenced lines (31, 61, 110) with release-tagged or commit-specific URLs
(e.g., ".../blob/v4.0.0/CHANGES.md" or a commit SHA) so the CHANGES.md
referenced is pinned to the CRS 4.0 release; update each markdown link
occurrence of ".../blob/main/CHANGES.md" accordingly to a tag/commit-specific
path to prevent doc drift.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 92d2cf07-8939-48a8-bb52-668366f978a5

📥 Commits

Reviewing files that changed from the base of the PR and between 7d41310 and bde003c.

⛔ Files ignored due to path filters (1)
  • static/images/2026/04/pexels-egorkomarov-8824026.jpg is excluded by !**/*.jpg
📒 Files selected for processing (1)
  • content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md

Comment thread content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md Outdated
…ule-changes.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md`:
- Line 31: Update the CHANGES.md link so it points to a stable release tag or
LTS branch instead of main: replace the current
"[CHANGES.md](https://github.com/coreruleset/coreruleset/blob/main/CHANGES.md)"
URL with a versioned URL like
"https://github.com/coreruleset/coreruleset/blob/v4.25.0/CHANGES.md" or an LTS
branch URL like
"https://github.com/coreruleset/coreruleset/blob/lts/v4.25.x/CHANGES.md"; apply
the same change to the other occurrence mentioned (around line 110) so all
CHANGES.md references use a pinned tag or LTS branch.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 74cc7a98-0b94-4b10-8787-d5333930a948

📥 Commits

Reviewing files that changed from the base of the PR and between bde003c and 272ec15.

📒 Files selected for processing (1)
  • content/blog/2026-04-27-migrating-from-crs-3-to-crs-4-part-5-rule-changes.md

@fzipi fzipi merged commit 1bbaae1 into main Apr 26, 2026
3 checks passed
@fzipi fzipi deleted the blog/crs-migration-part-5 branch April 26, 2026 19:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants