[Pound Mailing List] [PATCH] Allow disabling SSL compression

Lubomir Rintel <lubo.rintel-Vz9dX3IBr95Wk0Htik3J/[email protected]>
Newsgroups gmane.comp.web.pound.general
Message-ID <[email protected]>
DEFLATE compression can reveal presence of known substrings with potentially
sensitive contents.

Probably the best explanation so far:
http://security.stackexchange.com/questions/19911/crime-how-to-beat-the-beast-successor/19914#19914
---
 config.c |   12 +++++++++++-
 pound.8  |    8 ++++++++
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/config.c b/config.c
index 6ed8e39..01e3023 100755
--- a/config.c
+++ b/config.c
@@ -78,7 +78,7 @@ static regex_t  ListenHTTP, ListenHTTPS, End, Address, Port, Cert, xHTTP, Client
 static regex_t  Err414, Err500, Err501, Err503, MaxRequest, HeadRemove, RewriteLocation, RewriteDestination;
 static regex_t  Service, ServiceName, URL, HeadRequire, HeadDeny, BackEnd, Emergency, Priority, HAport, HAportAddr;
 static regex_t  Redirect, RedirectN, TimeOut, Session, Type, TTL, ID, DynScale;
-static regex_t  ClientCert, AddHeader, DisableSSLv2, SSLAllowClientRenegotiation, SSLHonorCipherOrder, Ciphers;
+static regex_t  ClientCert, AddHeader, DisableSSLv2, SSLAllowClientRenegotiation, SSLHonorCipherOrder, SSLNoCompression, Ciphers;
 static regex_t  CAlist, VerifyList, CRLlist, NoHTTPS11, Grace, Include, ConnTO, IgnoreCase, HTTPS, HTTPSCert;
 static regex_t  Disabled, Threads, CNName, Anonymise;
 
@@ -1123,6 +1123,14 @@ parse_HTTPS(void)
                 ssl_op_disable |= SSL_OP_CIPHER_SERVER_PREFERENCE;
                 ssl_op_enable &= ~SSL_OP_CIPHER_SERVER_PREFERENCE;
             }
+        } else if(!regexec(&SSLNoCompression, lin, 4, matches, 0)) {
+            if (atoi(lin + matches[1].rm_so)) {
+                ssl_op_enable |= SSL_OP_NO_COMPRESSION;
+                ssl_op_disable &= ~SSL_OP_NO_COMPRESSION;
+            } else {
+                ssl_op_disable |= SSL_OP_NO_COMPRESSION;
+                ssl_op_enable &= ~SSL_OP_NO_COMPRESSION;
+            }
         } else if(!regexec(&Ciphers, lin, 4, matches, 0)) {
             has_other = 1;
             if(res->ctx == NULL)
@@ -1409,6 +1417,7 @@ config_parse(const int argc, char **const argv)
     || regcomp(&SSLAllowClientRenegotiation, "^[ \t]*SSLAllowClientRenegotiation[ \t]+([012])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&DisableSSLv2, "^[ \t]*DisableSSLv2[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&SSLHonorCipherOrder, "^[ \t]*SSLHonorCipherOrder[ \t]+([01])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
+    || regcomp(&SSLNoCompression, "^[ \t]*SSLNoCompression[ \t]+([01])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&Ciphers, "^[ \t]*Ciphers[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&CAlist, "^[ \t]*CAlist[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
     || regcomp(&VerifyList, "^[ \t]*VerifyList[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
@@ -1571,6 +1580,7 @@ config_parse(const int argc, char **const argv)
     regfree(&SSLAllowClientRenegotiation);
     regfree(&DisableSSLv2);
     regfree(&SSLHonorCipherOrder);
+    regfree(&SSLNoCompression);
     regfree(&Ciphers);
     regfree(&CAlist);
     regfree(&VerifyList);
diff --git a/pound.8 b/pound.8
index 4c29c2c..4e129ec 100755
--- a/pound.8
+++ b/pound.8
@@ -519,6 +519,14 @@ renegotiation is supported.  If the value is 2, insecure renegotiation is suppor
 with unpatched clients. \fBThis can lead to a DoS and a Man in the Middle attack!\fR
 The default value is 0.
 .TP
+\fBSSLNoCompression\fR 0|1
+If this value is 1, the server will disable DEFLATE compression even if both server
+and client supports it.  In case compression is enabled an attacker with access to
+encrypted network traffic can conduct a "CRIME" attack by making client issue requests
+with specific character sequences and observing whether they got compressed or not,
+indicating their presence in part of the request that is not under his control (e.g.
+cookie headers). Default value is 0.
+.TP
 \fBCAlist\fR "CAcert_file"
 Set the list of "trusted" CA's for this server. The CAcert_file is a file containing
 a sequence of CA certificates (PEM format). The names of the defined CA certificates
-- 
1.7.1


--
To unsubscribe send an email with subject unsubscribe to [email protected]
Please contact [email protected] for questions.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.