A total of five vulnerabilities that could lead to local privilege escalation were recently identified and fixed in the Linux kernel.
Identified by Positive Technologies security researcher Alexander Popov, the high severity bugs resided in the virtual socket implementation of the Linux kernel.
Tracked as CVE-2021-26708 and featuring a CVSS score of 7.0, the security holes were introduced in Linux kernel version 5.5 in November 2019.
The vulnerabilities are the result of race conditions that were added with virtual socket (VSOCK) multi-transport support, with all major GNU/Linux distributions impacted, as the vulnerable kernel drivers (CONFIG_VSOCKETS and CONFIG_VIRTIO_VSOCKETS) are shipped to all of them, as kernel modules.
Upon the creation of an AF_VSOCK socket, the vulnerable modules are automatically loaded, Positive Technologies explains. The bugs can be abused by unprivileged users.
The issues, Popov says, are race conditions rooted in wrong locking in net/vmw_vsock/af_vsock.c.
The bug exists because the vsock_sock.transport pointer is copied to a local variable that is used after lock_sock() is called. However, the vsock_sock.transport value may change before lock_sock() is called, thus causing the race condition.
The suggested fix involves copying the vsock_sock.transport pointer to the local value after lock_sock() has been called.
“I successfully developed a prototype exploit for local privilege escalation on Fedora 33 Server, bypassing x86_64 platform protections such as SMEP and SMAP. This research will lead to new ideas on how to improve Linux kernel security,” Popov commented.
In addition to identifying the vulnerabilities, the security researcher prepared a patch and sent it to the Linux kernel security team. The fix was merged into mainline kernel version 5.11-rc7 and also got backported into affected stable trees.