勤浪

The simple things are always hard!

 

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都有这个漏洞。

修正方法:

在\app\protected\core\utils\GetUtil.php的public static function resolveSelectedIdsFromGet()方法改造如下

        /**
         * Resolve selectedIds value based on $_GET['selectedIds'].
         */
        public static function resolveSelectedIdsFromGet()
        {
            if (!empty($_GET['selectedIds']))
            {
                Yii::log('Class:GetUtil;\r\nmethod:resolveSelectedIdsFromGet;\r\n$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();
            }
        }

 

posted on 2019-10-10 14:14  勤浪  阅读(284)  评论(0编辑  收藏  举报

导航