zoukankan      html  css  js  c++  java
  • 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();
                }
            }
  • 相关阅读:
    echarts 地图 动态 展示 结合css+js
    优化之误!
    SQL Server 运行计划操作符具体解释(3)——计算标量(Compute Scalar)
    NHibernate概括
    C++的IO操作
    (数据结构整理)NJUPT1054
    nginx模块开发
    Html学习(三) 分类学习
    android 屏幕适配
    【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
  • 原文地址:https://www.cnblogs.com/chinull/p/11647651.html
Copyright © 2011-2022 走看看