By Jake Edge
March 16, 2011
Transitioning between states, or contexts—unencrypted to encrypted
for example—is
one place where security flaws can sometimes hide. We have seen one example
of that in the TLS renegotiation
vulnerability that cropped up in late 2009. More recently, a somewhat
similar problem
was discovered in the Postfix mail transfer agent (MTA) (as well as
other mail server software and MTAs). The problem lies in improperly
handling the transition between states such that the boundaries that should
exist
between them are not enforced.
The problem came to light in a lengthy post on
March 7 to the
postfix-users mailing list by Postfix creator Wietse Venema, but he had
discovered it back in January. Venema silently fixed the problem in
Postfix at that time, and then worked with CERT to coordinate fixes for
other affected projects and vendors. That work has been completed, so
the details are now being made public.
The problem occurs when Postfix changes from unencrypted to encrypted mode
via the STARTTLS SMTP command. Venema goes into some detail about
how Postfix makes that switch (at least at a high level), but the basic
flaw is that it doesn't flush its buffers after it switches over to the TLS
encrypted mode. That allows a man-in-the-middle attacker to inject some
plaintext commands into the SMTP data stream between the STARTTLS
and the client's first TLS-encrypted SMTP commands.
Venema demonstrates the problem using the OpenSSL s_client command
with a minor modification. Using that program, one can easily test for the
problem.
In the example, the STARTTLS command is followed directly by the
RSET command, which just resets the state (sender and receiver
addresses for instance) of any in-progress mail transaction. In an
affected MTA, the TLS
negotiation will take place, so that subsequent traffic is encrypted, but
the server will read the buffered RSET command even though it was
sent prior to the establishment of the TLS session. But, since
the server believes it is in encrypted mode, it treats the RSET as
being in that context.
Obviously, a RSET is not particularly harmful. There are other
things an attacker could do, as Venema mentions:
How would an attacker exploit this? It would play man-in-the-middle
on the connection between SMTP client and server, perhaps using ARP
spoofing at a public WIFI access point. Instead of adding a harmless
RSET command, it could steal email or authentication credentials.
The exploits would look similar to those described for the TLS
renegotiation flaw. If the attacker can predict what commands a client
will send (which isn't terribly difficult at least for SMTP), they can
prefix their own set of commands and relay the server responses to the
victim. Typically, the attacker commands will leave the server in a kind
of dangling state waiting for the client to send data that will complete
the commands. The classic example is for the attacker to send the SMTP
DATA
command after setting the from and to addresses appropriately; all of the
commands the client sends are then included into the email that gets sent to
the attacker.
Clients that don't check the TLS certificate are, in some sense, unaffected
by this problem. They are always vulnerable to man-in-the-middle attacks
that don't need to rely upon tricks like this plaintext injection. But
clients that do check those certificates were at risk. Given that
even security-conscious users are much more
inclined to use a random open WiFi access point because they are using
encrypted communications, this vulnerability could be used to capture a lot
of outgoing mail—or worse.
Venema also points out that part of the problem in Postfix was that it was
written to adhere to the "robustness principle" (aka Postel's Law):
"Be conservative in what you send; be liberal in what you
accept". The idea is that protocol implementations should strive to
only send compliant messages, but to accept non-compliant messages from
others when the intent is clear. Venema puts it this way:
This reflects what once was the primary mission of Postfix: to deliver
mail, not to force other systems to implement all the Internet RFCs
correctly. Nowadays, strict protocol compliance is becoming a requirement
for senders to get their email delivered. As this episode shows, stricter
protocol enforcement by receivers can bring security benefits, besides
blocking spambots.
Sadly in some ways, the robustness principle has
been generally deprecated over the years as attackers (and other malicious
entities such as spammers) have exploited the liberal acceptance of
messages to further their aims. It has also allowed ill-behaved programs
to continue to exist well past the time they should have been fixed.
Strict protocol compliance in both
directions is now the norm.
The full message from Venema is well worth reading as it provides many more
details than other advisories generally do. It should also be something of
a wakeup call to other developers of servers that switch between contexts
(either switching from plaintext to encrypted or by encryption
renegotiation). Looking closely at those transitions might just turn up a
hole or two. Hopefully if bugs like that do get discovered, the developers
will put out an advisory as informative as Venema's.
[ We would like to thank Brad Hards for giving us a heads-up about this
issue. ]
(
Log in to post comments)