Also memset(.., 0, ..) the pre-TLS input buffer.
authorPhil Pennock <pdp@exim.org>
Thu, 24 Mar 2011 08:40:33 +0000 (04:40 -0400)
committerPhil Pennock <pdp@exim.org>
Thu, 24 Mar 2011 08:40:33 +0000 (04:40 -0400)
doc/doc-txt/ChangeLog
src/src/smtp_in.c

index 37c7f216ffe0cfd81f6be85b82ed04bda776a742..ce78086a611d46cbe54e30f466408976c652d567 100644 (file)
@@ -18,7 +18,8 @@ PP/04 New "dns_use_edns0" global option.
 PP/05 Don't segfault on misconfiguration of ref:name exim-user as uid.
       Bugzilla 1098.
 
-PP/06 Extra paranoia around STARTTLS-with-data-in-buffer.
+PP/06 Extra paranoia around buffer usage at the STARTTLS transition.
+      nb: Exim is not vulnerable to http://www.kb.cert.org/vuls/id/555316
 
 
 Exim version 4.75
index 500000be446a0c0dec2333d9675a42c819e25fca..38c7afcf6fbd1bdad10078f6904e71777aebfdf2 100644 (file)
@@ -3861,6 +3861,15 @@ while (done <= 0)
       /* and if TLS is already active, tls_server_start() should fail */
       }
 
+    /* There is nothing we value in the input buffer and if TLS is succesfully
+    negotiated, we won't use this buffer again; if TLS fails, we'll just read
+    fresh content into it.  The buffer contains arbitrary content from an
+    untrusted remote source; eg: NOOP <shellcode>\r\nSTARTTLS\r\n
+    It seems safest to just wipe away the content rather than leave it as a
+    target to jump to. */
+
+    memset(smtp_inbuffer, 0, in_buffer_size);
+
     /* Attempt to start up a TLS session, and if successful, discard all
     knowledge that was obtained previously. At least, that's what the RFC says,
     and that's what happens by default. However, in order to work round YAEB,