CVE:CVE-2009-2146
CNNVD:CNNVD-200906-342
Sugarcrm SugarCRM是美国SugarCRM（Sugarcrm）公司的一套开源的客户关系管理系统（CRM）。该系统支持对不同的客户需求进行差异化营销、管理和分配销售线索，实现销售代表的信息共享和追踪。
SugarCRM的Compose Email部分允许发送带有附件的邮件。在指定文件名时，会调用一个验证例程：
function safeAttachmentName($filename) {
global $sugar_config;
$badExtension = false;
//get position of last "." in file name
$file_ext_beg = strrpos($filename, ".");
$file_ext = "";
//get file extension
if($file_ext_beg > 0) {
$file_ext = substr($filename, $file_ext_beg + 1);
}
//check to see if this is a file with extension located in "badext"
foreach($sugar_config['upload_badext'] as $badExt) {
if(strtolower($file_ext) == strtolower($badExt)) {
//if found, then append with .txt and break out of lookup
$filename = $filename . ".txt";
$badExtension = true;
break; // no need to look for more
} // if
} // foreach
return $badExtension;
}
这个例程检查文件扩展名是否在黑名单中，如果是则向文件名添加.txt扩展名，但这里存在一个编码错误：函数假设文件名(不包括扩展名)至少为一个字符长。这个假设源自以下语句：
if($file_ext_beg > 0)
如果将文件名设置为.php，就可以绕过检查，扩展名被认定为为空。由于空的扩展名不在黑名单中，因此不会对文件名附加任何扩展名。在这个检查后会在文件系统上创建<id><filename>形式的文件，其中id是字母组成的字符串。
solution:Upgrade sugarcrm sugarcrm to a higher version than 5.2e,5.0.0,5.0.0h,5.0.0k,5.1.0,5.1.0-beta,5.1c,5.2c,5.2d,and avoid the version (,5.2e],5.0.0,5.0.0h,5.0.0k,5.1.0,5.1.0-beta,5.1c,5.2c,5.2d