-----BEGIN PGP SIGNED MESSAGE-----
__________________________________________________________
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
2.1.7.
______________________________________________________________________________
[ 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 1.4.4.2
diff -c -r1.4.4.2 collate.c
*** collate.c 1996/06/05 02:47:55 1.4.4.2
--- 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 1.2.6.3
diff -c -r1.2.6.3 rune.c
*** rune.c 1996/06/05 02:47:59 1.2.6.3
--- rune.c 1997/02/05 10:22:00
***************
*** 71,77 ****
return(0);
}
! if (!PathLocale && !(PathLocale = getenv("PATH_LOCALE")))
PathLocale = _PATH_LOCALE;
(void) strcpy(name, PathLocale);
--- 71,77 ----
return(0);
}
! 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 1.3.4.2.2.1
diff -c -r1.3.4.2.2.1 setlocale.c
*** setlocale.c 1996/06/05 02:48:03 1.3.4.2.2.1
--- 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 1.2.4.2
diff -c -r1.2.4.2 startup_setlocale.c
*** startup_setlocale.c 1995/08/28 05:06:50 1.2.4.2
--- 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 (128.115.19.53)
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
publications:
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
availability;
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
CIAC-BULLETIN, CIAC-NOTES, SPI-ANNOUNCE or SPI-NOTES for list-name and
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
-----BEGIN PGP SIGNATURE-----
Version: 2.6.2
iQCVAwUBMxtcsrnzJzdsy3QZAQGOhgP/b2OEkKGWy3zJwm4ZgT7fYR/ZJRBmOW/G
LmLEXeS/M6CxCM+4j/boqdJ7ii4Nl9ONho1FeiOu78g0OnW6OeJHiEpTjQP3PRo1
H0dhpNxK0TiAR788RnVFwslFocRaHP6cqbLLi6X1ifaLAlEgq7OHhpdVWO77LEdo
1B+zcERfg2w=
=XIV1
-----END PGP SIGNATURE-----
TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2025 AOH