owasp-modsecurity / owasp-modsecurity/ModSecurity
base64Decode behaviour against payload which contain + and /
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 9.8k
- Forks
- 1.8k
- Avg merge
- 2h 46m
- Merged PRs (30d)
- 1
Description
Hello,
It might be impossible, but if someone has some time to spare, your help would be greatly appreciated.
We are currently working with the following payload:
PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRQoKd2JsUXRnTFJZCQkJCVsgPCFFTEVNRU5UIHdibFF0Z0xSWSBBTlk+PCFFTlRJVFkKDQoNCg0lCg1GcXhaWUxQIFNZU1RFTQoNCg0KDQoNCg0iZmlsZTovLzBwMEdUbTk0M0lCMjhyTiI+ICVGcXhaWUxQOyAlRVVBaGFYSFk7IF0+PHdibFF0Z0xSWT4mcEtCcGJXbDs8L3dibFF0Z0xSWT4=
This is a random XXE payload encoded in Base64. Note the presence of / and + characters in the payload.
The issue arises when mod_security2 on Apache2 processes it during phase 2. At this stage, the + characters are automatically converted into spaces, which corrupts the Base64 sequence and causes the base64Decode transformation to fail.
We cannot apply transformations like t:urlEncode, as they would encode the / and = characters, further corrupting the Base64 sequence.
Do you have any suggestions on how to properly handle this without resorting to a custom exec solution (as described in the ModSecurity reference manual)?
Please, do not reply by telling us that handling high-entropy payloads is a bottomless pit—we know. There might be no solution and it's okay.
Thank you
Vincent
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the base64Decode transformation during Apache2/mod_security2 phase 2, focusing on how + is treated after request processing. Check the behavior against the supplied Base64 payload and determine whether the issue can be addressed without t:urlEncode or custom exec; done means a reproducible resolution or documented limitation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- apache, cpp
- Domain
- security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100