 |
OpenBSD ld.so本地环境变量继承漏洞 |
|
|
| OpenBSD ld.so本地环境变量继承漏洞 |
|
| 作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-25 10:22:52 |
|
受影响系统:
OpenBSD OpenBSD 4.0
OpenBSD OpenBSD 3.9
描述:
BUGTRAQ ID: 21188
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用户入侵。
<*来源:Justin Schuh
Mark Dowd
John McDonald
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=116423446823664&w=2
*>
建议:
厂商补丁:
OpenBSD
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
ftp://ftp.openbsd.org/pub/OpenBSD/patches/4.0/common/005_ldso.patch
ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.9/common/016_ldso.patch【转自世纪安全网 http://www.21safe.com】
|
|
| 新闻录入:admin 责任编辑:admin |
|
|
上一篇新闻: 苹果Mac OS X操作系统 爆高度危险级漏洞 下一篇新闻: Windows Vista发布补丁解决Zune播放机不兼容问题 |
|
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
|
|
|
|
|