TUCoPS :: BSD :: ciach026.txt

FreeBSD Setlocale Vulnerability



                       The U.S. Department of Energy
                    Computer Incident Advisory Capability
                           ___  __ __    _     ___
                          /       |     /_\   /
                          \___  __|__  /   \  \___

                             INFORMATION BULLETIN

             	  	FreeBSD setlocale() Vulnerability

February 7, 1997 00:00 GMT                                         Number H-26
PROBLEM:       A vulnerability for all binaries due to setlocale() being 
               called from crt0.o. 
PLATFORM:      FreeBSD 2.1.6 and earlier systems 
DAMAGE:        If exploited, this vulnerability could be used to gain root 
               access to the system. 
SOLUTION:      Apply the patches described below. 
VULNERABILITY  Because of the severity of this security hole, a full update 
ASSESSMENT:    release for FreeBSD 2.1.6 will be released very shortly, that 
               release being provisionally assigned the version number of 

[ Start FreeBSD Advisory ]

FreeBSD-SA-97:01					    Security Advisory
Revised: Wed Feb 05 09:58:56 PDT 1997				FreeBSD, Inc.

Topic:		setlocale() bug in all released versions of FreeBSD

Category:	core
Module:		libc
Announced:	1997-02-05
Affects:	FreeBSD 2.1.6 and earlier systems suffer from this
                vulnerability for all binaries due to setlocale() being
                called from crt0.o.

Corrected:	1997-02-05 -stable, 1996-11-27 -current and RELENG_2_2 sources
Source:		FreeBSD specific bug
FreeBSD only:	unknown

Patches:	ftp://freebsd.org/pub/CERT/patches/SA-97:01/


I.   Background

     The setlocale() call contains a number of potential exploits through
     string overflows during environment variable expansion.  Because
     the 2.1.6 and earlier versions of FreeBSD called setlocale() in
     the C runtime code, the problem is especially acute there in that it
     essentially effects all binaries on the system.

     In FreeBSD 2.2 BETA and later releases, the setlocale() call was
     removed from crt0.c and the exploit closed through additional checks.

     There has also been some confusion over the implications of loading
     locale data by privileged programs.  The facility for a user to supply
     their own (possibly corrupt or abused) locale data to non-privileged
     processes was removed in all releases on 1997-02-04.  This was
     originally a debugging facility that got little use and the user can now
     only direct system binaries to load system administrator sanctioned
     locale files.

     This problem is present in all source code and binary distributions of
     FreeBSD released on or before 1996-11-27.

II.  Problem Description

     The setlocale() library function looks for the environment variable
     "PATH_LOCALE" in the current process's environment, and if it exists,
     later copies the contents of this variable to a stack buffer without
     doing proper bounds checking. If the environment variable was specially
     initialized with the proper amount and type of data prior to running a
     setuid program, it is possible to cause the program to overflow its stack
     and execute arbitrary code which could allow the user to become root.

III. Impact

     Any binary linked on a system with setlocale() built into crt0.c (see
     list of affected releases in section I above) or which calls setlocale()
     directly has the buffer overrun vulnerability.

     If this binary has the setuid or setgid bits set, or is called by
     another setuid/setgid binary (even if that other setuid/setgid binary
     does not have this vulnerability), unauthorized access may be allowed.

IV. Solution(s)

     Recompiling libc with the following patches and then recompiling all
     staticly linked binaries (all in /sbin and /bin as well as chflags,
     gunzip, gzcat, gzip, ld, tar and zcat in /usr/bin) eliminates this
     vulnerability in FreeBSD 2.1.6 and earlier releases:

	 However, a full solution may require a re-link of all setuid/setgid
	 local binaries or all local binaries likely to be called from another
	 setuid/setgid program that were originally linked statically under
	 one of the affected OSs.  Dynamically linked executables will benefit
	 directly from this patch once libc is rebuilt and reinstalled and
	 do not need to be relinked.

     Because of the severity of this security hole, a full update release for
     FreeBSD 2.1.6 will also be released very shortly, that release being
     provisionally assigned the version number of 2.1.7.

     Index: lib/libc/locale/collate.c
     RCS file: /home/ncvs/src/lib/libc/locale/collate.c,v
     retrieving revision
     diff -c -r1.4.4.2 collate.c
     *** collate.c	1996/06/05 02:47:55
     --- collate.c	1997/02/05 10:21:59
     *** 64,70 ****
       	__collate_load_error = 1;
       	if (!encoding)
       		return -1;
     ! 	if (!path_locale && !(path_locale = getenv("PATH_LOCALE")))
       		path_locale = _PATH_LOCALE;
       	strcpy(buf, path_locale);
       	strcat(buf, "/");
     --- 64,70 ----
       	__collate_load_error = 1;
       	if (!encoding)
       		return -1;
     ! 	if (!path_locale)
       		path_locale = _PATH_LOCALE;
       	strcpy(buf, path_locale);
       	strcat(buf, "/");
     Index: lib/libc/locale/rune.c
     RCS file: /home/ncvs/src/lib/libc/locale/rune.c,v
     retrieving revision
     diff -c -r1.2.6.3 rune.c
     *** rune.c	1996/06/05 02:47:59
     --- rune.c	1997/02/05 10:22:00
     *** 71,77 ****
     ! 	if (!PathLocale && !(PathLocale = getenv("PATH_LOCALE")))
       		PathLocale = _PATH_LOCALE;
       	(void) strcpy(name, PathLocale);
     --- 71,77 ----
     ! 	if (!PathLocale)
       		PathLocale = _PATH_LOCALE;
       	(void) strcpy(name, PathLocale);
     Index: lib/libc/locale/setlocale.c
     RCS file: /home/ncvs/src/lib/libc/locale/setlocale.c,v
     retrieving revision
     diff -c -r1. setlocale.c
     *** setlocale.c	1996/06/05 02:48:03
     --- setlocale.c	1997/02/05 10:22:00
     *** 58,64 ****
       	int found, i, len;
       	char *env, *r;
     ! 	if (!PathLocale && !(PathLocale = getenv("PATH_LOCALE")))
       		PathLocale = _PATH_LOCALE;
       	if (category < 0 || category >= _LC_LAST)
     --- 58,64 ----
       	int found, i, len;
       	char *env, *r;
     ! 	if (!PathLocale)
       		PathLocale = _PATH_LOCALE;
       	if (category < 0 || category >= _LC_LAST)
     Index: lib/libc/locale/startup_setlocale.c
     RCS file: /home/ncvs/src/lib/libc/locale/Attic/startup_setlocale.c,v
     retrieving revision
     diff -c -r1.2.4.2 startup_setlocale.c
     *** startup_setlocale.c	1995/08/28 05:06:50
     --- startup_setlocale.c	1997/02/05 10:22:00
     *** 23,29 ****
       	int found, i, len;
       	char *env, *r;
     ! 	if (!PathLocale && !(PathLocale = getenv("PATH_LOCALE")))
       		PathLocale = _PATH_LOCALE;
       	if (category < 0 || category >= _LC_LAST)
     --- 23,29 ----
       	int found, i, len;
       	char *env, *r;
     ! 	if (!PathLocale)
       		PathLocale = _PATH_LOCALE;
       	if (category < 0 || category >= _LC_LAST)


[ End FreeBSD Advisory ]


CIAC wishes to acknowledge the contributions of FreeBSD for the 
information contained in this bulletin.

CIAC, the Computer Incident Advisory Capability, is the computer
security incident response team for the U.S. Department of Energy
(DOE) and the emergency backup response team for the National
Institutes of Health (NIH). CIAC is located at the Lawrence Livermore
National Laboratory in Livermore, California. CIAC is also a founding
member of FIRST, the Forum of Incident Response and Security Teams, a
global organization established to foster cooperation and coordination
among computer security teams worldwide.

CIAC services are available to DOE, DOE contractors, and the NIH. CIAC
can be contacted at:
    Voice:    +1 510-422-8193
    FAX:      +1 510-423-8002
    STU-III:  +1 510-423-2604
    E-mail:   ciac@llnl.gov

For emergencies and off-hour assistance, DOE, DOE contractor sites,
and the NIH may contact CIAC 24-hours a day. During off hours (5PM -
8AM PST), call the CIAC voice number 510-422-8193 and leave a message,
or call 800-759-7243 (800-SKY-PAGE) to send a Sky Page. CIAC has two
Sky Page PIN numbers, the primary PIN number, 8550070, is for the CIAC
duty person, and the secondary PIN number, 8550074 is for the CIAC
Project Leader.

Previous CIAC notices, anti-virus software, and other information are
available from the CIAC Computer Security Archive.

   World Wide Web:      http://ciac.llnl.gov/
   Anonymous FTP:       ciac.llnl.gov (
   Modem access:        +1 (510) 423-4753 (28.8K baud)
                        +1 (510) 423-3331 (28.8K baud)

CIAC has several self-subscribing mailing lists for electronic
1. CIAC-BULLETIN for Advisories, highest priority - time critical
   information and Bulletins, important computer security information;
2. CIAC-NOTES for Notes, a collection of computer security articles;
3. SPI-ANNOUNCE for official news about Security Profile Inspector
   (SPI) software updates, new features, distribution and
4. SPI-NOTES, for discussion of problems and solutions regarding the
   use of SPI products.

Our mailing lists are managed by a public domain software package
called ListProcessor, which ignores E-mail header subject lines. To
subscribe (add yourself) to one of our mailing lists, send the
following request as the E-mail message body, substituting
valid information for LastName FirstName and PhoneNumber when sending

E-mail to       ciac-listproc@llnl.gov:
        subscribe list-name LastName, FirstName PhoneNumber
  e.g., subscribe ciac-notes OHara, Scarlett W. 404-555-1212 x36

You will receive an acknowledgment containing address, initial PIN,
and information on how to change either of them, cancel your
subscription, or get help.

PLEASE NOTE: Many users outside of the DOE, ESnet, and NIH computing
communities receive CIAC bulletins.  If you are not part of these
communities, please contact your agency's response team to report
incidents. Your agency's team will coordinate with CIAC. The Forum of
Incident Response and Security Teams (FIRST) is a world-wide
organization. A list of FIRST member organizations and their
constituencies can be obtained via WWW at http://www.first.org/.

This document was prepared as an account of work sponsored by an
agency of the United States Government. Neither the United States
Government nor the University of California nor any of their
employees, makes any warranty, express or implied, or assumes any
legal liability or responsibility for the accuracy, completeness, or
usefulness of any information, apparatus, product, or process
disclosed, or represents that its use would not infringe privately
owned rights. Reference herein to any specific commercial products,
process, or service by trade name, trademark, manufacturer, or
otherwise, does not necessarily constitute or imply its endorsement,
recommendation or favoring by the United States Government or the
University of California. The views and opinions of authors expressed
herein do not necessarily state or reflect those of the United States
Government or the University of California, and shall not be used for
advertising or product endorsement purposes.

LAST 10 CIAC BULLETINS ISSUED (Previous bulletins available from CIAC)

H-06a: Sun libc/libnsl vulnerabilities (Sun Bulletin #00137a)
H-17: cron/crontab Buffer Overrun Vulnerabilities
H-18: Denial-of-Service Attack via ping
H-19: HP Software Installation Programs Vulnerability
H-20: Vulnerability in IRIX csetup
H-21: HP Security Vulnerabilities (newgrp, authentication, passwor
H-22: talkd Buffer Overrun Vulnerability
H-23: Sendmail MIME Conversion Buffer Overrun Vulnerability
H-24: IBM AIX(r)  "gethostbyname()" Buffer Overrun Vulnerability 
H-25: Vulnerability in rlogin/term

RECENT CIAC NOTES ISSUED (Previous Notes available from CIAC)

Notes 07 - 3/29/95     A comprehensive review of SATAN

Notes 08 - 4/4/95      A Courtney update

Notes 09 - 4/24/95     More on the "Good Times" virus urban legend

Notes 10 - 6/16/95     PKZ300B Trojan, Logdaemon/FreeBSD, vulnerability
                       in S/Key, EBOLA Virus Hoax, and Caibua Virus

Notes 11 - 7/31/95     Virus Update, Hats Off to Administrators,
                       America On-Line Virus Scare, SPI 3.2.2 Released, 
                       The Die_Hard Virus

Notes 12 - 9/12/95     Securely configuring Public Telnet Services, X
                       Windows, beta release of Merlin, Microsoft Word
                       Macro Viruses, Allegations of Inappropriate Data
                       Collection in Win95

Notes 96-01 - 3/18/96  Java and JavaScript Vulnerabilities, FIRST
                       Conference Announcement, Security and Web Search
                       Engines, Microsoft Word Macro Virus Update

Version: 2.6.2


TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2024 AOH