动态装载机
问题的本质是:在运行过程中,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") 的调用。
专家发现的漏洞
补充:问题已经被分配了编号
amd64 和 i386(该漏洞可适用于其他架构)。
该问题在默认安装中可被利用,并允许非特权本地用户在运行 chpass 或 passwd suid 实用程序时通过库替换以 root 身份执行代码。 要创建操作所需的低内存条件,请通过 setrlimit 设置 RLIMIT_DATA 限制。
来源: opennet.ru