Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Apr 2004 20:11:55 -0700 (PDT)
From:      Don Lewis <truckman@FreeBSD.org>
To:        avalon@caligula.anu.edu.au
Cc:        freebsd-security@FreeBSD.org
Subject:   Re: [Full-Disclosure] IETF Draft - Fix for TCP vulnerability (fwd)
Message-ID:  <200404210311.i3L3Bt7E045458@gw.catspoiler.org>
In-Reply-To: <200404210158.i3L1wxoM010197@caligula.anu.edu.au>

next in thread | previous in thread | raw e-mail | index | archive | help
On 21 Apr, Darren Reed wrote:
> Forwarded message:
>> From full-disclosure-admin@lists.netsys.com Wed Apr 21 11:49:12 2004
>> To: full-disclosure@lists.netsys.com
>> From: Darren Bounds <dbounds@intrusense.com>
>> Subject: [Full-Disclosure] IETF Draft - Fix for TCP vulnerability
>> Date: Tue, 20 Apr 2004 18:19:58 -0400
>> 
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>> 
>> http://www.ietf.org/internet-drafts/draft-ietf-tcpm-tcpsecure-00.txt

I saw this draft earlier today.

   RFC793 [1] currently requires handling of a segment with the RST bit
   when in a synchronized state to be processed as follows:
   1) If the RST bit is set and the sequence number is outside the
      expected window, silently drop the segment.
   2) If the RST bit is set and the sequence number is acceptable i.e.:
      (RCV.NXT <= SEG.SEQ <= RCV.NXT+RCV.WND) then reset the connection.


   Instead, the following changes should be made to provide some
   protection against such an attack.
   A) If the RST bit is set and the sequence number is outside the
      expected window, silently drop the segment.
   B) If the RST bit is exactly the next expected sequence number, reset
      the connection.
   C) If the RST bit is set and the sequence number does not exactly
      match the next expected sequence value, yet is within the
      acceptable window (RCV.NXT < SEG.SEQ <= RCV.NXT+RCV.WND) send an
      acknowledgment.


Our original implementation of the RST sequence number checking was much
more permissive than RFC 793.  I submitted a patch, which was included
in tcp_input.c version 1.81 that implemented steps A and B above.  It
was discovered that this is incompatible with certain peers, so the code
was changed to match RFC 793 in tcp_input.c 1.98.

I don't know if adding step C will fix the problem.  There may further
info in the list archives.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404210311.i3L3Bt7E045458>