CVE:CVE-2009-0887
CNNVD:CNNVD-200903-235
可插拔认证模块(PAM)是用于认证用户的机制，使用在多种Linux版本上。
libpam库在试图认证用户名中包含有unicode/utf-8字符SSH登录请求时没有正确地解析PAM配置文件中的非ascii用户名。
pam_misc.c文件62、65和95行的_pam_StrTok函数存在错误的char-gt;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数组。导致访问表格范围之外或函数栈帧范围之外的内存。
solution:Upgrade linux-pam linux-pam to a higher version than 1.0.3,0.99.1.0,0.99.2.0,0.99.2.1,0.99.3.0,0.99.4.0,0.99.5.0,0.99.6.0,0.99.6.1,0.99.6.2,0.99.6.3,0.99.7.0,0.99.7.1,0.99.8.0,0.99.8.1,0.99.9.0,0.99.10.0,1.0.0,1.0.1,1.0.2,and avoid the version (,1.0.3],0.99.1.0,0.99.2.0,0.99.2.1,0.99.3.0,0.99.4.0,0.99.5.0,0.99.6.0,0.99.6.1,0.99.6.2,0.99.6.3,0.99.7.0,0.99.7.1,0.99.8.0,0.99.8.1,0.99.9.0,0.99.10.0,1.0.0,1.0.1,1.0.2