[OSSA 2014-003] Live migration can leak root disk into ephemeral storage (CVE-2013-7130)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Compute (nova) |
Fix Released
|
High
|
Nikola Đipanov | ||
Grizzly |
Fix Released
|
High
|
Nikola Đipanov | ||
Havana |
Fix Released
|
High
|
Nikola Đipanov | ||
OpenStack Security Advisory |
Fix Released
|
High
|
Grant Murphy |
Bug Description
During pre-live-migration required disks are created along with their backing files (if they don't already exist). However, the ephemeral backing file is created from a glance downloaded root disk.
# If the required ephemeral backing file is present then there's no issue.
# If the required ephemeral backing file is not already present, then the root disk is downloaded and saved as the ephemeral backing file. This will result in the following situations:
## The disk.local transferred during live-migration will be rebased on the ephemeral backing file so regardless of the content, the end result will be identical to the source disk.local.
## However, if a new instance of the same flavor is spawned on this compute node, then it will have an ephemeral storage that exposes a root disk.
Security concerns:
If the migrated VM was spawned off a snapshot, now it's possible for any instances of the correct flavor to see the snapshot contents of another user via the ephemeral storage.
CVE References
description: | updated |
description: | updated |
description: | updated |
Changed in nova: | |
status: | New → Confirmed |
Changed in ossa: | |
assignee: | nobody → Grant Murphy (gmurphy) |
Changed in nova: | |
status: | Confirmed → In Progress |
importance: | Undecided → High |
Changed in ossa: | |
status: | Triaged → In Progress |
summary: |
- Live migration can leak root disk into ephemeral storage + Live migration can leak root disk into ephemeral storage (CVE-2013-7130) |
Changed in nova: | |
milestone: | none → next |
milestone: | next → icehouse-3 |
milestone: | icehouse-3 → none |
Changed in ossa: | |
status: | In Progress → Fix Committed |
information type: | Private Security → Public Security |
summary: |
- Live migration can leak root disk into ephemeral storage (CVE-2013-7130) + [OSSA 2014-003] Live migration can leak root disk into ephemeral storage + (CVE-2013-7130) |
Changed in nova: | |
assignee: | nobody → Nikola Đipanov (ndipanov) |
Changed in ossa: | |
status: | Fix Committed → Fix Released |
Changed in nova: | |
milestone: | none → icehouse-3 |
Changed in nova: | |
status: | Fix Committed → Fix Released |
Changed in nova: | |
milestone: | icehouse-3 → 2014.1 |
One possible solution that seems to work:
diff --git a/nova/ virt/libvirt/ driver. py b/nova/ virt/libvirt/ driver. py virt/libvirt/ driver. py virt/libvirt/ driver. py driver. ComputeDriver) :
image = self.image_ backend. image(instance,
instance_ disk,
CONF.libvirt_ images_ type) fetch_func= libvirt_ utils.fetch_ image, cache_name, instance[ 'image_ ref'], instance[ 'user_id' ], id=instance[ 'project_ id'], 'virt_disk_ size']) startswith( 'ephemeral' ): fetch_func= self._create_ ephemeral, 'ephemeral0' , instance[ "os_type" ], cache_name, 'virt_disk_ size'], size=instance[ 'ephemeral_ gb']) fetch_func= libvirt_ utils.fetch_ image, cache_name, instance[ 'image_ ref'], instance[ 'user_id' ], id=instance[ 'project_ id'], 'virt_disk_ size'])
index bb3c312..68f68e6 100644
--- a/nova/
+++ b/nova/
@@ -4290,13 +4290,22 @@ class LibvirtDriver(
- image.cache(
- context=context,
- filename=
- image_id=
- user_id=
- project_
- size=info[
+
+ if cache_name.
+ image.cache(
+ fs_label=
+ os_type=
+ filename=
+ size=info[
+ ephemeral_
+ else:
+ image.cache(
+ context=context,
+ filename=
+ image_id=
+ user_id=
+ project_
+ size=info[