FreeBSD Security Advisories
2005-Mar-28 11:52 UTC
FreeBSD Security Advisory FreeBSD-SA-05:01.telnet
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 ============================================================================FreeBSD-SA-05:01.telnet Security Advisory The FreeBSD Project Topic: telnet client buffer overflows Category: contrib Module: contrib/telnet Announced: 2005-03-28 Credits: iDEFENSE Affects: All FreeBSD releases prior to 5.4-RELEASE Corrected: 2005-03-28 15:50:00 UTC (RELENG_5, 5.4-PRERELEASE) 2005-03-28 15:48:00 UTC (RELENG_4, 4.11-STABLE) 2005-03-28 15:52:00 UTC (RELENG_5_3, 5.3-RELEASE-p6) 2005-03-28 15:57:00 UTC (RELENG_4_11, 4.11-RELEASE-p1) 2005-03-28 15:58:00 UTC (RELENG_4_10, 4.10-RELEASE-p6) 2005-03-28 16:00:00 UTC (RELENG_4_8, 4.8-RELEASE-p28) CVE Name: CAN-2005-0468 CAN-2005-0469 For general information regarding FreeBSD Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit <URL:http://www.freebsd.org/security/>. I. Background The telnet(1) command is a TELNET protocol client, used primarily to establish terminal sessions across a network. II. Problem Description Buffer overflows were discovered in the env_opt_add() and slc_add_reply() functions of the telnet(1) command. TELNET protocol commands, options, and data are copied from the network to a fixed-sized buffer. In the case of env_opt_add (CAN-2005-0468), the buffer is located on the heap. In the case of slc_add_reply (CAN-2005-0469), the buffer is global uninitialized data (BSS). III. Impact These buffer overflows may be triggered when connecting to a malicious server, or by an active attacker in the network path between the client and server. Specially crafted TELNET command sequences may cause the execution of arbitrary code with the privileges of the user invoking telnet(1). IV. Workaround Do not use telnet(1) to connect to untrusted machines or over an untrusted network. V. Solution Perform one of the following: 1) Upgrade your vulnerable system to 4-STABLE or 5-STABLE, or to the RELENG_5_3, RELENG_4_11, RELENG_4_10, or RELENG_4_8 security branch dated after the correction date. 2) To patch your present system: The following patches have been verified to apply to FreeBSD 4.8, 4.10, 4.11, and 5.3 systems. a) Download the relevant patch from the location below, and verify the detached PGP signature using your PGP utility. [FreeBSD 4.x] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:01/telnet4.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:01/telnet4.patch.asc [FreeBSD 5.x] # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:01/telnet5.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:01/telnet5.patch.asc b) Execute the following commands as root: # cd /usr/src # patch < /path/to/patch c) Rebuild the operating system as described in <URL:http://www.freebsd.org/doc/handbook/makeworld.html>. VI. Correction details The following list contains the revision numbers of each file that was corrected in FreeBSD. Branch Revision Path - ------------------------------------------------------------------------- RELENG_4 src/crypto/heimdal/appl/telnet/telnet/telnet.c 1.1.1.1.2.4 src/crypto/kerberosIV/appl/telnet/telnet/telnet.c 1.1.1.1.2.1 src/crypto/telnet/telnet/telnet.c 1.4.2.6 src/usr.bin/telnet/telnet.c 1.8.2.4 RELENG_4_11 src/UPDATING 1.73.2.91.2.2 src/crypto/heimdal/appl/telnet/telnet/telnet.c 1.1.1.1.2.3.10.1 src/crypto/kerberosIV/appl/telnet/telnet/telnet.c 1.1.1.1.22.1 src/crypto/telnet/telnet/telnet.c 1.4.2.5.12.1 src/sys/conf/newvers.sh 1.44.2.39.2.5 src/usr.bin/telnet/telnet.c 1.8.2.3.12.1 RELENG_4_10 src/UPDATING 1.73.2.90.2.7 src/crypto/heimdal/appl/telnet/telnet/telnet.c 1.1.1.1.2.3.8.1 src/crypto/kerberosIV/appl/telnet/telnet/telnet.c 1.1.1.1.20.1 src/crypto/telnet/telnet/telnet.c 1.4.2.5.10.1 src/sys/conf/newvers.sh 1.44.2.34.2.8 src/usr.bin/telnet/telnet.c 1.8.2.3.10.1 RELENG_4_8 src/UPDATING 1.73.2.80.2.32 src/crypto/heimdal/appl/telnet/telnet/telnet.c 1.1.1.1.2.3.4.1 src/crypto/kerberosIV/appl/telnet/telnet/telnet.c 1.1.1.1.16.1 src/crypto/telnet/telnet/telnet.c 1.4.2.5.6.1 src/sys/conf/newvers.sh 1.44.2.29.2.29 src/usr.bin/telnet/telnet.c 1.8.2.3.6.1 RELENG_5 src/contrib/telnet/telnet/telnet.c 1.14.6.1 RELENG_5_3 src/UPDATING 1.342.2.13.2.9 src/contrib/telnet/telnet/telnet.c 1.14.8.1 src/sys/conf/newvers.sh 1.62.2.15.2.11 - ------------------------------------------------------------------------- VII. References [IDEF0866] Multiple Telnet Client slc_add_reply() Buffer Overflow http://www.idefense.com/application/poi/display?id=220&type=vulnerabilities [IDEF0867] Multiple Telnet Client env_opt_add() Buffer Overflow http://www.idefense.com/application/poi/display?id=221&type=vulnerabilities -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 iD8DBQFCSECrFdaIBMps37IRAnRJAJ0VbP6TyaX7SLE2EwSrIYU25JSD9wCfYoe9 Qg2Lw/6QFLOgYG1jPuzogEs=0rFv -----END PGP SIGNATURE-----
On Mon, Mar 28, 2005 at 07:52:14PM +0000, FreeBSD Security Advisories wrote: [ Not sure else where to follow up to - I don't want to bug the security team directly about this, so just writing the list for now ]> b) Execute the following commands as root: > > # cd /usr/src > # patch < /path/to/patchOn my home machine (5.3-RELEASE) this failed - I had to go to /usr/src/contrib/telnet/telnet for the patch to apply.> c) Rebuild the operating system as described in > <URL:http://www.freebsd.org/doc/handbook/makeworld.html>.Just curious... why is it necessary to rebuild the whole operating system? Normally, the security advisories just have you rebuild the program in question - wouldn't that have sufficed here? w
I was looking at this patch, but there seems to be an error in it: unsigned char slc_reply[128]; +unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply)]; unsigned char *slc_replyp; Should the value for slc_reply_eom not be this instead? unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply) - 1]; Considering the conditionals are the following: + if (&slc_replyp[6+2] > slc_reply_eom) + return; .. and .. + /* The end of negotiation command requires 2 bytes. */ + if (&slc_replyp[2] > slc_reply_eom) + return; If you don't subtract 1 from the sizeof(slc_reply) or change the conditional operators to >=, then you could try to write one byte past the end of the buffer. -- Steve Kiernan Juniper Networks
Dmitry Pryanishnikov
2005-Apr-01 05:14 UTC
FreeBSD Security Advisory FreeBSD-SA-05:01.telnet
Hello!> Date: Mon, 28 Mar 2005 23:39:30 +0200 > From: Daniel Gerzo <danger@rulez.sk> >> Just curious... why is it necessary to rebuild the whole operating >> system? Normally, the security advisories just have you rebuild the >> program in question - wouldn't that have sufficed here? > > I think, this might be enought: > > cd /usr/src/usr.bin/telnet ; make clean && make all install > > but I don't exactly know, if this is really correct way how to do > it..This way is incorrect in two aspects. First, you'll have to compile libtelnet first: cd /usr/src/lib/libtelnet make obj && make depend && make cd /usr/src/usr.bin/telnet make obj && make depend && make && make install But second is that you'll get telnet w/o data encryption support, which isn't what you want (unless you have NOCRYPT=true in your /etc/make.conf). You can recompile telnet properly (in the typical case: no NOCRYPT and no MAKE_KERBEROS[45] either) using the following commands: cd /usr/src/secure/lib/libtelnet make obj && make depend && make cd /usr/src/secure/usr.bin/telnet make obj && make depend && make && make install However, I can overlook something more, so I'm giving no warranties at all... Sincerely, Dmitry -- Atlantis ISP, System Administrator e-mail: dmitry@atlantis.dp.ua nic-hdl: LYNX-RIPE