Bugtraq mailing list archives
Alteon ACEdirector signature/security bug
From: Dave Plonka <plonka () doit wisc edu>
Date: Fri, 25 Jan 2002 16:09:40 -0600
This is to inform you of a bug in the Nortel Alteon ACEdirector
product. In some circumstances, this bug raises a security issue since
HTTP clients could exploit it to determine the IP addresses of
ostensibly "hidden" web servers that are load-balanced by the
ACEdirector. In more circumstances, this bug also enables someone to
determine whether or not a given Internet web service utilizes
ACEdirector equipment by remotely probing that service's IP address.
BACKGROUND
The Nortel/Alteon ACEdirector product
("http://www.nortelnetworks.com/products/01/acedir/") has a feature
called "Server Load Balancing" (SLB). This feature can be used to load
balance incoming HTTP requests made to one virtual IP (vip) address
amongst the real IP (rip) addresses of multiple HTTP servers. When
enabling an additional feature called "Cookie-Based Persistence", the
ACEdirector observes the value of a specific HTTP cookie (when it is
present in client request packets) and uses it to persistently map a
series of HTTP client requests to the the same one of the real HTTP
servers amongst which it is load balancing. This results in the
benefit of the the same client to be directed to the same server as
long as the client keeps supplying the same cookie value. This
persistence is advantagous and sometimes necessary for particular
web-based applications that cache client session information on the web
server.
PROBLEM
While running Alteon WebOS 9.0 software, a couple of problems have been
identified when an ACEdirector is performing server load balancing with
cookie-based persistence enabled. (An example of such a configuration
is included below.) These problems are:
1) The ACEdirector mishandles TCP streams from HTTP clients that make
use of the TCP `half-close' feature. This errant behavior could be
used as a signature to identify ACEdirector equipment on the
Internet. It is possible for an HTTP client to craft an HTTP
request which will elicit erroneous behavior: either (a) the HTTP
session will terminate with no information being returned to client
or (b) the client's session will block indefinitely. See W. Richard
Stevens `TCP/IP Illustrated Volume 1 for a complete discussion of
the TCP half-close feature.
Current versions of commercial browsers such as Netscape and
Internet Explorer do not appear to utilize TCP's half-close feature,
so users of these applications are unlikely to experience the direct
effects of this problem. However, if elicited by an unusual web
client application such as nc (a.k.a. "netcat"), a web "spider", or
a custom perl script, this erroneous behavior essentially discloses
to the client that the web service may be load-balanced by the
ACEdirector product. See the perl script below, named
"acedirector_request", for an example of how to elicit this
erroneous behavior.
2) Furthermore, by crafting and sending a peculiar HTTP request to the
ACEdirector's virtual IP address (vip), it is sometimes possible for
an HTTP client to discover the real IP address(es) of the "hidden"
HTTP server(s). During experimentation, it has been observed that
it is possible to cause the ACEdirector to erroneously forwards
packets back to that client directly from those "hidden" HTTP
server(s). (Normally, in a configuration such as that shown below,
the ACEdirector would rewrite the source IP address and port number
of the packet before forwarding it back to the HTTP client, thereby
keeping the HTTP server(s) real identity hidden.)
This is a potential security issue since one can theoretically
determine the IP addresses of the hidden servers that are part of a
load-balanced system, possibly opening them up to direct attack from
malicious parties unless additional firewalling policies are
employed. The "acedirector_request" perl script below, when invoked
with the "-c" (cookie) option is one example of how to elicit the
erroneous behavior described. If an approproiate cookie name or
name prefix is specified for the web service in question (e.g. often
"ASPSESSIONID" for Microsoft web server applications) the client
running this script will often receive a portion of the HTTP
response as unexpected packets from one of the HTTP servers real IP
addresses. The client host's TCP implementation will usually
respond with a TCP RST (ReSeT) packet to each of these unexpected
packets because these packets headers contain a source IP address
and TCP port numbers that were previously known only to the Alteon
ACEdirector.
To put it another way, the ACEdirector will sometimes "leak" packets
from a hidden web server's real IP address to a client which had
previously established a connection to the ACEdirector's virtual IP
address but has since been "half-closed" by the client. Presumably
this leak occurs because the ACEdirector erroneously flushes an HTTP
connection's state information nearly immediately after the
half-close occurs, disrupting the web servers session. After it has
"forgotten" that session, it subsequently behaves as a normal
ethernet switch by simply forwarding subsequent packets to the
client without rewriting the IP address and port number of the
packet headers.
SOLUTION
No solution has been determined at this time. This problem was
reported to Nortel and we prepared traces showing the errant behavior.
This resulted in Nortel Networks Case Number 011211-76677 which was
opened December 11, 2001.
As of January 25, 2002, we had not received any case update, so we
visited Nortel's online tracking system which shows that the case has
been _closed_ with these notes:
This is not considered to be a high priority bug as most browsers
that would be affected by half open connection states do not send
cookie requests in this manner [...]
Not Applicable to any real world scenario.
WORKAROUND
When using the ACEdirector in the configuration described, it is
insufficient to merely configure server load balancing on an
ACEdirector to safely hide the identity of the HTTP servers from the
clients.
If you don't wish HTTP clients to be able to discover the real IP
addresses of the "hidden" HTTP servers (so that they could attempt to
interact with those servers directly), one workaround is to introduce a
firewall between the clients and the ACEdirector which prevents HTTP
clients from sending or receiving packets directly to or from the IP
addresses of the real HTTP servers.
EXAMPLE CONFIGURATION
The following is a sample of the portions of the ACEdirector
configuration that are relavant to the problems described above:
# Enable Server Load Balancing:
/c/slb
on
# Define one or more "real" servers:
/c/slb/real 20
ena
rip 10.42.69.10
/c/slb/real 21
ena
rip 10.42.69.11
# Define a group of "real" servers:
/c/slb/group 20
metric roundrobin
health http
add 20
add 21
# Define a "virtual" server:
/c/slb/virt 20
ena
vip 10.69.42.10
# Configure the virtual server so that it will load balance the HTTP
# service, and enable cookie-based persistence:
/c/slb/virt 20/service http
group 20
dbind ena
/c/slb/virt 20/service 80/pbind cookie passive ASPSESSIONID* 1 24 disable
/c/slb/virt 20/service 80/rcount 10
ATTACHED SCRIPT: "acedirector_request"
usage: acedirector_request [-c COOKIE] web_server
When used on a "real" web server, should return the results of a "GET /".
When used on an ACEdirector, it will report:
web_server did not response to TCP half-closed request.
It might be an ACEdirector.
If you use the "-c COOKIE" option it will report "leaked" packets,
e.g. "-c ASPSESSIONID" for an ACEdirector configured as shown above.
This method by which this script shows leaked packets is a total kludge
in that it launches tcpdump(1). At that time, hit CTRL-C to break out
of it after a reasonable amount of time. (If one wanted to automate
this exploit, using Net::RawIP with a timeout might be preferable.)
DISCLAIMER
Use the "acedirector_request" script to test your web servers or
ACEdirector equipment at your own risk. AFAIK, the script is totally
innocuous when testing an HTTP server that allows TCP half-close such
as IIS or Apache - it simply performs a "GET /". When testing an
ACEdirector, it appears not to cause any harm and simply elicits the
erroneous behavior.
--
plonka () doit wisc edu http://net.doit.wisc.edu/~plonka ARS:N9HZF Madison, WI
Attachment:
acedirector_request
Description:
Current thread:
- Alteon ACEdirector signature/security bug Dave Plonka (Jan 25)
