Your message dated Tue, 30 May 2017 20:59:05 +0100
with message-id <20170530195905.iw67mypov363v...@powdarrmonkey.net>
and subject line Re: Bug#863726: unblock: strongswan/5.5.1-4
has caused the Debian Bug report #863726,
regarding unblock: strongswan/5.5.1-4
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
863726: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863726
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package strongswan

This upload fix two security vulnerabilities in strongSwan, debdiff is
attached (sorry, patches are in dos format…)

unblock strongswan/5.5.1-4

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (500, 
'oldstable'), (450, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.utf8, LC_CTYPE=fr_FR.utf8 (charmap=UTF-8), 
LANGUAGE=fr_FR.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru strongswan-5.5.1/debian/changelog strongswan-5.5.1/debian/changelog
--- strongswan-5.5.1/debian/changelog   2017-01-16 12:58:26.000000000 +0100
+++ strongswan-5.5.1/debian/changelog   2017-05-29 21:52:41.000000000 +0200
@@ -1,3 +1,17 @@
+strongswan (5.5.1-4) unstable; urgency=high
+
+  * Urgency=high for the security fix.
+  * debian/patches:
+    - CVE-2017-9022_insufficient_input_validation_gmp_plugin added, fix
+    insufficient input validation in gmp plugin which could lead to denial of
+    service (CVE-2017-9022).
+    - CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser added,
+    fix incorrect handling of CHOICE types in ASN.1 parser and x509 plugin
+    whch could lead to an infinite loop and a denial of service
+    (CVE-2017-9023).
+
+ -- Yves-Alexis Perez <cor...@debian.org>  Mon, 29 May 2017 21:52:41 +0200
+
 strongswan (5.5.1-3) unstable; urgency=medium
 
   [ Christian Ehrhardt ]
diff -Nru 
strongswan-5.5.1/debian/patches/CVE-2017-9022_insufficient_input_validation_gmp_plugin.patch
 
strongswan-5.5.1/debian/patches/CVE-2017-9022_insufficient_input_validation_gmp_plugin.patch
--- 
strongswan-5.5.1/debian/patches/CVE-2017-9022_insufficient_input_validation_gmp_plugin.patch
        1970-01-01 01:00:00.000000000 +0100
+++ 
strongswan-5.5.1/debian/patches/CVE-2017-9022_insufficient_input_validation_gmp_plugin.patch
        2017-05-29 19:21:19.000000000 +0200
@@ -0,0 +1,42 @@
+From 1bf67b900fb4955a0b09f3c1cbe1ce7177adbe2f Mon Sep 17 00:00:00 2001
+From: Tobias Brunner <tob...@strongswan.org>
+Date: Wed, 29 Mar 2017 11:26:24 +0200
+Subject: [PATCH] gmp: Make sure the modulus is odd and the exponent not zero
+
+Unlike mpz_powm() its secure replacement mpz_powm_sec() has the additional
+requirement that the exponent must be > 0 and the modulus has to be odd.
+Otherwise, it will crash with a floating-point exception.
+
+Fixes: CVE-2017-9022
+---
+ src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c 
b/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c
+index 2b2c7f249590..32a72ac9600b 100644
+--- a/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c
++++ b/src/libstrongswan/plugins/gmp/gmp_rsa_public_key.c
+@@ -475,7 +475,7 @@ gmp_rsa_public_key_t *gmp_rsa_public_key_load(key_type_t 
type, va_list args)
+               }
+               break;
+       }
+-      if (!e.ptr || !n.ptr)
++      if (!e.len || !n.len || (n.ptr[n.len-1] & 0x01) == 0)
+       {
+               return NULL;
+       }
+@@ -506,5 +506,10 @@ gmp_rsa_public_key_t *gmp_rsa_public_key_load(key_type_t 
type, va_list args)
+ 
+       this->k = (mpz_sizeinbase(this->n, 2) + 7) / BITS_PER_BYTE;
+ 
++      if (!mpz_sgn(this->e))
++      {
++              destroy(this);
++              return NULL;
++      }
+       return &this->public;
+ }
+-- 
+1.9.1
+
+
\ No newline at end of file
diff -Nru 
strongswan-5.5.1/debian/patches/CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser.patch
 
strongswan-5.5.1/debian/patches/CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser.patch
--- 
strongswan-5.5.1/debian/patches/CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser.patch
       1970-01-01 01:00:00.000000000 +0100
+++ 
strongswan-5.5.1/debian/patches/CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser.patch
       2017-05-29 19:21:19.000000000 +0200
@@ -0,0 +1,376 @@
+From e3d4fe2be3bda0d9acc985a6cd67efe249d8326c Mon Sep 17 00:00:00 2001
+From: Andreas Steffen <andreas.stef...@strongswan.org>
+Date: Fri, 5 May 2017 09:01:08 +0200
+Subject: [PATCH] asn1-parser: Fix CHOICE parsing
+
+Also fixes the application in the x509 plugin and the parsing of
+nameConstraints, which doesn't require a loop.
+
+Fixes: CVE-2017-9023
+---
+ src/libstrongswan/asn1/asn1_parser.c       |  70 +++++++++++++++---
+ src/libstrongswan/asn1/asn1_parser.h       |  27 +++----
+ src/libstrongswan/plugins/x509/x509_cert.c | 115 +++++++++++++++--------------
+ 3 files changed, 135 insertions(+), 77 deletions(-)
+
+diff --git a/src/libstrongswan/asn1/asn1_parser.c 
b/src/libstrongswan/asn1/asn1_parser.c
+index e7b7a428d9a2..4d5f799b73a9 100644
+--- a/src/libstrongswan/asn1/asn1_parser.c
++++ b/src/libstrongswan/asn1/asn1_parser.c
+@@ -1,8 +1,7 @@
+ /*
+  * Copyright (C) 2006 Martin Will
+- * Copyright (C) 2000-2008 Andreas Steffen
+- *
+- * Hochschule fuer Technik Rapperswil
++ * Copyright (C) 2000-2017 Andreas Steffen
++ * HSR Hochschule fuer Technik Rapperswil
+  *
+  * This program is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU General Public License as published by the
+@@ -76,12 +75,18 @@ struct private_asn1_parser_t {
+        * Current parsing pointer for each level
+        */
+       chunk_t blobs[ASN1_MAX_LEVEL + 2];
++
++      /**
++       * Parsing a CHOICE on the current level ?
++       */
++      bool choice[ASN1_MAX_LEVEL + 2];
++
+ };
+ 
+ METHOD(asn1_parser_t, iterate, bool,
+       private_asn1_parser_t *this, int *objectID, chunk_t *object)
+ {
+-      chunk_t *blob, *blob1;
++      chunk_t *blob, *blob1, blob_ori;
+       u_char *start_ptr;
+       u_int level;
+       asn1Object_t obj;
+@@ -97,7 +102,7 @@ METHOD(asn1_parser_t, iterate, bool,
+               return FALSE;
+       }
+ 
+-      if (obj.flags & ASN1_END)  /* end of loop or option found */
++      if (obj.flags & ASN1_END)  /* end of loop or choice or option found */
+       {
+               if (this->loopAddr[obj.level] && this->blobs[obj.level+1].len > 
0)
+               {
+@@ -106,13 +111,42 @@ METHOD(asn1_parser_t, iterate, bool,
+               }
+               else
+               {
+-                      this->loopAddr[obj.level] = 0;           /* exit loop 
or option*/
++                      this->loopAddr[obj.level] = 0;           /* exit loop */
++
++                      if (obj.flags & ASN1_CHOICE) /* end of choices */
++                      {
++                              if (this->choice[obj.level+1])
++                              {
++                                      DBG1(DBG_ASN, "L%d - %s:  incorrect 
choice encoding",
++                                              this->level0 + obj.level, 
obj.name);
++                                      this->success = FALSE;
++                                      goto end;
++                              }
++                      }
++
++                      if (obj.flags & ASN1_CH) /* end of choice */
++                      {
++                              /* parsed a valid choice */
++                              this->choice[obj.level] = FALSE;
++
++                              /* advance to end of choices */
++                              do
++                              {
++                                      this->line++;
++                              }
++                              while (!((this->objects[this->line].flags & 
ASN1_END) &&
++                                               
(this->objects[this->line].flags & ASN1_CHOICE) &&
++                                               
(this->objects[this->line].level == obj.level-1)));
++                              this->line--;
++                      }
++
+                       goto end;
+               }
+       }
+ 
+       level = this->level0 + obj.level;
+       blob = this->blobs + obj.level;
++      blob_ori = *blob;
+       blob1 = blob + 1;
+       start_ptr = blob->ptr;
+ 
+@@ -129,7 +163,6 @@ METHOD(asn1_parser_t, iterate, bool,
+       }
+ 
+       /* handle ASN.1 options */
+-
+       if ((obj.flags & ASN1_OPT)
+                       && (blob->len == 0 || *start_ptr != obj.type))
+       {
+@@ -144,7 +177,6 @@ METHOD(asn1_parser_t, iterate, bool,
+       }
+ 
+       /* an ASN.1 object must possess at least a tag and length field */
+-
+       if (blob->len < 2)
+       {
+               DBG1(DBG_ASN, "L%d - %s:  ASN.1 object smaller than 2 octets",
+@@ -167,8 +199,16 @@ METHOD(asn1_parser_t, iterate, bool,
+       blob->ptr += blob1->len;
+       blob->len -= blob1->len;
+ 
+-      /* return raw ASN.1 object without prior type checking */
++      /* handle ASN.1 choice without explicit context encoding */
++      if ((obj.flags & ASN1_CHOICE) && obj.type == ASN1_EOC)
++      {
++              DBG2(DBG_ASN, "L%d - %s:", level, obj.name);
++              this->choice[obj.level+1] = TRUE;
++              *blob1 = blob_ori;
++              goto end;
++      }
+ 
++      /* return raw ASN.1 object without prior type checking */
+       if (obj.flags & ASN1_RAW)
+       {
+               DBG2(DBG_ASN, "L%d - %s:", level, obj.name);
+@@ -209,6 +249,18 @@ METHOD(asn1_parser_t, iterate, bool,
+               }
+       }
+ 
++      /* In case of a "CHOICE" start to scan for exactly one valid choice */
++      if (obj.flags & ASN1_CHOICE)
++      {
++              if (blob1->len == 0)
++              {
++                      DBG1(DBG_ASN, "L%d - %s:  contains no choice", level, 
obj.name);
++                      this->success = FALSE;
++                      goto end;
++              }
++              this->choice[obj.level+1] = TRUE;
++      }
++
+       if (obj.flags & ASN1_OBJ)
+       {
+               object->ptr = start_ptr;
+diff --git a/src/libstrongswan/asn1/asn1_parser.h 
b/src/libstrongswan/asn1/asn1_parser.h
+index 0edc22c2378c..2ee1e892fc16 100644
+--- a/src/libstrongswan/asn1/asn1_parser.h
++++ b/src/libstrongswan/asn1/asn1_parser.h
+@@ -1,8 +1,7 @@
+ /*
+  * Copyright (C) 2006 Martin Will
+- * Copyright (C) 2000-2008 Andreas Steffen
+- *
+- * Hochschule fuer Technik Rapperswil
++ * Copyright (C) 2000-2017 Andreas Steffen
++ * HSR Hochschule fuer Technik Rapperswil
+  *
+  * This program is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU General Public License as published by the
+@@ -32,15 +31,17 @@
+ /**
+  * Definition of ASN.1 flags
+  */
+-#define ASN1_NONE     0x00
+-#define ASN1_DEF      0x01
+-#define ASN1_OPT      0x02
+-#define ASN1_LOOP     0x04
+-#define ASN1_END      0x08
+-#define ASN1_OBJ      0x10
+-#define ASN1_BODY     0x20
+-#define ASN1_RAW      0x40
+-#define ASN1_EXIT     0x80
++#define ASN1_NONE    0x0000
++#define ASN1_DEF     0x0001
++#define ASN1_OPT     0x0002
++#define ASN1_LOOP    0x0004
++#define ASN1_CHOICE  0x0008
++#define ASN1_CH      0x0010
++#define ASN1_END     0x0020
++#define ASN1_OBJ     0x0040
++#define ASN1_BODY    0x0080
++#define ASN1_RAW     0x0100
++#define ASN1_EXIT    0x0200
+ 
+ typedef struct asn1Object_t asn1Object_t;
+ 
+@@ -51,7 +52,7 @@ struct asn1Object_t{
+       u_int level;
+       const u_char *name;
+       asn1_t type;
+-      u_char flags;
++      uint16_t flags;
+ };
+ 
+ typedef struct asn1_parser_t asn1_parser_t;
+diff --git a/src/libstrongswan/plugins/x509/x509_cert.c 
b/src/libstrongswan/plugins/x509/x509_cert.c
+index b3d90c5f61ef..f9573e953cbf 100644
+--- a/src/libstrongswan/plugins/x509/x509_cert.c
++++ b/src/libstrongswan/plugins/x509/x509_cert.c
+@@ -2,10 +2,10 @@
+  * Copyright (C) 2000 Andreas Hess, Patric Lichtsteiner, Roger Wegmann
+  * Copyright (C) 2001 Marco Bertossa, Andreas Schleiss
+  * Copyright (C) 2002 Mario Strasser
+- * Copyright (C) 2000-2006 Andreas Steffen
++ * Copyright (C) 2000-2017 Andreas Steffen
+  * Copyright (C) 2006-2009 Martin Willi
+  * Copyright (C) 2008 Tobias Brunner
+- * Hochschule fuer Technik Rapperswil
++ * HSR Hochschule fuer Technik Rapperswil
+  *
+  * This program is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU General Public License as published by the
+@@ -789,20 +789,20 @@ static bool parse_extendedKeyUsage(chunk_t blob, int 
level0,
+  * ASN.1 definition of crlDistributionPoints
+  */
+ static const asn1Object_t crlDistributionPointsObjects[] = {
+-      { 0, "crlDistributionPoints",   ASN1_SEQUENCE,          ASN1_LOOP       
                }, /*  0 */
+-      { 1,   "DistributionPoint",             ASN1_SEQUENCE,          
ASN1_NONE                       }, /*  1 */
+-      { 2,     "distributionPoint",   ASN1_CONTEXT_C_0,       
ASN1_OPT|ASN1_LOOP      }, /*  2 */
+-      { 3,       "fullName",                  ASN1_CONTEXT_C_0,       
ASN1_OPT|ASN1_OBJ       }, /*  3 */
+-      { 3,       "end choice",                ASN1_EOC,                       
ASN1_END                        }, /*  4 */
+-      { 3,       "nameRelToCRLIssuer",ASN1_CONTEXT_C_1,       
ASN1_OPT|ASN1_BODY      }, /*  5 */
+-      { 3,       "end choice",                ASN1_EOC,                       
ASN1_END                        }, /*  6 */
+-      { 2,     "end opt",                             ASN1_EOC,               
        ASN1_END                        }, /*  7 */
+-      { 2,     "reasons",                             ASN1_CONTEXT_C_1,       
ASN1_OPT|ASN1_BODY      }, /*  8 */
+-      { 2,     "end opt",                             ASN1_EOC,               
        ASN1_END                        }, /*  9 */
+-      { 2,     "crlIssuer",                   ASN1_CONTEXT_C_2,       
ASN1_OPT|ASN1_OBJ       }, /* 10 */
+-      { 2,     "end opt",                             ASN1_EOC,               
        ASN1_END                        }, /* 11 */
+-      { 0, "end loop",                                ASN1_EOC,               
        ASN1_END                        }, /* 12 */
+-      { 0, "exit",                                    ASN1_EOC,               
        ASN1_EXIT                       }
++      { 0, "crlDistributionPoints",   ASN1_SEQUENCE,    ASN1_LOOP            
}, /*  0 */
++      { 1,   "DistributionPoint",     ASN1_SEQUENCE,    ASN1_NONE            
}, /*  1 */
++      { 2,     "distributionPoint",   ASN1_CONTEXT_C_0, ASN1_OPT|ASN1_CHOICE 
}, /*  2 */
++      { 3,       "fullName",          ASN1_CONTEXT_C_0, ASN1_OPT|ASN1_OBJ    
}, /*  3 */
++      { 3,       "end choice",        ASN1_EOC,         ASN1_END|ASN1_CH     
}, /*  4 */
++      { 3,       "nameRelToCRLIssuer",ASN1_CONTEXT_C_1, ASN1_OPT|ASN1_BODY   
}, /*  5 */
++      { 3,       "end choice",        ASN1_EOC,         ASN1_END|ASN1_CH     
}, /*  6 */
++      { 2,     "end opt/choices",     ASN1_EOC,         ASN1_END|ASN1_CHOICE 
}, /*  7 */
++      { 2,     "reasons",             ASN1_CONTEXT_C_1, ASN1_OPT|ASN1_BODY   
}, /*  8 */
++      { 2,     "end opt",             ASN1_EOC,         ASN1_END             
}, /*  9 */
++      { 2,     "crlIssuer",           ASN1_CONTEXT_C_2, ASN1_OPT|ASN1_OBJ    
}, /* 10 */
++      { 2,     "end opt",             ASN1_EOC,         ASN1_END             
}, /* 11 */
++      { 0, "end loop",                ASN1_EOC,         ASN1_END             
}, /* 12 */
++      { 0, "exit",                    ASN1_EOC,         ASN1_EXIT            }
+ };
+ #define CRL_DIST_POINTS                                1
+ #define CRL_DIST_POINTS_FULLNAME       3
+@@ -910,14 +910,13 @@ end:
+  * ASN.1 definition of nameConstraints
+  */
+ static const asn1Object_t nameConstraintsObjects[] = {
+-      { 0, "nameConstraints",                 ASN1_SEQUENCE,          
ASN1_LOOP                       }, /*  0 */
++      { 0, "nameConstraints",                 ASN1_SEQUENCE,          
ASN1_NONE                       }, /*  0 */
+       { 1,   "permittedSubtrees",             ASN1_CONTEXT_C_0,       
ASN1_OPT|ASN1_LOOP      }, /*  1 */
+       { 2,     "generalSubtree",              ASN1_SEQUENCE,          
ASN1_BODY                       }, /*  2 */
+       { 1,   "end loop",                              ASN1_EOC,               
        ASN1_END                        }, /*  3 */
+       { 1,   "excludedSubtrees",              ASN1_CONTEXT_C_1,       
ASN1_OPT|ASN1_LOOP      }, /*  4 */
+       { 2,     "generalSubtree",              ASN1_SEQUENCE,          
ASN1_BODY                       }, /*  5 */
+       { 1,   "end loop",                              ASN1_EOC,               
        ASN1_END                        }, /*  6 */
+-      { 0, "end loop",                                ASN1_EOC,               
        ASN1_END                        }, /*  7 */
+       { 0, "exit",                                    ASN1_EOC,               
        ASN1_EXIT                       }
+ };
+ #define NAME_CONSTRAINT_PERMITTED 2
+@@ -974,25 +973,27 @@ end:
+  * ASN.1 definition of a certificatePolicies extension
+  */
+ static const asn1Object_t certificatePoliciesObject[] = {
+-      { 0, "certificatePolicies",             ASN1_SEQUENCE,  ASN1_LOOP       
                }, /*  0 */
+-      { 1,   "policyInformation",             ASN1_SEQUENCE,  ASN1_NONE       
                }, /*  1 */
+-      { 2,     "policyId",                    ASN1_OID,               
ASN1_BODY                       }, /*  2 */
+-      { 2,     "qualifiers",                  ASN1_SEQUENCE,  
ASN1_OPT|ASN1_LOOP      }, /*  3 */
+-      { 3,       "qualifierInfo",             ASN1_SEQUENCE,  ASN1_NONE       
                }, /*  4 */
+-      { 4,         "qualifierId",             ASN1_OID,               
ASN1_BODY                       }, /*  5 */
+-      { 4,         "cPSuri",                  ASN1_IA5STRING, 
ASN1_OPT|ASN1_BODY      }, /*  6 */
+-      { 4,         "end choice",              ASN1_EOC,               
ASN1_END                        }, /*  7 */
+-      { 4,         "userNotice",              ASN1_SEQUENCE,  
ASN1_OPT|ASN1_BODY      }, /*  8 */
+-      { 5,           "explicitText",  ASN1_EOC,               ASN1_RAW        
                }, /*  9 */
+-      { 4,         "end choice",              ASN1_EOC,               
ASN1_END                        }, /* 10 */
+-      { 2,      "end opt/loop",               ASN1_EOC,               
ASN1_END                        }, /* 12 */
+-      { 0, "end loop",                                ASN1_EOC,               
ASN1_END                        }, /* 13 */
+-      { 0, "exit",                                    ASN1_EOC,               
ASN1_EXIT                       }
++      { 0, "certificatePolicies",      ASN1_SEQUENCE,  ASN1_LOOP            
}, /*  0 */
++      { 1,   "policyInformation",      ASN1_SEQUENCE,  ASN1_NONE            
}, /*  1 */
++      { 2,     "policyId",             ASN1_OID,       ASN1_BODY            
}, /*  2 */
++      { 2,     "qualifiers",           ASN1_SEQUENCE,  ASN1_OPT|ASN1_LOOP   
}, /*  3 */
++      { 3,       "qualifierInfo",      ASN1_SEQUENCE,  ASN1_NONE            
}, /*  4 */
++      { 4,         "qualifierId",      ASN1_OID,       ASN1_BODY            
}, /*  5 */
++      { 4,         "qualifier",        ASN1_EOC,       ASN1_CHOICE          
}, /*  6 */
++      { 5,           "cPSuri",         ASN1_IA5STRING, ASN1_OPT|ASN1_BODY   
}, /*  7 */
++      { 5,           "end choice",     ASN1_EOC,       ASN1_END|ASN1_CH     
}, /*  8 */
++      { 5,           "userNotice",     ASN1_SEQUENCE,  ASN1_OPT|ASN1_BODY   
}, /*  9 */
++      { 6,             "explicitText", ASN1_EOC,       ASN1_RAW             
}, /* 10 */
++      { 5,           "end choice",     ASN1_EOC,       ASN1_END|ASN1_CH     
}, /* 11 */
++      { 4,         "end choices",      ASN1_EOC,       ASN1_END|ASN1_CHOICE 
}, /* 12 */
++      { 2,     "end opt/loop",         ASN1_EOC,       ASN1_END             
}, /* 13 */
++      { 0, "end loop",                 ASN1_EOC,       ASN1_END             
}, /* 14 */
++      { 0, "exit",                     ASN1_EOC,       ASN1_EXIT            }
+ };
+-#define CERT_POLICY_ID                                2
+-#define CERT_POLICY_QUALIFIER_ID      5
+-#define CERT_POLICY_CPS_URI                   6
+-#define CERT_POLICY_EXPLICIT_TEXT     9
++#define CERT_POLICY_ID              2
++#define CERT_POLICY_QUALIFIER_ID    5
++#define CERT_POLICY_CPS_URI         7
++#define CERT_POLICY_EXPLICIT_TEXT  10
+ 
+ /**
+  * Parse certificatePolicies
+@@ -1157,27 +1158,31 @@ static bool parse_policyConstraints(chunk_t blob, int 
level0,
+  * ASN.1 definition of ipAddrBlocks according to RFC 3779
+  */
+ static const asn1Object_t ipAddrBlocksObjects[] = {
+-      { 0, "ipAddrBlocks",                    ASN1_SEQUENCE,          
ASN1_LOOP                       }, /*  0 */
+-      { 1,   "ipAddressFamily",               ASN1_SEQUENCE,          
ASN1_NONE                       }, /*  1 */
+-      { 2,     "addressFamily",               ASN1_OCTET_STRING,      
ASN1_BODY                       }, /*  2 */
+-      { 2,     "inherit",                             ASN1_NULL,              
        ASN1_OPT|ASN1_NONE      }, /*  3 */
+-      { 2,     "end choice",                  ASN1_EOC,                       
ASN1_END                        }, /*  4 */
+-      { 2,     "addressesOrRanges",   ASN1_SEQUENCE,          
ASN1_OPT|ASN1_LOOP      }, /*  5 */
+-      { 3,       "addressPrefix",             ASN1_BIT_STRING,        
ASN1_OPT|ASN1_BODY  }, /*  6 */
+-      { 3,       "end choice",                ASN1_EOC,                       
ASN1_END                        }, /*  7 */
+-      { 3,       "addressRange",              ASN1_SEQUENCE,          
ASN1_OPT|ASN1_NONE      }, /*  8 */
+-      { 4,         "min",                             ASN1_BIT_STRING,        
ASN1_BODY                       }, /*  9 */
+-      { 4,         "max",                             ASN1_BIT_STRING,        
ASN1_BODY                       }, /* 10 */
+-      { 3,       "end choice",                ASN1_EOC,                       
ASN1_END                        }, /* 11 */
+-      { 2,     "end opt/loop",                ASN1_EOC,                       
ASN1_END                        }, /* 12 */
+-      { 0, "end loop",                                ASN1_EOC,               
        ASN1_END                        }, /* 13 */
+-      { 0, "exit",                                    ASN1_EOC,               
        ASN1_EXIT                       }
++      { 0, "ipAddrBlocks",            ASN1_SEQUENCE,     ASN1_LOOP            
}, /*  0 */
++      { 1,   "ipAddressFamily",       ASN1_SEQUENCE,     ASN1_NONE            
}, /*  1 */
++      { 2,     "addressFamily",       ASN1_OCTET_STRING, ASN1_BODY            
}, /*  2 */
++      { 2,     "ipAddressChoice",     ASN1_EOC,          ASN1_CHOICE          
}, /*  3 */
++      { 3,       "inherit",           ASN1_NULL,         ASN1_OPT             
}, /*  4 */
++      { 3,       "end choice",        ASN1_EOC,          ASN1_END|ASN1_CH     
}, /*  5 */
++      { 3,       "addressesOrRanges", ASN1_SEQUENCE,     ASN1_OPT|ASN1_LOOP   
}, /*  6 */
++      { 4,         "addressOrRange",  ASN1_EOC,          ASN1_CHOICE          
}, /*  7 */
++      { 5,           "addressPrefix", ASN1_BIT_STRING,   ASN1_OPT|ASN1_BODY   
}, /*  8 */
++      { 5,           "end choice",    ASN1_EOC,          ASN1_END|ASN1_CH     
}, /*  9 */
++      { 5,           "addressRange",  ASN1_SEQUENCE,     ASN1_OPT             
}, /* 10 */
++      { 6,             "min",         ASN1_BIT_STRING,   ASN1_BODY            
}, /* 11 */
++      { 6,             "max",         ASN1_BIT_STRING,   ASN1_BODY            
}, /* 12 */
++      { 5,           "end choice",    ASN1_EOC,          ASN1_END|ASN1_CH     
}, /* 13 */
++      { 4,         "end choices",     ASN1_EOC,          ASN1_END|ASN1_CHOICE 
}, /* 14 */
++      { 3,       "end loop/choice",   ASN1_EOC,          ASN1_END|ASN1_CH     
}, /* 15 */
++      { 2,     "end choices",         ASN1_EOC,          ASN1_END|ASN1_CHOICE 
}, /* 16 */
++      { 0, "end loop",                ASN1_EOC,          ASN1_END             
}, /* 17 */
++      { 0, "exit",                    ASN1_EOC,          ASN1_EXIT            
}
+ };
+ #define IP_ADDR_BLOCKS_FAMILY       2
+-#define IP_ADDR_BLOCKS_INHERIT      3
+-#define IP_ADDR_BLOCKS_PREFIX       6
+-#define IP_ADDR_BLOCKS_MIN          9
+-#define IP_ADDR_BLOCKS_MAX         10
++#define IP_ADDR_BLOCKS_INHERIT      4
++#define IP_ADDR_BLOCKS_PREFIX       8
++#define IP_ADDR_BLOCKS_MIN         11
++#define IP_ADDR_BLOCKS_MAX         12
+ 
+ static bool check_address_object(ts_type_t ts_type, chunk_t object)
+ {
+-- 
+1.9.1
+
+
\ No newline at end of file
diff -Nru strongswan-5.5.1/debian/patches/series 
strongswan-5.5.1/debian/patches/series
--- strongswan-5.5.1/debian/patches/series      2016-10-20 16:21:32.000000000 
+0200
+++ strongswan-5.5.1/debian/patches/series      2017-05-29 21:40:35.000000000 
+0200
@@ -1,3 +1,5 @@
 01_fix-manpages.patch
 03_systemd-service.patch
 04_disable-libtls-tests.patch
+CVE-2017-9022_insufficient_input_validation_gmp_plugin.patch
+CVE-2017-9023_incorrect_handling_of_choice_types_in_asn1_parser.patch

--- End Message ---
--- Begin Message ---
On Tue, May 30, 2017 at 04:09:19PM +0200, Yves-Alexis Perez wrote:
> This upload fix two security vulnerabilities in strongSwan, debdiff is
> attached (sorry, patches are in dos format…)

Painful indeed. Unblocked.

Thanks,

-- 
Jonathan Wiltshire                                      j...@debian.org
Debian Developer                         http://people.debian.org/~jmw

4096R: 0xD3524C51 / 0A55 B7C5 1223 3942 86EC  74C3 5394 479D D352 4C51

--- End Message ---

Reply via email to