Fix heap overflow in set_browser_os() #2592
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.
I found this heap-buffer-overflow issue when debugging with ASAN (
-fsanitize=address
). And here is the proposed solution.Problematic Code
Access Log PoC
Reason
Since the User-Agent resolved to
browser_type="Edge"
, it only have 4+1 bytes length. Whenmemcmp()
for 8 bytes, it will touch the improper memory.Proposed Solution 1: Use
strncmp
insteadI think using
strncmp
instead ofmemcmp
is the most intuitive way to avoid this problem.The string length should be 8 char + null = 9 bytes.
Proposed Solution 2: Compare to local variable instead
If we prefer
memcmp
(not sure about performance between two function), we can use the local variablebrowser_type
instead oflogitem->browser_type
.We can change to solution 2 (with or without comments) if you preferred.