OpenBSD ld.so 中的漏洞

动态装载机 搜搜,包含在 OpenBSD 中,在某些条件下,可能, SUID/SGID- 应用程序保留 LD_LIBRARY_PATH 环境变量,从而允许在以提升的权限运行的进程的上下文中加载第三方代码。 修复该漏洞的补丁已发布 6.5 и 6.6。 二进制补丁(系统补丁)适用于 amd64、i386 和 arm64 平台的产品已经投入生产,在本新闻发布时应该可供下载。

问题的本质是:在运行过程中,ld.so 首先从环境中提取 LD_LIBRARY_PATH 变量的值,并使用 _dl_split_path() 函数将其转换为字符串数组 - 目录路径。 如果后来发现当前进程是由 SUID/SGID 应用程序启动的,则创建的数组以及实际上的 LD_LIBRARY_PATH 变量都会被清除。 同时,如果 _dl_split_path() 耗尽内存(由于环境变量大小明确限制为 256 kB,这很困难,但理论上是可能的),那么 _dl_libpath 变量将收到 NULL 值,并且后续检查该变量的值将强制跳过对 _dl_unsetenv("LD_LIBRARY_PATH") 的调用。

专家发现的漏洞 Qualys公司, 也 之前透露的几位 问题。 发现该漏洞的安全研究人员注意到问题得到解决的速度有多快:在 OpenBSD 项目收到通知后三个小时内就准备好了补丁并发布了更新。

补充:问题已经被分配了编号 CVE-2019-19726。 在 oss-security 邮件列表上制作 官方公告,包括在 OpenBSD 6.6、6.5、6.2 和 6.1 架构上运行的原型漏洞利用
amd64 和 i386(该漏洞可适用于其他架构)。
该问题在默认安装中可被利用,并允许非特权本地用户在运行 chpass 或 passwd suid 实用程序时通过库替换以 root 身份执行代码。 要创建操作所需的低内存条件,请通过 setrlimit 设置 RLIMIT_DATA 限制。

来源: opennet.ru

添加评论