zlib compression, the exploit, and OpenSSH

ewheeler at kaico.com ewheeler at kaico.com
Thu Mar 14 07:07:34 EST 2002


  Attached is a zlib advisory and a debug dump of ssh with compression
enabled.  Most of the debug is superflous, so I have underlined the two
points to look at.  When creating an ssh connection, compression on the
line is done *before* authentication -- This means an unauthorized
attacker could, conceivable, leverage root access by connecting with to
the ssh server requesting zlib compression and sending a specialy tailored
packet.  The CERT advisory for zlib's bug is also attached.

  I would like to start a discussion on the following points:

1.  What is the exposure to this bug?
2.  What are the logistics of moving all non-critical external library
calls (zlib in this case, but others if they exist) *after*
authentication?
3.  Does OpenSSH statically link (or can it/does it by default) to the
zlib library -- will updating the zlib library to 1.1.4 take care of the
situation?
4.  Are there any proactive measures besides moving non-critical library
calls after authentication which could be done within the OpenSSH code?


Any input on this matter would be greatly appreciated.

--Eric


OpenSSH_2.9p2, SSH protocols 1.5/2.0, OpenSSL 0x0090602f
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Seeding random number generator
debug1: Rhosts Authentication disabled, originating port will not be
trusted.
debug1: restore_uid
debug1: ssh_connect: getuid 501 geteuid 0 anon 1
debug1: Connecting to raid [63.105.24.128] port 22.
debug1: temporarily_use_uid: 501/501 (e=0)
debug1: restore_uid
debug1: temporarily_use_uid: 501/501 (e=0)
debug1: restore_uid
debug1: Connection established.
debug1: read PEM private key done: type DSA
debug1: read PEM private key done: type RSA
debug1: identity file /home/eric/.ssh/identity type 0
debug1: identity file /home/eric/.ssh/id_rsa type -1
debug1: identity file /home/eric/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version 
OpenSSH_2.5.1p2
debug1: match: OpenSSH_2.5.1p2 pat ^OpenSSH_2\.5\.[012]
Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_2.9p2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 zlib
debug1: kex: client->server aes128-cbc hmac-md5 zlib
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST_OLD sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: dh_gen_key: priv key bits set: 142/256
debug1: bits set: 1025/2049
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'raid' is known and matches the DSA host key.
debug1: Found key in /home/eric/.ssh/known_hosts2:1
debug1: bits set: 1077/2049
debug1: len 55 datafellows 49152
debug1: ssh_dss_verify: signature correct
debug1: kex_derive_keys
debug1: newkeys: mode 1
debug1: Enabling compression at level 6.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug1: SSH2_MSG_NEWKEYS sent
debug1: waiting for SSH2_MSG_NEWKEYS
debug1: newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: done: ssh_kex2.
debug1: send SSH2_MSG_SERVICE_REQUEST
debug1: service_accept: ssh-userauth
debug1: got SSH2_MSG_SERVICE_ACCEPT
debug1: authentications that can
continue: publickey,password,keyboard-interactive
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug1: next auth method to try is publickey
debug1: try privkey: /home/eric/.ssh/id_rsa
debug1: try pubkey: /home/eric/.ssh/id_dsa
debug1: input_userauth_pk_ok: pkalg ssh-dss blen 433 lastkey 0x8094f80
hint 2
debug1: read PEM private key done: type DSA
debug1: sig size 20 20
debug1: ssh-userauth2 successful: method publickey
debug1: channel 0: new [client-session]
debug1: channel_new: 0
debug1: send channel open 0
debug1: Entering interactive session.
debug1: client_init id 0 arg 0
debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Requesting authentication agent forwarding.
debug1: channel request 0: shell
debug1: channel 0: open confirm rwindow 0 rmax 16384


-- 

Eric Wheeler
Network Administrator
KAICO
20417 SW 70th Ave.
Tualatin, OR 97062
www.kaico.com
Voice: 503.692.5268




---------- Forwarded message ----------
Date: Tue, 12 Mar 2002 13:48:06 -0500 (EST)
From: CERT Advisory <cert-advisory at cert.org>
To: cert-advisory at cert.org
Subject: CERT Advisory CA-2002-07 Double Free Bug in zlib Compression
    Library



-----BEGIN PGP SIGNED MESSAGE-----

CERT Advisory CA-2002-07 Double Free Bug in zlib Compression Library

   Original release date: March 12, 2002
   Last revised: --
   Source: CERT/CC

   A complete revision history can be found at the end of this file.

Systems Affected

     * Any  software  that  is  linked  to  zlib  1.1.3 or earlier may be
       affected
     * Data  compression libraries derived from zlib 1.1.3 or earlier may
       contain a similar bug

Overview

   There  is  a  bug  in  the  zlib compression library that may manifest
   itself  as a vulnerability in programs that are linked with zlib. This
   may  allow  an  attacker to conduct a denial-of-service attack, gather
   information, or execute arbitrary code.

   It  is important to note that the CERT/CC has not received any reports
   of  exploitation of this bug. Based on the information available to us
   at  this  time,  it  is difficult to determine whether this bug can be
   successfully  exploited.  However,  given the widespread deployment of
   zlib, we have published this document as a proactive measure.

I. Description

   There is a bug in the decompression algorithm used by the popular zlib
   compression   library.   If   an   attacker   is   able   to   pass  a
   specially-crafted  block  of invalid compressed data to a program that
   includes  zlib,  the  program's attempt to decompress the crafted data
   can  cause  the  zlib routines to corrupt the internal data structures
   maintained by malloc.

   The  bug  results  from  a  programming  error that causes segments of
   dynamically  allocated  memory  to  be  released more than once (i.e.,
   "double-freed"). Specifically, when inftrees.c:huft_build() encounters
   the   crafted   data,   it   returns   an  unexpected  Z_MEM_ERROR  to
   inftrees.c:inflate_trees_dynamic().  When a subsequent call is made to
   infblock.c:inflate_blocks(), the inflate_blocks function tries to free
   an internal data structure a second time.

   Because   this   bug   interferes   with  the  proper  allocation  and
   deallocation  of dynamic memory, it may be possible for an attacker to
   influence  the  operation  of  programs  that  include  zlib.  In most
   circumstances,  this influence will be limited to denial of service or
   information  leakage, but it is theoretically possible for an attacker
   to  insert  arbitrary  code into a running program. This code would be
   executed with the permissions of the vulnerable program.

   The CERT/CC is tracking this issue as VU#368819. This reference number
   corresponds to CVE candidate CAN-2002-0059.

II. Impact

   This  bug may introduce vulnerabilities into any program that includes
   the  affected  library. Depending upon how and where the zlib routines
   are  called  from  the  given program, the resulting vulnerability may
   have  one  or  more  of  the  following  impacts:  denial  of service,
   information leakage, or execution of arbitrary code.

III. Solution

Upgrade your version of zlib

   The  maintainers  of  zlib have released version 1.1.4 to address this
   vulnerability.  Upgrade any software that is linked to or derived from
   an earlier version of zlib. The latest version of zlib is available at
   http://www.zlib.org

   These are the MD5 checksums for zlib version 1.1.4:

     abc405d0bdd3ee22782d7aa20e440f08 zlib-1.1.4.tar.gz
     9bf1d36ced334b0cf1f996f5c8171018 zlib114.zip

Apply a patch from your vendor

   The  zlib  compression  library  is  freely available and used by many
   vendors   in  a  wide  variety  of  applications.  Any  one  of  these
   applications  may  contain vulnerabilities that are introduced by this
   vulnerability.

   Appendix A contains information provided by vendors for this advisory.
   As  vendors report new information to the CERT/CC, we will update this
   section  and note the changes in our revision history. If a particular
   vendor  is  not  listed  below,  we  have not received their comments.
   Please contact your vendor directly.

Appendix A. - Vendor Information

   This  appendix  contains  information  provided  by  vendors  for this
   advisory.  As  vendors  report new information to the CERT/CC, we will
   update this section and note the changes in our revision history. If a
   particular  vendor  is  not  listed  below, we have not received their
   comments.

Apple Computer, Inc.

   Mac OS X and Mac OS X Server do not contain this vulnerability.

Compaq Computer Corporation

   COMPAQ COMPUTER CORPORATION
   -----------------------------
   x-ref: SSRT0818 zlib

   At  the  time  of  writing this document, Compaq continues to evaluate
   this potential problem and impacts to Compaq released software. Compaq
   will implement solutions based on the conclusion of this evaluation as
   necessary.  Compaq  will provide notice of any new patches as a result
   any  required  solution through standard patch notification procedures
   and be available from your normal Compaq Services support channel.
   COMPAQ COMPUTER CORPORATION
   -----------------------------

Conectiva Linux

   Conectiva  Linux  supported  versions (5.0, 5.1, 6.0, 7.0, ferramentas
   graficas and ecomerce) are affected by the zlib vulnerability. Updates
   will be sent to our security mailing lists and be available at our ftp
   site  and  mirrors.  The  updates  will  include a new version of zlib
   itself and also other packages which include their own version of zlib
   or are linked statically to the system-wide copy of zlib.

Engarde

   EnGarde Secure Linux Community and Professional are both vulnerable to
   the  zlib  bugs.  Guardian  Digital  addressed  this  vulnerability in
   ESA-20020311-008 which may be found at:

     http://www.linuxsecurity.com/advisories/other_advisory-1960.html

   EnGarde  Secure Professional users may upgrade their systems using the
   Guardian Digital Secure Network.

FreeBSD

   FreeBSD  is  not  vulnerable,  as  the  FreeBSD  malloc implementation
   detects  and complains about several programming errors including this
   kind of double free.

Fujitsu

   Fujitsu's   UXP/V  operating  system  is  not  affected  by  the  zlib
   vulnerability because it does not support zlib.

Hewlett-Packard Company

   HP is not vulnerable.

IBM Corporation

   IBM's   AIX   operating   system,   version   5.1,   ships  with  open
   source-originated  zlib  that  is used with the Redhat Package Manager
   (rpm)  to  install  applications  that  are  included in the AIX-Linux
   Affinity Toolkit. zlib (libz.a) is a shared library in AIX. AIX 5.1 is
   susceptible  to  the  described vulnerability. AIX 4.3.x does not ship
   with zlib, but customers who install zlib and use it will be similarly
   vulnerable.  IBM  will  make  the patched version of zlib available as
   soon as it is made available to us.

OpenBSD

   OpenBSD  is  not vulnerable as OpenBSD's malloc implementation detects
   double freeing of memory. The zlib shipped with OpenBSD has been fixed
   in OpenBSD-current in January 2002.

Openwall GNU/*/Linux

   All  versions  of  Openwall  GNU/*/Linux (Owl) prior to the 2002/02/15
   Owl-current   snapshot   are   affected   by   the   zlib  double-free
   vulnerability.  Owl-current after 2002/02/15 includes the proper fixes
   in  its  userland  packages.  In order to not place the users of other
   vendors'  products  at  additional  risk,  we  have  agreed  to  delay
   documenting  this  as a security change and including the fixes in Owl
   0.1-stable  until  there's a coordinated public announcement. While we
   don't  normally  support this kind of a policy (releasing a fix before
   there's an announcement), this time handling the vulnerability in this
   way  was  consistent with the state of things by the time the (already
   publicly known) bug was first realized to be a security vulnerability.

   The  zlib bug could affect the following Owl packages: gnupg, openssh,
   rpm,  texinfo  (not  necessarily  in  a security sense). Of these, the
   OpenSSH  could potentially allow for an active remote attack resulting
   in a root compromise. If only SSH protocol version 1 is allowed in the
   OpenSSH  server  this is reduced to a local attack, but reverse remote
   attack  possibilities  by a malicious server remain. Additionally, any
   third-party software that makes use of the provided zlib library could
   be affected.

   Parts  of  the  Linux 2.2 kernel included in Owl were also affected by
   the  vulnerability.  Fortunately,  those  parts  (Deflate  compression
   support  for PPP and the experimental Deflate compression extension to
   IrDA)  are  normally  not  used  by the Owl userland. The bug has been
   corrected  starting  with  Linux 2.2.20-ow2 which has been made public
   and  a part of both Owl-current and Owl 0.1-stable on 2002/03/03. This
   change,  however,  will  only  be documented in the publicly-available
   change logs on the coordinated public announcement date.

Red Hat, Inc.

   Red  Hat  Linux  ships  with a zlib library that is vulnerable to this
   issue.  Although  most  packages  in Red Hat Linux use the shared zlib
   library we have identified a number of packages that either statically
   link to zlib or contain an internal version of the zlib code.

   Updates  to  zlib  and these packages as well as our advisory note are
   available from the following URL. Users of the Red Hat Network can use
   the up2date tool to automatically upgrade their systems.

     http://www.redhat.com/support/errata/RHSA-2002-026.html

   Red  Hat  would  like  to thank CERT/CC for their help in coordinating
   this issue with other vendors.

SGI

   SGI  acknowledges  the  zlib  vulnerabilities  reported by CERT and is
   currently  investigating.  No further information is available at this
   time.

   For  the  protection  of  all  our  customers,  SGI does not disclose,
   discuss  or  confirm  vulnerabilities  until  a full investigation has
   occurred  and any necessary patch(es) or release streams are available
   for all vulnerable and supported IRIX operating systems. Until SGI has
   more  definitive  information  to provide, customers are encouraged to
   assume   all   security   vulnerabilities   as  exploitable  and  take
   appropriate  steps  according  to  local  site  security  policies and
   requirements.  As  further  information  becomes available, additional
   advisories  will  be  issued  via  the normal SGI security information
   distribution   methods   including   the   wiretap   mailing  list  on
   http://www.sgi.com/support/security/.

XFree86

   XFree86 versions 4.0 through 4.2.0 include zlib version 1.0.8. XFree86
   3.x  includes  zlib version 1.0.4. The zlib code included with XFree86
   is  only  used on some platforms. This is determined by the setting of
   HasZlib   in  the  imake  config  files  in  the  xc/config/cf  source
   directory.  If  HasZlib  is  set  to  YES  in the platform's vendor.cf
   file(s),  then  the  system-provided  zlib  is  used  instead  of  the
   XFree86-provided  version.  XFree86  uses  the system-provided zlib by
   default only on the following platforms:

     FreeBSD 2.2 and later
     NetBSD 1.2.2 and later
     OpenBSD
     Darwin
     Debian Linux

   The  zlib  code in XFree86 has been fixed in the CVS repository (trunk
   and  the  xf-4_2-branch branch) as of 14 February 2002. A source patch
   for XFree86 4.2.0 will be available from
   ftp://ftp.xfree86.org/pub/XFree86/4.2.0/fixes/.

   The  following  XFree86 4.2.0 binary distributions provided by XFree86
   include and use a vulnerable version of zlib:

     Linux-alpha-glibc22
     Linux-ix86-glibc22

   When   updated   binaries   are  available,  it'll  be  documented  at
   http://www.xfree86.org/4.2.0/UPDATES.html.

   To  check  if  an  installation  of  XFree86 includes zlib, see if the
   following file exists:

     /usr/X11R6/lib/libz.a

   To  check if an XFree86 X server is dynamically linked with zlib, look
   for    a    line   containing   'libz'   in   the   output   of   'ldd
   /usr/X11R6/bin/XFree86'.

   Various vendors repackage and distribute XFree86, and may use settings
   and configurations different from those described here.

zlib.org

   All  users  of zlib versions 1.1.3 or earlier should obtain the latest
   version,  1.1.4  or later, from http://www.zlib.org, in order to avoid
   this  vulnerability  as  well  as  other  possible  vulnerabilities in
   versions prior to 1.1.3 when decompressing invalid data.

Appendix B. - References

     * http://bugzilla.gnome.org/show_bug.cgi?id=70594
     * http://www.kb.cert.org/vuls/id/368819
     * http://www.libpng.org/pub/png/pngapps.html
     * http://www.redhat.com/support/errata/RHSA-2002-026.html
     _________________________________________________________________

   The  CERT/CC  thanks  Owen  Taylor  and  Mark Cox of Red Hat, Inc. for
   reporting this vulnerability. We also thank Mark Adler of zlib.org for
   contributing  to  our research and Matthias Clasen for contributing to
   the discovery of this vulnerability.
     _________________________________________________________________

   This document was written by Jeffrey P. Lanza.
   ______________________________________________________________________

   This document is available from:
   http://www.cert.org/advisories/CA-2002-07.html
   ______________________________________________________________________

CERT/CC Contact Information

   Email: cert at cert.org
          Phone: +1 412-268-7090 (24-hour hotline)
          Fax: +1 412-268-6989
          Postal address:
          CERT Coordination Center
          Software Engineering Institute
          Carnegie Mellon University
          Pittsburgh PA 15213-3890
          U.S.A.

   CERT/CC   personnel   answer  the  hotline  08:00-17:00  EST(GMT-5)  /
   EDT(GMT-4)  Monday  through  Friday;  they are on call for emergencies
   during other hours, on U.S. holidays, and on weekends.

Using encryption

   We  strongly  urge you to encrypt sensitive information sent by email.
   Our public PGP key is available from

   http://www.cert.org/CERT_PGP.key

   If  you  prefer  to  use  DES,  please  call the CERT hotline for more
   information.

Getting security information

   CERT  publications  and  other security information are available from
   our web site

   http://www.cert.org/

   To  subscribe  to  the CERT mailing list for advisories and bulletins,
   send  email  to majordomo at cert.org. Please include in the body of your
   message

   subscribe cert-advisory

   *  "CERT"  and  "CERT  Coordination Center" are registered in the U.S.
   Patent and Trademark Office.
   ______________________________________________________________________

   NO WARRANTY
   Any  material furnished by Carnegie Mellon University and the Software
   Engineering  Institute  is  furnished  on  an  "as is" basis. Carnegie
   Mellon University makes no warranties of any kind, either expressed or
   implied  as  to  any matter including, but not limited to, warranty of
   fitness  for  a  particular purpose or merchantability, exclusivity or
   results  obtained from use of the material. Carnegie Mellon University
   does  not  make  any warranty of any kind with respect to freedom from
   patent, trademark, or copyright infringement.
     _________________________________________________________________

   Conditions for use, disclaimers, and sponsorship information

   Copyright 2002 Carnegie Mellon University.

   Revision History
Mar 12, 2002:  Initial release

-----BEGIN PGP SIGNATURE-----
Version: PGP 6.5.8

iQCVAwUBPI5JsqCVPMXQI2HJAQFAvAP/f380BKQqJmAVsjL/482b86Mw8RL5k+Ov
+ww1YfccKHTJdDlsqpIgX8LV59OII4KL31lAYrMrT2wJopY7wn7OSUvX7Z2aOLYE
0XQyjm5rT2mP9IKybBsHkXwHlTWZOi9iGnd9zSDndBgEaBifolcOh87z4zkE+noS
OzDiRjPbg7s=
=zhZM
-----END PGP SIGNATURE-----





More information about the openssh-unix-dev mailing list