Skip to content

fix: reduce false positives from CVE-derived payload research#4573

Closed
zoutjebot wants to merge 1 commit into
coreruleset:mainfrom
zoutjebot:fp-reductions
Closed

fix: reduce false positives from CVE-derived payload research#4573
zoutjebot wants to merge 1 commit into
coreruleset:mainfrom
zoutjebot:fp-reductions

Conversation

@zoutjebot

Copy link
Copy Markdown
Contributor

Split from #4565 per @EsadCetiner's review request. This PR contains only false positive reductions.

Changes

Rule Change Impact
942550 Narrow JSON-SQL first branch to single-quote/backtick only Reduces FPs from cookie values and JSON payloads containing double-quotes
942290 Add \b word boundary after MongoDB operator names Prevents partial matches on legitimate values ending with operator-like suffixes
930120 Require path separator before .profile Prevents matching .profile as substring in URLs like /user.profileimage
932370 Remove url from Windows command list Eliminates FPs from GraphQL queries and JSON payloads containing 'url' key
933150 Remove is_int from high-risk PHP function list Cookie values containing is_int were triggering false positives
943110 Remove session_id/session-id from PL1 session fixation Too generic; matches legitimate query params and cookies across many frameworks
932260 Add trailing delimiter to base64/lastlog/lastlogin commands Prevents matching these as substrings (e.g., base64encoded, lastlogon)
932340 Remove single-char w from no-arguments list; remove { trigger Single-char w triggers on any URL containing 'w'; { triggers on JSON
932270 Require start-of-string/whitespace before tilde expansion Prevents matching tilde in the middle of values like param=abc~def
932330 Require non-alphanumeric before shell history !- pattern Prevents matching !- inside words
920420 Stop content-type extraction at comma Correctly handles multi-value content-type headers

Methodology

Automated CVE-derived payload testing: https://wafplanet.com/blog/autoresearch-crs-regex/

Test results

  • CRS CI quantitative tests: zero new false positives on the original PR
  • All regex changes properly ported to .ra files and regenerated via crs-toolchain
  • Regression test for 943110 updated to reflect removed session-id pattern

False positive reductions:
- fix(942550): narrow JSON-SQL first branch to single-quote/backtick only
- fix(942290): add word boundary after MongoDB operator names
- fix(930120): require path separator before .profile
- fix(932370): remove 'url' from Windows command list (GraphQL/JSON FPs)
- fix(933150): remove is_int from high-risk PHP function list (cookie FPs)
- fix(943110): remove generic session_id/session-id from PL1 session fixation
- fix(932260): add trailing delimiter to base64/lastlog/lastlogin commands
- fix(932340): remove single-char 'w' from no-arguments list, remove '{' trigger
- fix(932270): require start-of-string/whitespace before tilde expansion
- fix(932330): require non-alphanumeric before shell history !- pattern
- fix(920420): stop content-type extraction at comma (multi-value headers)

All regex changes ported to .ra files and regenerated via crs-toolchain.
Regression tests updated for changed rule behaviors.

Methodology: https://wafplanet.com/blog/autoresearch-crs-regex/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📊 Quantitative test results for language: eng, year: 2023, size: 10K, paranoia level: 1:
🚀 Quantitative testing did not detect new false positives

@HackingRepo

Copy link
Copy Markdown
Contributor

ok, good @zoutjebot

@fzipi

fzipi commented Mar 26, 2026

Copy link
Copy Markdown
Member

@zoutjebot Same here. Sorry, but smaller PRs will make easier review and approval. Can you create an issue and do one PR per line in your table? Thanks!

@HackingRepo

HackingRepo commented Mar 26, 2026

Copy link
Copy Markdown
Contributor

@zoutjebot, it still the same issue, Every fix must have it own pr, the fixes must be organized and clean, You need to split every change to a pr, But warning!! do'nt submit all 11 prs in the same day, Because it looks like spam

@zoutjebot

Copy link
Copy Markdown
Contributor Author

Superseded by individual PRs per maintainer feedback. See #4584 for tracking.

@zoutjebot zoutjebot closed this Mar 30, 2026
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.

3 participants