LWN.net Logo

Security

Postfix TLS plaintext injection

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. ]

Comments (none posted)

Brief items

Security quotes of the week

But their most interesting attack focused on the car stereo. By adding extra code to a digital music file, they were able to turn a song burned to CD into a Trojan horse. When played on the car's stereo, this song could alter the firmware of the car's stereo system, giving attackers an entry point to change other components on the car. This type of attack could be spread on file-sharing networks without arousing suspicion, they believe. "It's hard to think of something more innocuous than a song," said Stefan Savage, a professor at the University of California.
-- ITworld (seen at Boing Boing)

The lack of a security mindset is what accounts for upstream ripoffs of grsec features ultimately being incomplete or improperly implemented. Code will go in following an initial interest, but no single person will stick around years later to make sure it's still correct. A prime example of this is constifying of function pointers in the kernel. While in upstream it was confined to a few struct types since 2007, it was expanded a great deal in grsec and maintained until today (I'm even nice enough to make security_ops and selinux_enable read-only under KERNEXEC). Upstream never maintained constification since the initial patchset. Occasionally I'd complain about this publicly, and a spurt of interest would follow, only to be unmaintained yet again. Often times someone would make the effort of submitting all the constifying patches from grsec only to see a fraction of them applied (with no reason for the rest to not be applied). There's no eye for consistency or quality, just the name and a facade of security.
-- Brad Spengler

Of course it has taken us more than 13 years to take Nmap where it is today. So even Greg [Hoglund] had to acknowledge that he and one employee couldn't outdo us in a day. So he proposes that they "take a couple of days" to write their Nmap killer :).
-- Nmap developer Fyodor reads some HB Gary emails (the whole post is worth reading for its amusement value)

Comments (none posted)

Your passwords have been hashed

In a long-overdue upgrade, we have recently switched over to storing hashed passwords in our database. We have occasionally been taken to task (and deservedly so) for not doing that, and have finally gotten around to implementing a bcrypt-based hash for passwords. When the LWN site code was first implemented, passwords seemed like a pretty low-security item—there just wasn't much that an attacker could do if they got access to one—and the ability to remind users of their passwords seemed useful. Over time, though, it has become clear that password reuse can make the compromise of even "low security" passwords into a serious problem. Sites like ours clearly should not store passwords in plain text; we are now happy to say that we do not.

The only user-visible side of the change is in the username/password recovery process as we can no longer send you your password in email (at least we hope that's the only user-visible part, the rest should just be working invisibly in the background). Username and password recovery have been added to the Login page in case you ever need them. One thing to note, however, is that none of it will work unless we have an up-to-date email address for you in our database. We don't send very much email that you haven't requested (essentially just subscription reminders) and we definitely will not share your email address with anyone else, so please check your address via the My Account page, and update it if necessary.

Comments (3 posted)

New vulnerabilities

aaa_base: arbitrary file corruption

Package(s):aaa_base CVE #(s):CVE-2011-0461
Created:March 14, 2011 Updated:May 17, 2011
Description: From the openSUSE advisory:

The boot.localfs init script wrote a file to /dev/shm during shut-down. Since local users may create symlinks there a malicious user could cause corruption of arbitrary files.

Alerts:
SUSE SUSE-SR:2011:005 2011-04-01
SUSE SUSE-SR:2011:009 2011-05-17
openSUSE openSUSE-SU-2011:0171-1 2011-03-14

Comments (none posted)

asterisk: multiple vulnerabilities

Package(s):asterisk CVE #(s):
Created:March 10, 2011 Updated:March 16, 2011
Description: From the Fedora advisory:

The release of Asterisk 1.6.2.17 resolves several issues reported by the community and would have not been possible without your participation. Thank you!

Alerts:
Fedora FEDORA-2011-2558 2011-03-03
Fedora FEDORA-2011-2438 2011-03-02

Comments (none posted)

build: unsafe use of cpio

Package(s):build CVE #(s):CVE-2010-4226
Created:March 15, 2011 Updated:April 18, 2011
Description: From the openSUSE advisory:

The build script uses cpio to extract untrusted rpm packages for bootstrapping virtual machines. cpio is not safe to use for this task, therefore the build script now uses bsdtar instead

Alerts:
SUSE SUSE-SR:2011:005 2011-04-01
openSUSE openSUSE-SU-2011:0174-1 2011-03-15

Comments (2 posted)

cgit: denial of service

Package(s):cgit CVE #(s):CVE-2011-1027
Created:March 16, 2011 Updated:March 16, 2011
Description: The cgit server can be thrown into an infinite loop by a remote attacker using a specially crafted URL.
Alerts:
Fedora FEDORA-2011-2803 2011-03-07
Fedora FEDORA-2011-2815 2011-03-07

Comments (none posted)

chromium-browser: multiple vulnerabilities

Package(s):chromium-browser CVE #(s):CVE-2011-1108 CVE-2011-1109 CVE-2011-1113 CVE-2011-1114 CVE-2011-1115 CVE-2011-1121 CVE-2011-1122
Created:March 10, 2011 Updated:March 16, 2011
Description: From the Debian advisory:

CVE-2011-1108: Google Chrome before 9.0.597.107 does not properly implement JavaScript dialogs, which allows remote attackers to cause a denial of service (application crash) or possibly have unspecified other impact via a crafted HTML document.

CVE-2011-1109: Google Chrome before 9.0.597.107 does not properly process nodes in Cascading Style Sheets (CSS) stylesheets, which allows remote attackers to cause a denial of service or possibly have unspecified other impact via unknown vectors that lead to a "stale pointer."

CVE-2011-1113: Google Chrome before 9.0.597.107 on 64-bit Linux platforms does not properly perform pickle deserialization, which allows remote attackers to cause a denial of service (out-of-bounds read) via unspecified vectors.

CVE-2011-1114: Google Chrome before 9.0.597.107 does not properly handle tables, which allows remote attackers to cause a denial of service or possibly have unspecified other impact via unknown vectors that lead to a "stale node."

CVE-2011-1115: Google Chrome before 9.0.597.107 does not properly render tables, which allows remote attackers to cause a denial of service or possibly have unspecified other impact via unknown vectors that lead to a "stale pointer."

CVE-2011-1121: Integer overflow in Google Chrome before 9.0.597.107 allows remote attackers to cause a denial of service or possibly have unspecified other impact via vectors involving a TEXTAREA element.

CVE-2011-1122: The WebGL implementation in Google Chrome before 9.0.597.107 allows remote attackers to cause a denial of service (out-of-bounds read) via unspecified vectors, aka Issue 71960.

Alerts:
Debian DSA-2189-1 2011-03-10

Comments (none posted)

chromium-browser: multiple vulnerabilities

Package(s):chromium-browser CVE #(s):CVE-2011-0779 CVE-2011-1290
Created:March 15, 2011 Updated:March 16, 2011
Description: From the Debian advisory:

CVE-2011-0779: Google Chrome before 9.0.597.84 does not properly handle a missing key in an extension, which allows remote attackers to cause a denial of service (application crash) via a crafted extension.

CVE-2011-1290: Integer overflow in WebKit allows remote attackers to execute arbitrary code via unknown vectors, as demonstrated by Vincenzo Iozzo, Willem Pinckaers, and Ralf-Philipp Weinmann during a Pwn2Own competition at CanSecWest 2011.

Alerts:
Debian DSA-2192-1 2011-03-15

Comments (none posted)

kernel-rt: multiple vulnerabilities

Package(s):kernel-rt CVE #(s):CVE-2010-4250 CVE-2010-4648
Created:March 11, 2011 Updated:September 13, 2011
Description: From the Red Hat advisory:

Memory leak in the inotify_init() system call. In some cases, it could leak a group, which could allow a local, unprivileged user to eventually cause a denial of service. (CVE-2010-4250)

A logic error in orinoco_ioctl_set_auth() in the Linux kernel's ORiNOCO wireless extensions support implementation could render TKIP countermeasures ineffective when it is enabled, as it enabled the card instead of shutting it down. (CVE-2010-4648)

Alerts:
Ubuntu USN-1256-1 2011-11-09
Ubuntu USN-1243-1 2011-10-25
Ubuntu USN-1242-1 2011-10-25
Red Hat RHSA-2011:1253-01 2011-09-12
SUSE SUSE-SA:2011:017 2011-04-18
openSUSE openSUSE-SU-2011:0346-1 2011-04-18
Red Hat RHSA-2011:0421-01 2011-04-07
Red Hat RHSA-2011:0330-01 2011-03-10
Red Hat RHSA-2011:0498-01 2011-05-10
openSUSE openSUSE-SU-2011:0399-1 2011-04-28
Ubuntu USN-1394-1 2012-03-07

Comments (none posted)

krb5: denial of service

Package(s):krb5 CVE #(s):CVE-2011-0284
Created:March 16, 2011 Updated:April 1, 2011
Description: The krb5 key distribution center suffers from a double-free flaw which can be exploited by a remote attacker to cause the daemon to abort.
Alerts:
SUSE SUSE-SR:2011:005 2011-04-01
Fedora FEDORA-2011-3464 2011-03-16
Fedora FEDORA-2011-3462 2011-03-16
Ubuntu USN-1088-1 2011-03-15
Red Hat RHSA-2011:0356-01 2011-03-16
Gentoo 201201-13 2012-01-23

Comments (none posted)

libvpx: denial of service

Package(s):libvpx CVE #(s):CVE-2010-4489
Created:March 14, 2011 Updated:June 19, 2012
Description: From the Ubuntu advisory:

Chris Evans discovered that libvpx did not properly perform bounds checking. If an application using libvpx opened a specially crafted WebM file, an attacker could cause a denial of service.

Alerts:
Ubuntu USN-1087-1 2011-03-11
openSUSE openSUSE-SU-2012:0759-1 2012-06-19

Comments (none posted)

openldap: multiple vulnerabilities

Package(s):openldap CVE #(s):CVE-2011-1024 CVE-2011-1025 CVE-2011-1081
Created:March 11, 2011 Updated:September 26, 2011
Description: From the Red Hat advisory:

A flaw was found in the way OpenLDAP handled authentication failures being passed from an OpenLDAP slave to the master. If OpenLDAP was configured with a chain overlay and it forwarded authentication failures, OpenLDAP would bind to the directory as an anonymous user and return success, rather than return failure on the authenticated bind. This could allow a user on a system that uses LDAP for authentication to log into a directory-based account without knowing the password. (CVE-2011-1024)

It was found that the OpenLDAP back-ndb back end allowed successful authentication to the root distinguished name (DN) when any string was provided as a password. A remote user could use this flaw to access an OpenLDAP directory if they knew the value of the root DN. Note: This issue only affected OpenLDAP installations using the NDB back-end, which is only available for Red Hat Enterprise Linux 6 via third-party software. (CVE-2011-1025)

A flaw was found in the way OpenLDAP handled modify relative distinguished name (modrdn) requests. A remote, unauthenticated user could use this flaw to crash an OpenLDAP server via a modrdn request containing an empty old RDN value. (CVE-2011-1081)

Alerts:
Fedora FEDORA-2011-3627 2011-03-19
Pardus 2011-76 2011-05-26
SUSE SUSE-SR:2011:007 2011-04-19
openSUSE openSUSE-SU-2011:0363-1 2011-04-18
openSUSE openSUSE-SU-2011:0359-1 2011-04-18
openSUSE openSUSE-SU-2011:0356-1 2011-04-18
CentOS CESA-2011:0346 2011-04-14
Ubuntu USN-1100-1 2011-03-31
Mandriva MDVSA-2011:055 2011-03-30
Mandriva MDVSA-2011:056 2011-03-30
Red Hat RHSA-2011:0346-01 2011-03-10
Red Hat RHSA-2011:0347-01 2011-03-10

Comments (none posted)

perl-mail-box: boundary guessing

Package(s):perl-Mail-Box CVE #(s):
Created:March 11, 2011 Updated:March 16, 2011
Description: From the Fedora advisory:

2.097 now randomizes boundary string to avoid (undemonstrated) security risks with boundary guessing.

Alerts:
Fedora FEDORA-2011-2531 2011-03-03
Fedora FEDORA-2011-2531 2011-03-03
Fedora FEDORA-2011-2541 2011-03-03

Comments (none posted)

php-zendframework: cross-site scripting

Package(s):php-ZendFramework CVE #(s):
Created:March 14, 2011 Updated:March 16, 2011
Description: From the Zend Framework advisory:

The default error handling view script generated using Zend_Tool failed to escape request parameters when run in the "development" configuration environment, providing a potential XSS attack vector.

Alerts:
Fedora FEDORA-2011-2678 2011-03-05
Fedora FEDORA-2011-2689 2011-03-05

Comments (none posted)

pidgin: denial of service

Package(s):pidgin CVE #(s):CVE-2011-1091
Created:March 14, 2011 Updated:November 10, 2011
Description: From the Red Hat bugzilla:

Multiple NULL pointer dereference flaws were found in the way Yahoo protocol plug-in of the Pidgin instant messaging client handled malformed YMSG packets (SMS messages and notification packets). A remote, authenticated user could use this flaw to cause denial of service (Pidgin crash) via specially-crafted notification message. The SMS messages handling issue is exploitable only via specially-crafted SMS message, sent from remote, malicious Yahoo server.

Alerts:
Ubuntu USN-1273-1 2011-11-21
CentOS CESA-2011:1371 2011-11-09
CentOS CESA-2011:1371 2011-10-14
Scientific Linux SL-pidg-20111013 2011-10-13
Red Hat RHSA-2011:1371-01 2011-10-13
Pardus 2011-59 2011-03-22
Mandriva MDVSA-2011:050 2011-03-21
Fedora FEDORA-2011-3132 2011-03-11
Fedora FEDORA-2011-3113 2011-03-11
Red Hat RHSA-2011:0616-01 2011-05-19
openSUSE openSUSE-SU-2012:0066-1 2012-01-09

Comments (none posted)

vsftpd: denial of service

Package(s):vsftpd CVE #(s):CVE-2011-0762
Created:March 10, 2011 Updated:October 11, 2011
Description: From the CVE entry:

The vsf_filename_passes_filter function in ls.c in vsftpd before 2.3.3 allows remote authenticated users to cause a denial of service (CPU consumption and process slot exhaustion) via crafted glob expressions in STAT commands in multiple FTP sessions, a different vulnerability than CVE-2010-2632.

Alerts:
Gentoo 201110-07 2011-10-10
Debian DSA-2305-1 2011-09-19
CentOS CESA-2011:0337 2011-04-14
Ubuntu USN-1098-1 2011-03-29
SUSE SUSE-SR:2011:009 2011-05-17
openSUSE openSUSE-SU-2011:0435-1 2011-05-06
Mandriva MDVSA-2011:049 2011-03-21
Fedora FEDORA-2011-2615 2011-03-04
Fedora FEDORA-2011-2590 2011-03-04
CentOS CESA-2011:0337 2011-03-10
Red Hat RHSA-2011:0337-01 2011-03-09

Comments (none posted)

wireshark: denial of service

Package(s):wireshark CVE #(s):CVE-2011-1143 CVE-2011-1138
Created:March 14, 2011 Updated:April 19, 2011
Description: From the CVE entries:

epan/dissectors/packet-ntlmssp.c in the NTLMSSP dissector in Wireshark before 1.4.4 allows remote attackers to cause a denial of service (NULL pointer dereference and application crash) via a crafted .pcap file. (CVE-2011-1143)

Off-by-one error in the dissect_6lowpan_iphc function in packet-6lowpan.c in Wireshark 1.4.0 through 1.4.3 on 32-bit platforms allows remote attackers to cause a denial of service (application crash) via a malformed 6LoWPAN IPv6 packet. (CVE-2011-1138)

Alerts:
Gentoo 201110-02 2011-10-09
SUSE SUSE-SR:2011:007 2011-04-19
openSUSE openSUSE-SU-2011:0347-1 2011-04-18
CentOS CESA-2011:0370 2011-04-14
CentOS CESA-2011:0370 2011-03-22
Red Hat RHSA-2011:0370-01 2011-03-21
Pardus 2011-57 2011-03-21
Fedora FEDORA-2011-2620 2011-03-04
Fedora FEDORA-2011-2632 2011-03-04
Red Hat RHSA-2012:0509-01 2012-04-23
Scientific Linux SL-wire-20120423 2012-04-23
Oracle ELSA-2012-0509 2012-04-23
CentOS CESA-2012:0509 2012-04-24

Comments (none posted)

wordpress: multiple vulnerabilities

Package(s):wordpress CVE #(s):CVE-2011-0700 CVE-2011-0701
Created:March 11, 2011 Updated:September 18, 2012
Description: From the Debian advisory:

CVE-2011-0700: Input passed via the post title when performing a "Quick Edit" or "Bulk Edit" action and via the "post_status", "comment_status", and "ping_status" parameters is not properly sanitised before being used. Certain input passed via tags in the tags meta-box is not properly sanitised before being returned to the user.

CVE-2011-0701: Wordpress incorrectly enforces user access restrictions when accessing posts via the media uploader and can be exploited to disclose the contents of e.g. private or draft posts.

Alerts:
Fedora FEDORA-2011-3746 2011-03-21
Fedora FEDORA-2011-3738 2011-03-21
Debian DSA-2190-1 2011-03-11

Comments (none posted)

Page editor: Jake Edge
Next page: Kernel development>>

Copyright © 2011, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds