Skip to content
  • Ondrej Kozina's avatar
    Fix CVE-2021-4122 - LUKS2 reencryption crash recovery attack · 0113ac2d
    Ondrej Kozina authored and Milan Broz's avatar Milan Broz committed
    Fix possible attacks against data confidentiality through LUKS2 online
    reencryption extension crash recovery.
    
    An attacker can modify on-disk metadata to simulate decryption in
    progress with crashed (unfinished) reencryption step and persistently
    decrypt part of the LUKS device.
    
    This attack requires repeated physical access to the LUKS device but
    no knowledge of user passphrases.
    
    The decryption step is performed after a valid user activates
    the device with a correct passphrase and modified metadata.
    There are no visible warnings for the user that such recovery happened
    (except using the luksDump command). The attack can also be reversed
    afterward (simulating crashed encryption from a plaintext) with
    possible modification of revealed plaintext.
    
    The problem was caused by reusing a mechanism designed for actual
    reencryption operation without reassessing the security impact for new
    encryption and decryption operations. While the reencryption requires
    calculating and verifying both key digests, no digest was needed to
    initiate decryption recovery if the destination is plaintext (no
    encryption key). Also, some metadata (like encryption cipher) is not
    protected, and an attacker could change it. Note that LUKS2 protects
    visible metadata only when a random change occurs. It does not protect
    against intentional modification but such modification must not cause
    a violation of data confidentiality.
    
    The fix introduces additional digest protection of reencryption
    metadata. The digest is calculated from known keys and critical
    reencryption metadata. Now an attacker cannot create correct metadata
    digest without knowledge of a passphrase for used keyslots.
    For more details, see LUKS2 On-Disk Format Specification version 1.1.0.
    0113ac2d