NetBSD LibC SetLocale缓冲溢出漏洞发布时间:2002-09-20 更新时间:2002-09-20 严重程度:高 威胁程度:本地管理员权限 错误类型:边界检查错误 利用方式:服务器模式 BUGTRAQ ID:5724 受影响系统 NetBSD NetBSD 1.4 x86详细描述 NetBSD中的libc库setlocale()存在漏洞,可导致缓冲区溢出。 lib/libc/locale/setlocale.c定义了setlocale,用于改变每个locale类的locale,setlocale()函数一定由第一个参数定义locale类更改为第二个参数定义的类。其中LC_ALL类可以用来在同一时间更改所有locale类。在这种情况下,NETBSD setlocale实现有允许第二个参数字符串以特殊的形式指定每个类为一独立的locale. 如第二个参数的每个locale由"/"分开的单个字符串(如"A/B/C/D/E/F"),这里每个元素对象类LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME和 LC_MESSAGES。setlocale()函数会把这些对象放到一个成为new_categories的数组中,这个过程中由于对数组边界缺少正确检查,提供超过6个对象的参数可导致产生缓冲溢出。 如果部分调用以LC_ALL作为第一个参数,而第二个参数由用户或者环境变量传递,就可以导致缓冲溢出,执行任意代码提升权限。 测试代码 无 解决方案 升级到NETBSD1.6版本。 相关信息 参考:http://online.securityfocus.com/advisories/4481 |