ejmahler/transpose · Security
transpose: Buffer overflow due to integer overflow
- GHSA ID
- GHSA-5gmm-6m36-r7jh
- CVE ID
- CVE-2023-53156
- Severity
- medium
- Published
- Updated
- CVSS
- 4.5 · CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:N/I:L/A:L
- CVSS v3
- 4.5 · CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:N/I:L/A:L
Description
Given the function transpose::transpose:
fn transpose<T: Copy>(input: &[T], output: &mut [T], input_width: usize, input_height: usize)
The safety check input_width * input_height == output.len() can fail due to input_width * input_height overflowing in such a way that it equals output.len().
As a result of failing the safety check, memory past the end of output is written to. This only occurs in release mode since * panics on overflow in debug mode.
Exploiting this issue requires the caller to pass input_width and input_height arguments such that multiplying them overflows, and the overflown result equals the lengths of input and output slices.
CWEs
- CWE-120 · Buffer Copy without Checking Size of Input ('Classic Buffer Overflow')
- CWE-190 · Integer Overflow or Wraparound