Skip to content

Commit 80146b2

Browse files
committed
Fixed: detect comma plus white space as a cookie separator
1 parent 48030ca commit 80146b2

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

apache2/modsecurity.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -403,11 +403,26 @@ apr_status_t modsecurity_tx_init(modsec_rec *msr) {
403403
if (strcasecmp(te[i].key, "Cookie") == 0) {
404404
if (msr->txcfg->cookie_format == COOKIES_V0) {
405405
_cookies = apr_pstrdup(msr->mp, te[i].val);
406-
while((*_cookies != 0)&&(*_cookies != ',')&&(*_cookies != ';')) _cookies++;
407-
if(*_cookies == ',')
408-
parse_cookies_v0(msr, te[i].val, msr->request_cookies, ",");
409-
else
406+
while((*_cookies != 0)&&(*_cookies != ';')) _cookies++;
407+
if(*_cookies == ';') {
410408
parse_cookies_v0(msr, te[i].val, msr->request_cookies, ";");
409+
} else {
410+
_cookies = apr_pstrdup(msr->mp, te[i].val);
411+
while((*_cookies != 0)&&(*_cookies != ',')) _cookies++;
412+
if(*_cookies == ',') {
413+
_cookies++;
414+
if(*_cookies == 0x20) {// looks like comma is the separator
415+
if (msr->txcfg->debuglog_level >= 5) {
416+
msr_log(msr, 5, "Cookie v0 parser: Using comma as a separator. Semi-colon was not identified!");
417+
}
418+
parse_cookies_v0(msr, te[i].val, msr->request_cookies, ",");
419+
} else {
420+
parse_cookies_v0(msr, te[i].val, msr->request_cookies, ";");
421+
}
422+
} else {
423+
parse_cookies_v0(msr, te[i].val, msr->request_cookies, ";");
424+
}
425+
}
411426
} else {
412427
parse_cookies_v1(msr, te[i].val, msr->request_cookies);
413428
}

0 commit comments

Comments
 (0)