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();
                }
            }
  • 相关阅读:
    Git 从入门到入坑
    单件模式(单例模式)
    装饰者模式
    观察者模式
    设计模式入门
    SpringBoot + Mybatis + Redis 整合入门项目
    Spring Boot 前后端交互及参数传递
    Spring Securtiy 认证流程(源码分析)
    Spring Boot 静态页面跳转
    第一条手机验证码
  • 原文地址:https://www.cnblogs.com/chinull/p/11647651.html
Copyright © 2011-2022 走看看