Check mstp_len before dereferencing #617
Closed
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.
During STP processing, we have a special handler for
SPB(ShortestPath Bridging) which parses a part of the packet for that specific
protocol. To find the length of that part of the packet (
spb_len),it uses the
mstp_lenvariable to find where that value isstored. Since
mstp_lenis unpacked from the packet earlier, it is auser-controlled value and so, the pointer to
sbp_lencan also beuser-controlled.
We therefore need to check that we can extract it safely, using the
ND_TCHECK_16BITSmacro, as per Code style and generic remarks inthe
CONTRIBUTINGdocument. The pointer taken to extractmstp_lenitself is checked, but, oddly, even though the comments say
sbp_lenis validated as well, the macro call is missing.This fixes the symptoms described by CVE-2017-11108 in my tests, but
someone with e deeper knowledge of the code should review this to
confirm it is the correct solution.
Closes: #616