安全研究

安全漏洞
Linux-PAM配置文件非ASCII用户名解析本地权限提升漏洞

发布日期:2009-03-05
更新日期:2009-03-06

受影响系统:
Linux-PAM Linux-PAM 1.0.3
不受影响系统:
Linux-PAM Linux-PAM 1.0.4
描述:
BUGTRAQ  ID: 34010
CVE(CAN) ID: CVE-2009-0887

可插拔认证模块(PAM)是用于认证用户的机制,使用在多种Linux版本上。

libpam库在试图认证用户名中包含有unicode/utf-8字符SSH登录请求时没有正确地解析PAM配置文件中的非ascii用户名。

pam_misc.c文件62、65和95行的_pam_StrTok函数存在错误的char->int类型转换,如果字符值大于127就会导致出现负数。例如,在pam_misc.c的95行,代码使用end所指向的当前字符值索引空字符table数组:

<     } else if (*from) {
<         /* simply look for next blank char */
<      for (end=from; *end && !table[(int)*end]; ++end);

*end所返回的字符值默认为有符型的,如果使用非ascii字符(大于127,如utf-8字符),在将其转换为int时会解释为负值。因此,代码从-128到127而不是0到255索引table数组。导致访问表格范围之外或函数栈帧范围之外的内存。

<*来源:Marcus Granado
  
  链接:http://permalink.gmane.org/gmane.comp.security.oss.general/1543
*>

建议:
厂商补丁:

Linux-PAM
---------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://pam.cvs.sourceforge.net/viewvc/pam/Linux-PAM/libpam/pam_misc.c?view=log

浏览次数:2776
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障