Don't mix up pre- and post-handshake verification of DTLS clients.
authorLinus Nordberg <linus@torproject.org>
Fri, 19 Oct 2012 21:23:04 +0000 (23:23 +0200)
committerLinus Nordberg <linus@nordu.net>
Mon, 22 Oct 2012 16:13:45 +0000 (18:13 +0200)
Commit db965c9b addressed TLS clients only.

When verifying DTLS clients, don't consider config blocks with CA
settings ('tls') which differ from the one used for verifying the
certificate chain.

Original issue reported and analysed by Ralf Paffrath. DTLS being
vulnerable reported by Raphael Geisser.

Addresses issue RADSECPROXY-43, CVE-2012-4523.

ChangeLog
dtls.c

index 39b030a..0422ffd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-22 1.6.2-dev
+       Bug fixes (security):
+       - Fix the issue with verification of clients when using multiple
+       'tls' config blocks (RADSECPROXY-43) for DTLS too. Reported by
+       Raphael Geisser.
+
 2012-09-14 1.6.1
        Bug fixes (security):
        - When verifying clients, don't consider config blocks with CA
diff --git a/dtls.c b/dtls.c
index bbebfef..3772113 100644 (file)
--- a/dtls.c
+++ b/dtls.c
@@ -354,6 +354,7 @@ void *dtlsservernew(void *arg) {
     X509 *cert = NULL;
     SSL_CTX *ctx = NULL;
     uint8_t delay = 60;
+    struct tls *accepted_tls = NULL;
 
     debug(DBG_DBG, "dtlsservernew: starting");
     conf = find_clconf(handle, (struct sockaddr *)&params->addr, NULL);
@@ -367,10 +368,11 @@ void *dtlsservernew(void *arg) {
        cert = verifytlscert(ssl);
         if (!cert)
             goto exit;
+        accepted_tls = conf->tlsconf;
     }
 
     while (conf) {
-       if (verifyconfcert(cert, conf)) {
+       if (accepted_tls == conf->tlsconf && verifyconfcert(cert, conf)) {
            X509_free(cert);
            client = addclient(conf, 1);
            if (client) {