OpenBSD是一款开放源代码Unix类操作系统。 OpenBSD动态加载器在处理环境变量的继承时存在漏洞,本地攻击者可能利用此漏洞提升自己的权限。 OpenBSD动态加载器清除了环境变量,但由于逻辑问题,_dl_unsetenv()可能会被相邻的两项欺骗。 漏洞相关的代码如下: /src/libexec/ld.so/loader.c: -------------- if (_dl_issetugid()) { /* Zap paths if s[ug]id... */ ... if (_dl_preload) { _dl_preload = NULL; (*) _dl_unsetenv("LD_PRELOAD", envp); } --------------- 由于变量已被清除,因此不允许直接执行代码。但参数会出现在特权进程的环境中,如果特权进程在执行其他程序之前将其真正的uid设置为等同于有效uid的话,就可能导致权限提升,因为issetugid()检查会返回0。然后就可能加载攻击者所选择的共享库。 OpenBSD的默认ch*/chpass/passwd工具也存在类似问题。 src/usr.bin/passwd/local_passwd.c: --------------- /* Drop user's real uid and block all signals to avoid a DoS. */ setuid(0); sigfillset(&fullset); sigdelset(&fullset, SIGINT); sigprocmask(SIG_BLOCK, &fullset, NULL); ... if (pw_mkdb(uname, pwflags) < 0) pw_error(NULL, 0, 1); ... ---------------- src/lib/libutil/passwd.c ----------------------- int pw_mkdb(char *username, int flags) .... execv(_PATH_PWD_MKDB, av); -----------------------...
OpenBSD是一款开放源代码Unix类操作系统。 OpenBSD动态加载器在处理环境变量的继承时存在漏洞,本地攻击者可能利用此漏洞提升自己的权限。 OpenBSD动态加载器清除了环境变量,但由于逻辑问题,_dl_unsetenv()可能会被相邻的两项欺骗。 漏洞相关的代码如下: /src/libexec/ld.so/loader.c: -------------- if (_dl_issetugid()) { /* Zap paths if s[ug]id... */ ... if (_dl_preload) { _dl_preload = NULL; (*) _dl_unsetenv("LD_PRELOAD", envp); } --------------- 由于变量已被清除,因此不允许直接执行代码。但参数会出现在特权进程的环境中,如果特权进程在执行其他程序之前将其真正的uid设置为等同于有效uid的话,就可能导致权限提升,因为issetugid()检查会返回0。然后就可能加载攻击者所选择的共享库。 OpenBSD的默认ch*/chpass/passwd工具也存在类似问题。 src/usr.bin/passwd/local_passwd.c: --------------- /* Drop user's real uid and block all signals to avoid a DoS. */ setuid(0); sigfillset(&fullset); sigdelset(&fullset, SIGINT); sigprocmask(SIG_BLOCK, &fullset, NULL); ... if (pw_mkdb(uname, pwflags) < 0) pw_error(NULL, 0, 1); ... ---------------- src/lib/libutil/passwd.c ----------------------- int pw_mkdb(char *username, int flags) .... execv(_PATH_PWD_MKDB, av); ----------------------- 上述pw_mkdb()函数未经过滤环境便执行/usr/sbin/pwd_mkdb。由于/usr/bin/passwd二进制程序运行root-user suid,因此可能导致本地root用户入侵。 OpenBSD OpenBSD 4.0 OpenBSD OpenBSD 3.9 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: <a href="ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/common/005_ldso.patch" target="_blank">ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/common/005_ldso.patch</a> <a href="ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.9/common/016_ldso.patch" target="_blank">ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.9/common/016_ldso.patch</a>