Commit 513886aa authored by Nick Coghlan's avatar Nick Coghlan

Fix #12835: prevent use of the unencrypted sendmsg/recvmsg APIs on SSL wrapped...

Fix #12835: prevent use of the unencrypted sendmsg/recvmsg APIs on SSL wrapped sockets (Patch by David Watson)
parent a89c32cc
...@@ -355,6 +355,12 @@ class SSLSocket(socket): ...@@ -355,6 +355,12 @@ class SSLSocket(socket):
else: else:
return socket.sendto(self, data, flags_or_addr, addr) return socket.sendto(self, data, flags_or_addr, addr)
def sendmsg(self, *args, **kwargs):
# Ensure programs don't send data unencrypted if they try to
# use this method.
raise NotImplementedError("sendmsg not allowed on instances of %s" %
self.__class__)
def sendall(self, data, flags=0): def sendall(self, data, flags=0):
self._checkClosed() self._checkClosed()
if self._sslobj: if self._sslobj:
...@@ -413,6 +419,14 @@ class SSLSocket(socket): ...@@ -413,6 +419,14 @@ class SSLSocket(socket):
else: else:
return socket.recvfrom_into(self, buffer, nbytes, flags) return socket.recvfrom_into(self, buffer, nbytes, flags)
def recvmsg(self, *args, **kwargs):
raise NotImplementedError("recvmsg not allowed on instances of %s" %
self.__class__)
def recvmsg_into(self, *args, **kwargs):
raise NotImplementedError("recvmsg_into not allowed on instances of "
"%s" % self.__class__)
def pending(self): def pending(self):
self._checkClosed() self._checkClosed()
if self._sslobj: if self._sslobj:
......
...@@ -1651,6 +1651,14 @@ else: ...@@ -1651,6 +1651,14 @@ else:
# consume data # consume data
s.read() s.read()
# Make sure sendmsg et al are disallowed to avoid
# inadvertent disclosure of data and/or corruption
# of the encrypted data stream
self.assertRaises(NotImplementedError, s.sendmsg, [b"data"])
self.assertRaises(NotImplementedError, s.recvmsg, 100)
self.assertRaises(NotImplementedError,
s.recvmsg_into, bytearray(100))
s.write(b"over\n") s.write(b"over\n")
s.close() s.close()
finally: finally:
......
...@@ -268,6 +268,10 @@ Core and Builtins ...@@ -268,6 +268,10 @@ Core and Builtins
Library Library
------- -------
- Issue #12835: Follow up to #6560 that unconditionally prevents use of the
unencrypted sendmsg/recvmsg APIs on SSL wrapped sockets. Patch by David
Watson.
- Issue #12803: SSLContext.load_cert_chain() now accepts a password argument - Issue #12803: SSLContext.load_cert_chain() now accepts a password argument
to be used if the private key is encrypted. Patch by Adam Simpkins. to be used if the private key is encrypted. Patch by Adam Simpkins.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment