26th Sep 2002 [SBWID-5270]
COMMAND
FreeBSD syncache/syncookies denial of service
SYSTEMS AFFECTED
FreeBSD 4.5-RELEASE
FreeBSD 4.4-STABLE after 2001-12-14 19:53:01 UTC
FreeBSD 4.5-STABLE prior to the correction date
Corrected: 2002-02-20 16:48:49 UTC (RELENG_4)
2002-02-21 16:38:39 UTC (RELENG_4_5, 4.5-RELEASE-p1)
PROBLEM
In FreeBSD Security Advisory FreeBSD-SA-02:20.syncache a bug regarding
syncache and syncookie mechanism has been detected and corrected :
Background
==========
The SYN cache ("syncache") and SYN cookie mechanism ("syncookie") are
features of the TCP/IP stack intended to improve resistance to a class
of denial of service attacks known as SYN floods.
Problem Description
===================
Two related problems with syncache were triggered when syncookies were
implemented.
1) When a SYN was accepted via a syncookie, it used an uninitialized
pointer to find the TCP options for the new socket. This pointer may be
a null pointer, which will cause the machine to crash.
2) A syncache entry is created when a SYN arrives on a listen socket.
If the application which created the listen socket was killed and
restarted --- and therefore recreated the listen socket with a
different inpcb --- an ACK (or duplicate SYN) which later arrived and
matched the existing syncache entry would cause a reference to the old
inpcb pointer. Depending on the pointer's contents, this might result
in a system crash.
Because syncache/syncookies support was added prior to the release of
FreeBSD 4.5-RELEASE, no other releases are affected.
Impact
======
Legitimate TCP/IP traffic may cause the machine to crash.
SOLUTION
Workaround
==========
The first issue described may be worked around by disabling syncookies
using sysctl. Issue the following command as root:
# sysctl -w net.inet.tcp.syncookies=0
However, there is no workaround for the second issue.
Solution
========
1) Upgrade your vulnerable system to 4.5-STABLE or the RELENG_4_5
security branch dated after the respective correction dates.
2) To patch your present system: download the relevant patch from the
below location, and execute the following commands as root:
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:20/syncache.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:20/syncache.patch.asc
This patch has been verified to apply to 4.5-RELEASE only.
Verify the detached PGP signature using your PGP utility.
Execute the following commands as root:
# cd /usr/src
# patch -p < /path/to/patch
Recompile your kernel as described in
http://www.freebsd.org/handbook/kernelconfig.html and reboot the
system.
Correction details
==================
The following list contains the revision numbers of each file that was
corrected in the FreeBSD ports collection.
Path Revision
Branch
- -------------------------------------------------------------------------
src/sys/conf/newvers.sh
RELENG_4_5 1.44.2.20.2.2
src/sys/netinet/tcp_syncache.c
RELENG_4 1.5.2.5
RELENG_4_5 1.5.2.4.2.1
- -------------------------------------------------------------------------