Ankur Tyagi authored and Anuj Mittal committed 2026-10-06 09:50:50 +05:30
1 parent d831ff4ac9
commit dd3053a1a3
2 files changed
+76

No files matched your search

@@ -0,0 +1,75 @@
From d8144c609148eda1ca55eac2ecddcd81bbd799b5 Mon Sep 17 00:00:00 2001
From: Tobias Brunner <tobias@strongswan.org>
Date: Wed, 1 Jul 2026 16:24:23 +0200
Subject: [PATCH] x509: Prevent infinite loop when parsing ietfAttrSyntax in
attribute certificates
This is the same issue that was fixed with 407fcca200fd ("asn1-parser:
Fix CHOICE parsing") for other CHOICE elements. This one was missed and
can be triggered pre-auth by sending an attribute certificate to a peer.
Since it's parsed before verifying it, the certificate doesn't have to
be valid.
For versions older than 5.5.3, this patch requires prior application of
the fix for CVE-2017-9023, which introduced proper CHOICE handling in
the ASN.1 parser.
Fixes: a17598bc6992 ("x509: Integrate IETF attribute handling, and obsolete ietf_attributes_t")
Fixes: CVE-2026-78132
CVE: CVE-2026-78132
Upstream-Status: Backport [https://github.com/strongswan/strongswan/commit/86bf2cbf5d9941b7ef16a1b25f0baf5589e0b64e]
Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
---
src/libstrongswan/plugins/x509/x509_ac.c | 36 +++++++++++-------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/libstrongswan/plugins/x509/x509_ac.c b/src/libstrongswan/plugins/x509/x509_ac.c
index 11a847e..46c1f58 100644
--- a/src/libstrongswan/plugins/x509/x509_ac.c
+++ b/src/libstrongswan/plugins/x509/x509_ac.c
@@ -249,26 +249,24 @@ static void parse_roleSyntax(chunk_t blob, int level0)
*/
static const asn1Object_t ietfAttrSyntaxObjects[] =
{
- { 0, "ietfAttrSyntax", ASN1_SEQUENCE, ASN1_NONE }, /* 0 */
- { 1, "policyAuthority", ASN1_CONTEXT_C_0, ASN1_OPT |
- ASN1_BODY }, /* 1 */
- { 1, "end opt", ASN1_EOC, ASN1_END }, /* 2 */
- { 1, "values", ASN1_SEQUENCE, ASN1_LOOP }, /* 3 */
- { 2, "octets", ASN1_OCTET_STRING, ASN1_OPT |
- ASN1_BODY }, /* 4 */
- { 2, "end choice", ASN1_EOC, ASN1_END }, /* 5 */
- { 2, "oid", ASN1_OID, ASN1_OPT |
- ASN1_BODY }, /* 6 */
- { 2, "end choice", ASN1_EOC, ASN1_END }, /* 7 */
- { 2, "string", ASN1_UTF8STRING, ASN1_OPT |
- ASN1_BODY }, /* 8 */
- { 2, "end choice", ASN1_EOC, ASN1_END }, /* 9 */
- { 1, "end loop", ASN1_EOC, ASN1_END }, /* 10 */
- { 0, "exit", ASN1_EOC, ASN1_EXIT }
+ { 0, "ietfAttrSyntax", ASN1_SEQUENCE, ASN1_NONE }, /* 0 */
+ { 1, "policyAuthority", ASN1_CONTEXT_C_0, ASN1_OPT|ASN1_BODY }, /* 1 */
+ { 1, "end opt", ASN1_EOC, ASN1_END }, /* 2 */
+ { 1, "values", ASN1_SEQUENCE, ASN1_LOOP }, /* 3 */
+ { 2, "value choice", ASN1_EOC, ASN1_CHOICE }, /* 4 */
+ { 3, "octets", ASN1_OCTET_STRING, ASN1_OPT|ASN1_BODY }, /* 5 */
+ { 3, "end choice", ASN1_EOC, ASN1_END|ASN1_CH }, /* 6 */
+ { 3, "oid", ASN1_OID, ASN1_OPT|ASN1_BODY }, /* 7 */
+ { 3, "end choice", ASN1_EOC, ASN1_END|ASN1_CH }, /* 8 */
+ { 3, "string", ASN1_UTF8STRING, ASN1_OPT|ASN1_BODY }, /* 9 */
+ { 3, "end choice", ASN1_EOC, ASN1_END|ASN1_CH }, /* 10 */
+ { 2, "end choices", ASN1_EOC, ASN1_END|ASN1_CHOICE }, /* 11 */
+ { 1, "end loop", ASN1_EOC, ASN1_END }, /* 12 */
+ { 0, "exit", ASN1_EOC, ASN1_EXIT }
};
-#define IETF_ATTR_OCTETS 4
-#define IETF_ATTR_OID 6
-#define IETF_ATTR_STRING 8
+#define IETF_ATTR_OCTETS 5
+#define IETF_ATTR_OID 7
+#define IETF_ATTR_STRING 9
/**
* Parse group memberships, IETF attributes
@@ -18,6 +18,7 @@ SRC_URI = "https://download.strongswan.org/strongswan-${PV}.tar.bz2 \
file://CVE-2026-78133.patch \
file://CVE-2026-78131.patch \
file://CVE-2026-78130.patch \
file://CVE-2026-78132.patch \
"
SRC_URI[sha256sum] = "07df7cedae56a7f3bb07e66d21a1f9f87e961db70e99184e11d3819413e4f87c"