Thunderbird currently has the SSL options: "Never" (plain), "TLS, if 
available", "TLS" (always), and "SSL" (always), for incoming IMAP/POP3 
and outgoing SMTP servers (with slightly different UI wording). TLS is 
basically SSL version 3.

So far, "TLS, if available" is the default. What it does: It asks the 
server for its capabilities, and if the server reports/offers TLS 
("STARTTLS" capability), it uses TLS, otherwise uses an unencrypted 
connection. This negotion happens on *every* connection (and that's the 
problem, see below).

I assume that was chosen as default because the easiest to set up: the 
user doesn't need to know or try out whether the server supports TLS or 
not, and it will work either way, and if the server supports it, we'd 
use TLS.

Or so we thought. SSL is supposed to protect against MITM (man in the 
middle) attacks and sniffing attacks, i.e. somebody else listening in 
the connection. However, if there really is a MITM attack going on, the 
attacker could simply reply without STARTTLS feature, causing 
Thunderbird to connect without encryption, and the attacker can easily 
listen in. The user would not be warned. It would be an active attack, 
passive sniffing is prevented, but still, listening without the user 
noticing is possible with this particular setting.

I bring this up now, because this happened nation-wide with a mobile 
phone 3G ISP in Germany. They altered the IP traffic (!) on port 25 so 
that the STARTTLS capability string would not be reported to the client, 
causing all "TLS if available" clients to silently fall back to no SSL, 
without warning. (Motives are up for speculation, but government is 
quite possible, given recent laws for recording email correspondings.) 
It was only noticed because there are other users who have "TLS" 
(always) enabled and could not connect. And because it was nation-wide. 
If the attack happened only on a single user and that user has "TLS if 
available", he would not notice the attack. Therefore, I call this 
setting dangerous.

I may have had some kind of valid reason in the past (ease of setup), 
but that's solved now with the new auto-configuration account setup 
dialog that we are working on. It checks, once during creation of the 
account, whether the server supports SSL or TLS. If it does, we 
configure that with the "always" setting, to prevent the above scenario. 
(I think it's highly unlikely and a bug, if a given server randomly 
switches between SSL support and no SSL support.) If the server does not 
support SSL (and also doesn't support password encryption?), we 
explicitly warn the user during setup. So, with the new setup code, we 
automatically pick the right setting.

I don't think the "TLS, if available" is important anymore, and is 
dangerous. Therefore, I propose to remove it from the UI in the Account 
Manager as well. It could stay as backend pref for edge cases and 
existing users - the Account Manager UI would show the option only when 
it's already set in the prefs, and show a warning; otherwise, the option 
would simply be hidden.

I worry about existing users, given that "TLS, if available" was the 
default so far. I would propose that TB3, when it sees such a setting in 
an existing account for the first time, informs the user, and runs a 
limited version of our probing code of the new setup dialog (just the 
backend code, different UI) to check whether the server supports TLS or 
SSL. If it does, it tells the user and asks him whether we can change 
the setting to TLS/SSL always. If the server does not support SSL, we 
inform the user (same as in the setup dialog) (and set a pref so that we 
don't run the migration code again).

_______________________________________________
dev-security mailing list
dev-security@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-security

Reply via email to