ZurmoCRM 可执行代码高危风险报告及修复

鉴于目前ZumroCRM已经云端化,其开源版本的代码基本没有人维护,也没有地方提交bug清单。但相信国内有一些用户在使用这个开源的版本,下面报告一个ZumoCRM的重大风险点。

风险描述:

当用户登录ZumroCRM之后,可以执行PHP代码。可能导致丢失数据,暴露数据库账号密码,甚至更严重的问题。

风险重现:

/leads/default/?selectedIds=eval("echo(Yii::app()->db->connectionString.'=='.Yii::app()->db->username.'=='.Yii::app()->db->password);")

/leads/default/?selectedIds=phpinfo()

风险分析:

在一些ListView的$_GET['selectedIds'],其中参数 selectedIds作为表达式会被执行,调用了CComponent类的evaluateExpression,实际执行了php的eval() 或call_user_func_array()

风险位置:

所有含有CheckBoxColumn的ListView都有这个漏洞。

修正方法:

在appprotectedcoreutilsGetUtil.php的public static function resolveSelectedIdsFromGet()方法改造如下

        /**
         * Resolve selectedIds value based on $_GET['selectedIds'].
         */
        public static function resolveSelectedIdsFromGet()
        {
            if (!empty($_GET['selectedIds']))
            {
                Yii::log('Class:GetUtil;
method:resolveSelectedIdsFromGet;
$selectedIds:'.json_encode($_GET['selectedIds'], JSON_FORCE_OBJECT), CLogger::LEVEL_WARNING);
                $arr = explode(",", $_GET['selectedIds']); // Not Coding Standard
                $intarr = array_map('intval',$arr);//强制转换为id数组,避免被当作表达式执行
                return $intarr;
            }
            else
            {
                return array();
            }
        }
原文地址:https://www.cnblogs.com/chinull/p/11647651.html