mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
livepatch: Declare live patching as a supported feature
See docs/features/livepatch.pandoc for the details. Reviewed-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
14e3695f9e
commit
33f2d16690
2 files changed
+108
-2
No files matched your search
@@ -0,0 +1,106 @@
|
|||||||
|
% Live Patching
|
||||||
|
% Revision 1
|
||||||
|
|
||||||
|
\clearpage
|
||||||
|
|
||||||
|
# Basics
|
||||||
|
|
||||||
|
---------------- ----------------------------------------------------
|
||||||
|
Status: **Supported**
|
||||||
|
|
||||||
|
Architecture: x86
|
||||||
|
|
||||||
|
Status: **Tech Preview/Experimental**
|
||||||
|
|
||||||
|
Architecture: ARM
|
||||||
|
|
||||||
|
Component: Hypervisor, toolstack
|
||||||
|
---------------- ----------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Details
|
||||||
|
|
||||||
|
Xen Live Patching has been available as tech preview feature since Xen
|
||||||
|
4.7 and has now had a couple of releases to stabilize. Xen Live patching
|
||||||
|
has been used by multiple vendors to fix several real-world security
|
||||||
|
issues without any severe bugs encountered. Additionally, there are now
|
||||||
|
tests in OSSTest that test live patching to ensure that no regressions
|
||||||
|
are introduced.
|
||||||
|
|
||||||
|
Based on the amount of testing and usage it has had, we are ready to
|
||||||
|
declare live patching as a 'Supported' feature on x86.
|
||||||
|
|
||||||
|
Live patching is slightly peculiar when it comes to support because it
|
||||||
|
allows the host administrator to break their system rather easily
|
||||||
|
depending on the content of the live patch. Because of this, it is
|
||||||
|
worth detailing the scope of security support:
|
||||||
|
|
||||||
|
1) Unprivileged access to live patching operations:
|
||||||
|
Live patching operations should only be accessible to privileged
|
||||||
|
guests and it shall be treated as a security issue if this is not
|
||||||
|
the case.
|
||||||
|
|
||||||
|
2) Bugs in the patch-application code such that vulnerabilities exist
|
||||||
|
after application:
|
||||||
|
If a correct live patch is loaded but it is not applied correctly
|
||||||
|
such that it might result in an insecure system (e.g. not all
|
||||||
|
functions are patched), it shall be treated as a security issue.
|
||||||
|
|
||||||
|
3) Bugs in livepatch-build-tools creating an incorrect live patch that
|
||||||
|
results in an insecure host:
|
||||||
|
If livepatch-build-tools creates an incorrect live patch that
|
||||||
|
results in an insecure host, this shall not be considered a security
|
||||||
|
issue. A live patch should be checked to verify that it is valid
|
||||||
|
before loading.
|
||||||
|
|
||||||
|
4) Loading an incorrect live patch that results in an insecure host or
|
||||||
|
host crash:
|
||||||
|
If a live patch (whether created using livepatch-build-tools or some
|
||||||
|
alternative) is loaded and it results in an insecure host or host
|
||||||
|
crash due to the content of the live patch being incorrect or the
|
||||||
|
issue being inappropriate to live patch, this is not considered as a
|
||||||
|
security issue.
|
||||||
|
|
||||||
|
5) Bugs in the live patch parsing code (the ELF loader):
|
||||||
|
Bugs in the live patch parsing code such as out-of-bounds reads
|
||||||
|
caused by invalid ELF files are not considered to be security issues
|
||||||
|
because the it can only be triggered by a privileged domain.
|
||||||
|
|
||||||
|
6) Bugs which allow a guest to prevent the application of a livepatch:
|
||||||
|
A guest should not be able to prevent the application of a live
|
||||||
|
patch. If an unprivileged guest can somehow prevent the application
|
||||||
|
of a live patch despite pausing it (xl pause ...), it shall be
|
||||||
|
treated as a security issue.
|
||||||
|
|
||||||
|
Note: It is expected that live patches are tested in a test environment
|
||||||
|
before being used in production to avoid unexpected issues. In
|
||||||
|
particular, to avoid the issues described by (3), (4), & (5).
|
||||||
|
|
||||||
|
There are also some generic security questions which are worth asking:
|
||||||
|
|
||||||
|
1) Is guest->host privilege escalation possible?
|
||||||
|
|
||||||
|
The new live patching sysctl subops are only accessible to privileged
|
||||||
|
domains and this is tested by OSSTest with an XTF test.
|
||||||
|
There is a caveat -- an incorrect live patch can introduce a guest->host
|
||||||
|
privilege escalation.
|
||||||
|
|
||||||
|
2) Is guest user->guest kernel escalation possible?
|
||||||
|
|
||||||
|
No, although an incorrect live patch can introduce a guest user->guest
|
||||||
|
kernel privilege escalation.
|
||||||
|
|
||||||
|
3) Is there any information leakage?
|
||||||
|
|
||||||
|
The new live patching sysctl subops are only accessible to privileged
|
||||||
|
domains so it is not possible for an unprivileged guest to access the
|
||||||
|
list of loaded live patches. This is tested by OSSTest with an XTF test.
|
||||||
|
There is a caveat -- an incorrect live patch can introduce an
|
||||||
|
information leakage.
|
||||||
|
|
||||||
|
4) Can a Denial-of-Service be triggered?
|
||||||
|
|
||||||
|
There are no known ways that an unprivileged guest can prevent a live
|
||||||
|
patch from being loaded.
|
||||||
|
Once again, there is a caveat that an incorrect live patch can introduce
|
||||||
|
an arbitrary denial of service.
|
||||||
+2
-2
@@ -226,8 +226,8 @@ config CRYPTO
|
|||||||
bool
|
bool
|
||||||
|
|
||||||
config LIVEPATCH
|
config LIVEPATCH
|
||||||
bool "Live patching support (TECH PREVIEW)"
|
bool "Live patching support"
|
||||||
default n
|
default X86
|
||||||
depends on HAS_BUILD_ID = "y"
|
depends on HAS_BUILD_ID = "y"
|
||||||
---help---
|
---help---
|
||||||
Allows a running Xen hypervisor to be dynamically patched using
|
Allows a running Xen hypervisor to be dynamically patched using
|
||||||
|
|||||||