OpenSSH Security Advisory (adv.token)
Todd Herr
therr at rr.com
Tue Apr 23 01:37:37 EST 2002
Another reason to upgrade from OpenSSH 2.9.9; I'm not sure if we're
compiled with these features, but...
On Sat, 20 Apr 2002, at 23:39, Niels Provos wrote:
> A buffer overflow exists in OpenSSH's sshd if sshd has been compiled
> with Kerberos/AFS support and KerberosTgtPassing or AFSTokenPassing
> has been enabled in the sshd_config file. Ticket and token passing
> is not enabled by default.
>
> 1. Systems affected:
>
> All Versions of OpenSSH compiled with AFS/Kerberos support
> and ticket/token passing enabled contain a buffer overflow.
>
> Ticket/Token passing is disabled by default and available
> only in protocol version 1.
>
> 2. Impact:
>
> Remote users may gain privileged access for OpenSSH < 2.9.9
>
> Local users may gain privileged access for OpenSSH < 3.3
>
> No privileged access is possible for OpenSSH with
> UsePrivsep enabled.
>
> 3. Solution:
>
> Apply the following patch and replace radix.c with
> http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/radix.c?rev=1.18
>
> 4. Credits:
>
> kurt at seifried.org for notifying the OpenSSH team.
> http://mantra.freeweb.hu/
>
> Appendix:
>
> Index: bufaux.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/ssh/bufaux.c,v
> retrieving revision 1.24
> diff -u -r1.24 bufaux.c
> --- bufaux.c 26 Mar 2002 15:23:40 -0000 1.24
> +++ bufaux.c 19 Apr 2002 12:55:29 -0000
> @@ -137,10 +137,18 @@
> BN_bin2bn(bin, len, value);
> xfree(bin);
> }
> -
> /*
> - * Returns an integer from the buffer (4 bytes, msb first).
> + * Returns integers from the buffer (msb first).
> */
> +
> +u_short
> +buffer_get_short(Buffer *buffer)
> +{
> + u_char buf[2];
> + buffer_get(buffer, (char *) buf, 2);
> + return GET_16BIT(buf);
> +}
> +
> u_int
> buffer_get_int(Buffer *buffer)
> {
> @@ -158,8 +166,16 @@
> }
>
> /*
> - * Stores an integer in the buffer in 4 bytes, msb first.
> + * Stores integers in the buffer, msb first.
> */
> +void
> +buffer_put_short(Buffer *buffer, u_short value)
> +{
> + char buf[2];
> + PUT_16BIT(buf, value);
> + buffer_append(buffer, buf, 2);
> +}
> +
> void
> buffer_put_int(Buffer *buffer, u_int value)
> {
> Index: bufaux.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/ssh/bufaux.h,v
> retrieving revision 1.17
> diff -u -r1.17 bufaux.h
> --- bufaux.h 18 Mar 2002 17:25:29 -0000 1.17
> +++ bufaux.h 19 Apr 2002 12:55:56 -0000
> @@ -23,6 +23,9 @@
> void buffer_get_bignum(Buffer *, BIGNUM *);
> void buffer_get_bignum2(Buffer *, BIGNUM *);
>
> +u_short buffer_get_short(Buffer *);
> +void buffer_put_short(Buffer *, u_short);
> +
> u_int buffer_get_int(Buffer *);
> void buffer_put_int(Buffer *, u_int);
>
>
--
Todd Herr therr at rr.com
Systems Administrator, Road Runner 703.345.2447
The above message includes the opinions and thoughts of the author and
does not necessarily represent the views of his employer.
More information about the openssh-unix-dev
mailing list