CVE:CVE-2006-4169
CNNVD:CNNVD-200707-246
" 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数据中提供的。攻击者必须拥有有效的认证会话才能利用这个漏洞。"
solution:Upgrade squirrelmail gpg_plugin to a higher version than 2.0,2.1_dev,and avoid the version 2.0,2.1_dev