Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Jan 2009 19:34:14 +0100
From:      =?ISO-8859-1?Q?Michael_T=FCxen?= <Michael.Tuexen@lurchi.franken.de>
To:        Peter Lei <peter.lei@ieee.org>
Cc:        freebsd-net@freebsd.org, Yann WANWANSCAPPEL <yann.wanwanscappel@free.fr>
Subject:   Re: SCTP, possible bug in peer authentication key
Message-ID:  <47807A97-0CD3-4E7A-A659-00139086B97F@lurchi.franken.de>
In-Reply-To: <0EEEB325-C7AF-468F-9374-EFED1BD3B3E4@ieee.org>
References:  <4980B747.7070400@free.fr> <A36412A3-53FA-4738-A875-8DFB78C8FE58@lurchi.franken.de> <0EEEB325-C7AF-468F-9374-EFED1BD3B3E4@ieee.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Peter,

good catch!

Best regards
Michael

On Jan 29, 2009, at 6:29 PM, Peter Lei wrote:

> There's a corresponding change that is needed for pulling the auth =20
> info
> out of the cookie for the other direction (i.e. server side =20
> handling).   I've
> committed that into the SCTP project repo, and should also get in with
> Randall's next commit.
>
> --peter
>
> On Jan 29, 2009, at 2:23 AM, Michael T=FCxen wrote:
>
>> Hi Yann,
>>
>> very good catch! You are right.
>>
>> I have committed your patch to Randalls repository, so it will
>> show up in the FreeBSD sources soon (next time he syncs them)...
>>
>> Best regards
>> Michael
>>
>> On Jan 28, 2009, at 8:51 PM, Yann WANWANSCAPPEL wrote:
>>
>>> Hi all,
>>>
>>> I think I found a bug in the SCTP authentication code, in
>>> sctp_load_addresses_from_init() in sctp_pcb.c
>>>
>>> keylen =3D sizeof(*p_random) + random_len + sizeof(*chunks) + =20
>>> num_chunks +
>>> sizeof(*hmacs) + hmacs_len;
>>>
>>> The keylen calculation assumes the Chunk List Parameter (CHUNKS)
>>> vl-param was present in the received INIT packet, which can be =20
>>> false if
>>> peer SCTP does not require any chunk to be authenticated (this =20
>>> typically
>>> occurs if peer does not support ASCONF).
>>>
>>>> =46rom RFC 4895, 6.1
>>>
>>> * An SCTP endpoint has a list of chunks it only accepts if they are
>>> * received in an authenticated way.  This list is included in the =20=

>>> INIT
>>> * and INIT-ACK, and MAY be omitted if it is empty.  Since this list
>>> * does not change during the lifetime of the SCTP endpoint there =20
>>> is no
>>> * problem in case of INIT collision.
>>>
>>> This case is properly handled later in the build of the key
>>>
>>> 	/* append in the AUTH chunks */
>>> 	if (chunks !=3D NULL) {
>>> 	.....
>>> 	}
>>>
>>> I think the calculated keylen should be something like this :
>>>
>>> keylen =3D sizeof(*p_random) + random_len + sizeof(*hmacs) + =20
>>> hmacs_len;
>>>
>>> if (chunks !=3D NULL) {
>>> keylen +=3D sizeof(*chunks) + num_chunks
>>> }
>>>
>>> This problem results in authenticated packets sent from peer SCTP =20=

>>> to be
>>> discarded.
>>>
>>> The problem does not occurs if peer SCTP is modified to send an =20
>>> empty
>>> Chunk List Parameter, (eg num_chunks =3D 0 in the decoding).
>>>
>>> Br,
>>> Yann
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> freebsd-net@freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>>> To unsubscribe, send any mail to =
"freebsd-net-unsubscribe@freebsd.org=20
>>> "
>>>
>>
>> _______________________________________________
>> freebsd-net@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-=20
>> unsubscribe@freebsd.org"
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?47807A97-0CD3-4E7A-A659-00139086B97F>