security: fix SELinux label generation logic
A process can access a file if the set of MCS categories for the file is equal-to *or* a subset-of, the set of MCS categories for the process. If there are two VMs: a) svirt_t:s0:c117 b) svirt_t:s0:c117,c720 Then VM (b) is able to access files labelled for VM (a). IOW, we must discard case where the categories are equal because that is a subset of many other valid category pairs. Fixes: https://gitlab.com/libvirt/libvirt/-/issues/153 CVE-2021-3631 Reviewed-by: Peter Krempa <pkrempa@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
cada203f30
commit
5359856aaa
54
security-fix-SELinux-label-generation-logic.patch
Normal file
54
security-fix-SELinux-label-generation-logic.patch
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
From 7dd260dc2d8b8269488785d216972579aa234b3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||||
|
Date: Mon, 28 Jun 2021 13:09:04 +0100
|
||||||
|
Subject: [PATCH] security: fix SELinux label generation logic
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
A process can access a file if the set of MCS categories
|
||||||
|
for the file is equal-to *or* a subset-of, the set of
|
||||||
|
MCS categories for the process.
|
||||||
|
|
||||||
|
If there are two VMs:
|
||||||
|
|
||||||
|
a) svirt_t:s0:c117
|
||||||
|
b) svirt_t:s0:c117,c720
|
||||||
|
|
||||||
|
Then VM (b) is able to access files labelled for VM (a).
|
||||||
|
|
||||||
|
IOW, we must discard case where the categories are equal
|
||||||
|
because that is a subset of many other valid category pairs.
|
||||||
|
|
||||||
|
Fixes: https://gitlab.com/libvirt/libvirt/-/issues/153
|
||||||
|
CVE-2021-3631
|
||||||
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/security/security_selinux.c | 10 +++++++++-
|
||||||
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
|
||||||
|
index 72d1658e05..f1281b9cc0 100644
|
||||||
|
--- a/src/security/security_selinux.c
|
||||||
|
+++ b/src/security/security_selinux.c
|
||||||
|
@@ -391,7 +391,15 @@ virSecuritySELinuxMCSFind(virSecurityManagerPtr mgr,
|
||||||
|
VIR_DEBUG("Try cat %s:c%d,c%d", sens, c1 + catMin, c2 + catMin);
|
||||||
|
|
||||||
|
if (c1 == c2) {
|
||||||
|
- mcs = g_strdup_printf("%s:c%d", sens, catMin + c1);
|
||||||
|
+ /*
|
||||||
|
+ * A process can access a file if the set of MCS categories
|
||||||
|
+ * for the file is equal-to *or* a subset-of, the set of
|
||||||
|
+ * MCS categories for the process.
|
||||||
|
+ *
|
||||||
|
+ * IOW, we must discard case where the categories are equal
|
||||||
|
+ * because that is a subset of other category pairs.
|
||||||
|
+ */
|
||||||
|
+ continue;
|
||||||
|
} else {
|
||||||
|
if (c1 > c2) {
|
||||||
|
int t = c1;
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user