安全研究
安全漏洞
SquirrelMail G/PGP加密插件多个远程命令执行漏洞
发布日期:2007-07-11
更新日期:2007-07-18
受影响系统:
SquirrelMail G/PGP加密插件 2.1描述:
SquirrelMail G/PGP加密插件 2.0
BUGTRAQ ID: 24874,24782
CVE(CAN) ID: CVE-2005-1924,CVE-2006-4169
SquirrelMail是一个多功能的用PHP4实现的Webmail程序,可运行于Linux/Unix类操作系统下。
SquirrelMail的实现上存在多个输入验证漏洞,远程攻击者可能利用这些漏洞在服务器上执行任意命令。
SquirrelMail中的G/PGP加密插件没有正确地过滤所包含的某些文件,gpg_help.php和gpg_help_base.php文件中可能包含有通过“help” HTTP GET请求参数所提供的本地文件,代码如下:
68 // Help body text is inserted here via GET parameter
69 require_once (SM_PATH.'plugins/gpg/help/' . $_GET['help'] );
如果使用了目录遍历标识符,攻击者就可以导致将储存在Web服务器中的文件解析为PHP代码。
由于使用未经过滤的用户数据调用了exec(),导致G/PGP加密插件中gpg_key_functions.php所定义的gpg_recv_key()函数中存在命令注入漏洞,代码如下:
$command = "$path_to_gpg --batch --no-tty --homedir $gpg_key_dir \
--keyserver hkp://$keyserver --recv-key $searchkeyid 2>&1";
[...]
exec($command, $output, $returnval);
上面的$keyserver变量是通过对gpg_options.php脚本的POST数据提供的。攻击者必须拥有有效的认证会话才能利用这个漏洞。
由于使用未经过滤的用户数据调用了exec(),导致G/PGP加密插件中gpg_hook_functions.php所定义的gpg_check_sign_pgp_mime()函数中存在命令注入漏洞,代码如下:
$command = "echo -n \"$messageSignedText\" | $path_to_gpg --batch \
--no-tty --homedir $gpg_key_dir --verify ".\
$detachedSignatureFilename."- 2>&1";
if ($debug)
echo "gpg command: ".$command."\";
exec($command, $results, $returnval);
$messageSignedText变量中包含有从邮件消息中剥离的数据。
由于使用未经过滤的用户数据调用了exec(),导致G/PGP加密插件中gpg_keyring.php所定义的deleteKey()函数中存在命令注入漏洞,代码如下:
$command = "$path_to_gpg --batch --no-tty --yes --homedir \
$gpg_key_dir $flag $fpr 2>&1";
exec($command, $output, $returnval);
deleteKey()例程是从import_key_file.php、import_key_text.php和keyring_main.php文件中调用的,且$fpr变量是在POST数据中提供的。攻击者必须拥有有效的认证会话才能利用这个漏洞。
<*来源:iDEFENSE
链接:http://secunia.com/advisories/26035/
http://www.attrition.org/pipermail/vim/2007-July/001703.html
http://marc.info/?l=bugtraq&m=118417223024951&w=2
http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=329
http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=330
http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=331
http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=555
*>
建议:
临时解决方法:
* 禁用G/PGP插件,或在调用exec()之前添加以下行:
$messageSignedText= escapeshellarg($messageSignedText);
$keyserver = escapeshellarg($keyserver);
$fpr = escapeshellarg($fpr);
厂商补丁:
SquirrelMail
------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.squirrelmail.org
浏览次数:2686
严重程度:0(网友投票)
绿盟科技给您安全的保障
