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
unpackto castu8array 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 castingu8pointer to a type aligned to larger bytes. For example, if we assignu16toT, 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 sinceboolcan 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