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.
Contribution description
The TinyCBOR library takes a
size_t *
length argument in many functions which at function call contains the length of a buffer, and at exit the actual size of the data. The FIDO-2 code however usesuint8_t
fields instruct
s to store the data. Previously, a pointer to thatuint8_t
filed was just casted tosize_t *
, resulting in three neighboring bytes also being interpreted as being part of the buffer size - which could result in undetected buffer overflows. Similar, upon exit of the function not only theuint8_t
sized lengthstruct
member but also three neighboring bytes were written to.I didn't care to investigate, but this really looks like crafted CBOR payloads send to the FIDO2 implementation could result in arbitrary code execution on the device.
Testing procedure
Normal operation should still work.
Issues/PRs references
Detected by #14955