Unsound usages of `u8` type casting in spl-token-swap
Moderate severity
GitHub Reviewed
Published
Dec 23, 2024
to the GitHub Advisory Database
•
Updated Dec 23, 2024
Description
Published to the GitHub Advisory Database
Dec 23, 2024
Reviewed
Dec 23, 2024
Last updated
Dec 23, 2024
The library provides a safe public API
unpack
to castu8
array to arbitrary types, which can cause to undefined behaviors. The length check of array can only prevent out-of-bound access on the return type. However, it can't prevent misaligned pointer when castingu8
pointer to a type aligned to larger bytes. For example, if we assignu16
toT
, misaligned raw pointer dereference could happen and cause to panic. Even if we pass the type aligned to same byte asu8
(e.g.,bool
), it could construct a illegal type sincebool
can only have 0 or 1 as bit patterns, which is also an undefined behavior. The further exploits of the bug here are still not clear, so we would report this issue as unsound.The details of PoC to reproduce undefined behavior are provided in the issue.
References