xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

NetBSD LibC SetLocale缓冲溢出漏洞


发布时间:2002-09-20
更新时间:2002-09-20
严重程度:
威胁程度:本地管理员权限
错误类型:边界检查错误
利用方式:服务器模式

BUGTRAQ ID:5724

受影响系统
NetBSD NetBSD 1.4 x86
NetBSD NetBSD 1.4 SPARC
NetBSD NetBSD 1.4 arm32
NetBSD NetBSD 1.4 Alpha
NetBSD NetBSD 1.4
NetBSD NetBSD 1.4.1 x86
NetBSD NetBSD 1.4.1 SPARC
NetBSD NetBSD 1.4.1 sh3
NetBSD NetBSD 1.4.1 arm32
NetBSD NetBSD 1.4.1 Alpha
NetBSD NetBSD 1.4.1
NetBSD NetBSD 1.4.2 x86
NetBSD NetBSD 1.4.2 SPARC
NetBSD NetBSD 1.4.2 arm32
NetBSD NetBSD 1.4.2 Alpha
NetBSD NetBSD 1.4.2
NetBSD NetBSD 1.4.3
NetBSD NetBSD 1.5 x86
NetBSD NetBSD 1.5 sh3
NetBSD NetBSD 1.5
NetBSD NetBSD 1.5.1
NetBSD NetBSD 1.5.2
NetBSD NetBSD 1.5.3
详细描述
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