fix: response splitting rules and tests #4009
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Response splitting can be achieved by injecting carriage return / new line characters at various places (headers, GET / POST arguments, cookies...). Some web servers or applications may be vulnerable to encoded injections (especially in URL paths), hence we explicitly decode URL encoding, where necessary.
httpd and nginx are not vulnerable to header splitting and will respond with status 400.
HTML entity decoding does not make sense in this context. No web server should ever decode HTML as part of the HTTP protocol. It is unclear why the original authors used
t:htmlEntityDecode
in some places, but at least in one test, a query argument separator (&
) precedes a%0d
, which leads to successful decoding of the escape sequence as HTML entity. This may explain an accidental use oft:htmlEntityDecode
.Fixes #3824