RUSTSEC-2020-0161

    Dashboard / Vulnerabilities / RUSTSEC-2020-0161

    RUSTSEC-2020-0161

    Published: 7 May 2020Last Modified: 8 Nov 2023

    Summary: `array!` macro is unsound in presence of traits that implement methods it calls internally

    Details: Affected versions of this crate called some methods using auto-ref. The affected code looked like this. ```rust let mut arr = $crate::__core::mem::MaybeUninit::uninit(); let mut vec = $crate::__ArrayVec::<T>::new(arr.as_mut_ptr() as *mut T); ``` In this case, the problem is that `as_mut_ptr` is a method of `&mut MaybeUninit`, not `MaybeUninit`. This made it possible for traits to hijack the method calls in order to cause unsoundness. ```rust trait AsMutPtr<T> { fn as_mut_ptr(&self) -> *mut T; } impl<T> AsMutPtr<T> for std::mem::MaybeUninit<T> { fn as_mut_ptr(&self) -> *mut T { std::ptr::null_mut() } } array![0; 1]; ``` The flaw was corrected by explicitly referencing variables in macro body in order to avoid auto-ref.

    Affected packages

    Package

    Name: array-macro

    Purl: pkg:cargo/array-macro

    Affected ranges

    Type: SEMVER

    Events:

    Introduced- 0.1.2
    Fixed -1.0.5

    Affected versions

    Common Vulnerability Scoring System

    Attack Vector
    Network
    Adjacent
    Local
    Physical
    Privileges Required
    None
    Low
    High
    User Interaction
    None
    Required
    Scope
    Unchanged
    Changed
    Confidentiality
    None
    Low
    High
    Integrity
    None
    Low
    High
    Availability
    None
    Low
    High
    RUSTSEC-2020-0161 | CVE-DB