Hi,
I've got false positive with 950901, because the regexp lacks word
boundary marks. I have prepared a little test suite for this (files
attached).

pcre.orig   - contains an original regexp of 950901
pcre        - contains a fixed regexp of 950901
data.*      - some test data

zito@bobek:~/pokusy/mod_security/bug-950901$ for x in *; do printf "%10s: %s\n" 
$x "$(cat $x)"; done
data.fail1: 
SID=875708633+FID=20+OP=DISPLAY_FORM+HTMPL=role_main.htmpl+prop.role_menubar=menubar_sd.htmpl
data.fail2: xxx1=1ffff
data.fail3: 1=1ffff
data.fail4: xxx1=1
   data.ok: foo yes=yes bar
      pcre: 
(?i:([\s'\"`´’‘\(\)]*?)\b([\d\w]++)([\s'\"`´’‘\(\)]*?)(?:(?:=|<=>|r?like|sounds\s+like|regexp)([\s'\"`´’‘\(\)]*?)\2\b|(?:!=|<=|>=|<>|<|>|\^|is\s+not|not\s+like|not\s+regexp)([\s'\"`´’‘\(\)]*?)(?!\2)([\d\w]+)\b))
 pcre.orig: 
(?i:([\s'\"`´’‘\(\)]*?)([\d\w]++)([\s'\"`´’‘\(\)]*?)(?:(?:=|<=>|r?like|sounds\s+like|regexp)([\s'\"`´’‘\(\)]*?)\2|(?:!=|<=|>=|<>|<|>|\^|is\s+not|not\s+like|not\s+regexp)([\s'\"`´’‘\(\)]*?)(?!\2)([\d\w]+)))

zito@bobek:~/pokusy/mod_security/bug-950901$ pcregrep --color -f pcre.orig 
data.*
data.fail1:SID=875708633+FID=20+OP=DISPLAY_FORM+HTMPL=role_main.htmpl+prop.role_menubar=menubar_sd.htmpl
data.fail2:xxx1=1ffff
data.fail3:1=1ffff
data.fail4:xxx1=1
data.ok:foo yes=yes bar

zito@bobek:~/pokusy/mod_security/bug-950901$ pcregrep --color -f pcre data.*
data.ok:foo yes=yes bar

My attempt to fix the problem on github and pull request:
https://github.com/SpiderLabs/owasp-modsecurity-crs/pull/48

Cheers
-- 
Zito

Attachment: bug-950901-tests.tar.bz2
Description: Binary data

_______________________________________________
Owasp-modsecurity-core-rule-set mailing list
Owasp-modsecurity-core-rule-set@lists.owasp.org
https://lists.owasp.org/mailman/listinfo/owasp-modsecurity-core-rule-set

Reply via email to