[Pkg-privacy-commits] [obfsproxy] 02/13: Fix replay protection.

Jérémy Bobbio lunar at moszumanska.debian.org
Fri Aug 28 16:28:41 UTC 2015


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to annotated tag debian/0.2.13-1
in repository obfsproxy.

commit d7459bb81473fa6454c20bb2c1b24744c7bd954f
Author: Philipp Winter <phw at torproject.org>
Date:   Sun Dec 28 17:28:51 2014 +0100

    Fix replay protection.
    
    The server must also cache the HMAC of its own UniformDH messages.
    Otherwise, an active adversary could replay the server's UniformDH
    message and evade the replay protection.
---
 ChangeLog                                         | 2 ++
 obfsproxy/transports/scramblesuit/scramblesuit.py | 3 ++-
 obfsproxy/transports/scramblesuit/uniformdh.py    | 7 ++++++-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7d66351..3107d2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 Changes in version 0.2.13 - UNRELEASED:
  - Correctly handle the ScrambleSuit password being missing entirely
    when running in managed mode. Patch by Yawning Angel. Fixes #13587.
+ - Make ScrambleSuit servers cache the HMAC of their own UniformDH messages.
+   Fixes #14038.
 
 
 Changes in version 0.2.12 - 2014-07-22:
diff --git a/obfsproxy/transports/scramblesuit/scramblesuit.py b/obfsproxy/transports/scramblesuit/scramblesuit.py
index 3f93b1d..40706b9 100644
--- a/obfsproxy/transports/scramblesuit/scramblesuit.py
+++ b/obfsproxy/transports/scramblesuit/scramblesuit.py
@@ -516,7 +516,8 @@ class ScrambleSuitTransport( base.BaseTransport ):
             elif self.uniformdh.receivePublicKey(data, self.deriveSecrets,
                     self.srvState):
                 # Now send the server's UniformDH public key to the client.
-                handshakeMsg = self.uniformdh.createHandshake()
+                handshakeMsg = self.uniformdh.createHandshake(srvState=
+                                                              self.srvState)
 
                 log.debug("Sending %d bytes of UniformDH handshake and "
                           "session ticket." % len(handshakeMsg))
diff --git a/obfsproxy/transports/scramblesuit/uniformdh.py b/obfsproxy/transports/scramblesuit/uniformdh.py
index dd16070..a9e5662 100644
--- a/obfsproxy/transports/scramblesuit/uniformdh.py
+++ b/obfsproxy/transports/scramblesuit/uniformdh.py
@@ -156,7 +156,7 @@ class UniformDH( object ):
 
         return handshake[:const.PUBLIC_KEY_LENGTH]
 
-    def createHandshake( self ):
+    def createHandshake( self, srvState=None ):
         """
         Create and return a ready-to-be-sent UniformDH handshake.
 
@@ -195,6 +195,11 @@ class UniformDH( object ):
         mac = mycrypto.HMAC_SHA256_128(self.sharedSecret,
                                        publicKey + padding + mark + epoch)
 
+        if self.weAreServer and (srvState is not None):
+            log.debug("Adding the HMAC authenticating the server's UniformDH "
+                      "message to the replay table: %s." % mac.encode('hex'))
+            srvState.registerKey(mac)
+
         return publicKey + padding + mark + mac
 
 # Alias class name in order to provide a more intuitive API.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/obfsproxy.git



More information about the Pkg-privacy-commits mailing list