render / rpms / libvirt

Forked from rpms/libvirt 5 months ago
Clone
83e969
From 799c1b70cdcfffd313315e9ab31d96bbb836aed6 Mon Sep 17 00:00:00 2001
83e969
Message-Id: <799c1b70cdcfffd313315e9ab31d96bbb836aed6@dist-git>
83e969
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
83e969
Date: Tue, 18 Jun 2019 13:29:59 +0200
83e969
Subject: [PATCH] api: disallow virDomainSaveImageGetXMLDesc on read-only
83e969
 connections
83e969
MIME-Version: 1.0
83e969
Content-Type: text/plain; charset=UTF-8
83e969
Content-Transfer-Encoding: 8bit
83e969
83e969
The virDomainSaveImageGetXMLDesc API is taking a path parameter,
83e969
which can point to any path on the system. This file will then be
83e969
read and parsed by libvirtd running with root privileges.
83e969
83e969
Forbid it on read-only connections.
83e969
83e969
Fixes: CVE-2019-10161
83e969
Reported-by: Matthias Gerstner <mgerstner@suse.de>
83e969
Signed-off-by: Ján Tomko <jtomko@redhat.com>
83e969
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
83e969
Signed-off-by: Ján Tomko <jtomko@redhat.com>
83e969
83e969
Conflicts:
83e969
  src/libvirt-domain.c
83e969
  src/remote/remote_protocol.x
83e969
83e969
Upstream commit 12a51f372 which introduced the VIR_DOMAIN_SAVE_IMAGE_XML_SECURE
83e969
alias for VIR_DOMAIN_XML_SECURE is not backported.
83e969
Just skip the commit since we now disallow the whole API on read-only
83e969
connections, regardless of the flag.
83e969
Message-Id: <4c14d609cd7b548459b9ef2f59728fa5c5e38268.1560857354.git.jtomko@redhat.com>
83e969
83e969
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
83e969
---
83e969
 src/libvirt-domain.c         | 11 ++---------
83e969
 src/qemu/qemu_driver.c       |  2 +-
83e969
 src/remote/remote_protocol.x |  3 +--
83e969
 3 files changed, 4 insertions(+), 12 deletions(-)
83e969
83e969
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
83e969
index ad0ded9ee3..0ba85b9360 100644
83e969
--- a/src/libvirt-domain.c
83e969
+++ b/src/libvirt-domain.c
83e969
@@ -1073,9 +1073,7 @@ virDomainRestoreFlags(virConnectPtr conn, const char *from, const char *dxml,
83e969
  * previously by virDomainSave() or virDomainSaveFlags().
83e969
  *
83e969
  * No security-sensitive data will be included unless @flags contains
83e969
- * VIR_DOMAIN_XML_SECURE; this flag is rejected on read-only
83e969
- * connections.  For this API, @flags should not contain either
83e969
- * VIR_DOMAIN_XML_INACTIVE or VIR_DOMAIN_XML_UPDATE_CPU.
83e969
+ * VIR_DOMAIN_XML_SECURE.
83e969
  *
83e969
  * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of
83e969
  * error.  The caller must free() the returned value.
83e969
@@ -1091,12 +1089,7 @@ virDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *file,
83e969
 
83e969
     virCheckConnectReturn(conn, NULL);
83e969
     virCheckNonNullArgGoto(file, error);
83e969
-
83e969
-    if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
83e969
-        virReportError(VIR_ERR_OPERATION_DENIED, "%s",
83e969
-                       _("virDomainSaveImageGetXMLDesc with secure flag"));
83e969
-        goto error;
83e969
-    }
83e969
+    virCheckReadOnlyGoto(conn->flags, error);
83e969
 
83e969
     if (conn->driver->domainSaveImageGetXMLDesc) {
83e969
         char *ret;
83e969
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
83e969
index 21d836a540..fcccdb57c3 100644
83e969
--- a/src/qemu/qemu_driver.c
83e969
+++ b/src/qemu/qemu_driver.c
83e969
@@ -6784,7 +6784,7 @@ qemuDomainSaveImageGetXMLDesc(virConnectPtr conn, const char *path,
83e969
     if (fd < 0)
83e969
         goto cleanup;
83e969
 
83e969
-    if (virDomainSaveImageGetXMLDescEnsureACL(conn, def, flags) < 0)
83e969
+    if (virDomainSaveImageGetXMLDescEnsureACL(conn, def) < 0)
83e969
         goto cleanup;
83e969
 
83e969
     ret = qemuDomainDefFormatXML(driver, def, flags);
83e969
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
83e969
index 28c8febabd..52b92334fa 100644
83e969
--- a/src/remote/remote_protocol.x
83e969
+++ b/src/remote/remote_protocol.x
83e969
@@ -5226,8 +5226,7 @@ enum remote_procedure {
83e969
     /**
83e969
      * @generate: both
83e969
      * @priority: high
83e969
-     * @acl: domain:read
83e969
-     * @acl: domain:read_secure:VIR_DOMAIN_XML_SECURE
83e969
+     * @acl: domain:write
83e969
      */
83e969
     REMOTE_PROC_DOMAIN_SAVE_IMAGE_GET_XML_DESC = 235,
83e969
 
83e969
-- 
83e969
2.22.0
83e969