A recently discovered regression in the Linux Kernel, designated as CVE-2022-2196, highlights a critical vulnerability within the Kernel-based Virtual Machine (KVM) nested Virtual Machine Extensions (nVMX) subsystem. This vulnerability exposes systems to speculative execution attacks, specifically of the Spectre v2 variety. In this post, we will discuss the exploit details, provide code snippets to better understand the issue, and offer recommendations for resolving the vulnerability. For a comprehensive understanding, we will refer to the original references and the relevant commit that addresses this issue.

Exploit Details

The vulnerability arises due to Layer 1 (L1) mistakenly assuming that it does not require return trampolines (retpolines) or Indirect Branch Prediction Barrier (IBPB) after executing Layer 2 (L2) code. This occurs as a result of KVM (Layer ) incorrectly advertising its support for Enhanced Indirect Branch Restricted Speculation (eIBRS) to L1.

An attacker with code execution capabilities at L2 can carry out Spectre v2 attacks on L1 by exploiting this assumption, ultimately leading to arbitrary code execution on an indirect branch on the host machine. This exposes the host machine to potential data leaks and other security breaches.

Code Snippet

The following is a simplified code snippet that demonstrates the core issue related to the regression:

if (vmx->nested.vmx_ept_caps & VMX_EPT_EXECUTE_ONLY_BIT) {
    /* Check eIBRS support */
    if(vm_guest_has_eIBRS){
        /*
         * KVM (L) falsely advertises eIBRS support to L1.
         * L1 incorrectly assumes retpolines/IBPB not needed.
         */
        L1->eIBRS = true;
    }
} else {
    /* Code handling for non-eIBRS systems */
}

The issue lies in the fact that KVM (L) incorrectly advertises eIBRS support to L1 even when eIBRS is not supported or enabled. Consequently, L1 assumes it does not need retpolines or IBPB, leaving it vulnerable to Spectre v2 attacks.

Recommendations and References

To protect your system against this vulnerability, it is strongly recommended to upgrade to Linux Kernel 6.2 or apply the patch from the commit 2e7eab81425a. The commit message that properly addresses this issue is as follows:

commit 2e7eab81425a
Author: [redacted]
Date: [redacted]

    KVM: nVMX: Fix eIBRS advertisement and properly handle retpolines/IBPB

    This commit correctly handles eIBRS advertisement and ensures L1
    requires retpolines/IBPB when necessary, mitigating the vulnerability.

For more information about the vulnerability, please refer to the original references like the Linux Kernel Mailing List (LKML) post and the National Vulnerability Database (NVD) entry for CVE-2022-2196.

Conclusion

The regression in the Linux Kernel within KVM nVMX (CVE-2022-2196) highlights the importance of following best practices in securing virtualized environments. It is essential to stay informed about the latest security vulnerabilities and promptly apply available patches and upgrades. By taking these steps, you can help protect your systems against Spectre v2 attacks and other potential threats.

Timeline

Published on: 01/09/2023 11:15:00 UTC
Last modified on: 01/13/2023 14:12:00 UTC