70 lines
3.1 KiB
Diff
70 lines
3.1 KiB
Diff
From ae1bd20a2d4d7b7d64edc3b06d7f901c05175b7d Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Mon, 20 Dec 2021 17:05:44 +0000
|
|
Subject: [PATCH] only use X509Data
|
|
|
|
Change-Id: I52e6588f5fac04bb26d77c1f3af470db73e41f72
|
|
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127193
|
|
Tested-by: Jenkins
|
|
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
|
|
(cherry picked from commit be446d81e07b5499152efeca6ca23034e51ea5ff)
|
|
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127178
|
|
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
|
|
(cherry picked from commit b0404f80577de9ff69e58390c6f6ef949fdb0139)
|
|
---
|
|
.../source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx | 6 ++++++
|
|
xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx | 6 ++++++
|
|
2 files changed, 12 insertions(+)
|
|
|
|
diff --git a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
|
|
index db400e6..39f9d7f 100644
|
|
--- a/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
|
|
+++ b/xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx
|
|
@@ -21,6 +21,8 @@
|
|
#include <sal/log.hxx>
|
|
#include <rtl/uuid.h>
|
|
|
|
+#include <xmlsec/mscng/x509.h>
|
|
+
|
|
#include <com/sun/star/xml/crypto/SecurityOperationStatus.hpp>
|
|
#include <com/sun/star/xml/crypto/XXMLSignature.hpp>
|
|
|
|
@@ -229,6 +231,10 @@ SAL_CALL XMLSignature_MSCryptImpl::validate(
|
|
// We do certificate verification ourselves.
|
|
pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS;
|
|
|
|
+ // limit possible key data to valid X509 certificates only, no KeyValues
|
|
+ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecMSCngKeyDataX509GetKlass()) < 0)
|
|
+ throw RuntimeException("failed to limit allowed key data");
|
|
+
|
|
//Verify signature
|
|
//The documentation says that the signature is only valid if the return value is 0 (that is, not < 0)
|
|
//AND pDsigCtx->status == xmlSecDSigStatusSucceeded. That is, we must not make any assumptions, if
|
|
diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
|
|
index 827580b..8f4d6f8 100644
|
|
--- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
|
|
+++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
|
|
@@ -19,6 +19,8 @@
|
|
|
|
#include <sal/config.h>
|
|
|
|
+#include <xmlsec/nss/x509.h>
|
|
+
|
|
#include <xmlelementwrapper_xmlsecimpl.hxx>
|
|
#include <xmlsec/xmlstreamio.hxx>
|
|
#include <xmlsec/errorcallback.hxx>
|
|
@@ -243,6 +245,10 @@ SAL_CALL XMLSignature_NssImpl::validate(
|
|
// We do certificate verification ourselves.
|
|
pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS;
|
|
|
|
+ // limit possible key data to valid X509 certificates only, no KeyValues
|
|
+ if (xmlSecPtrListAdd(&(pDsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecNssKeyDataX509GetKlass()) < 0)
|
|
+ throw RuntimeException("failed to limit allowed key data");
|
|
+
|
|
//Verify signature
|
|
int rs = xmlSecDSigCtxVerify( pDsigCtx.get() , pNode );
|
|
|
|
--
|
|
2.33.1
|
|
|