当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(13) 关注此漏洞

缺陷编号: WooYun-2013-24566

漏洞标题: ecshop最新版本几处用户权限越权(其它版本亦可)

相关厂商: ShopEx

漏洞作者: blue认证白帽子

提交时间: 2013-05-26 22:12

公开时间: 2013-08-24 22:13

漏洞类型: 设计错误/逻辑缺陷

危害等级: 高

自评Rank: 12

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 逻辑错误

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-05-26: 细节已通知厂商并且等待厂商处理中
2013-05-26: 厂商已经确认,细节仅向厂商公开
2013-05-29: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2013-07-20: 细节向核心白帽子及相关领域专家公开
2013-07-30: 细节向普通白帽子公开
2013-08-09: 细节向实习白帽子公开
2013-08-24: 细节向公众公开

简要描述:

就是可以帮助管理员管理订单啥的,匿名活雷锋呐~

详细说明:

当开启WAP功能(手机商城)时,未登录可对其它用户订单操作:查看非注册用户订单、取消任意用户订单、任意用户订单确认收货等。

漏洞存在于 /mobile/user.php 页面

1.查看非注册用户订单

code 区域
elseif ($act == 'order_list') // /mobile/user.php 49行起
{
$record_count = $db->getOne("SELECT COUNT(*) FROM " .$ecs->table('order_info'). " WHERE user_id = {$_SESSION['user_id']}"); //未注册用户可直接下订单
...
$orders = get_user_orders($_SESSION['user_id'], $page_num, $page_num * ($page - 1)); //100行,get_user_orders位于/includes/lib_transaction.php,可以看到取的是user_id=0的用户订单



2.取消任意用户订单

code 区域
elseif ($act == 'cancel_order')  // /mobile/user.php 118行起
{
include_once(ROOT_PATH . 'includes/lib_transaction.php');
include_once(ROOT_PATH . 'includes/lib_order.php');

$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
if (cancel_order($order_id, $_SESSION['user_id']))
{
ecs_header("Location: user.php?act=order_list\n");
exit;
}
}
....
/* cancel_order位于/includes/lib_transaction.php 353行起 */
function cancel_order($order_id, $user_id = 0)
{
/* 查询订单信息,检查状态 */
$sql = "SELECT user_id, order_id, order_sn , surplus , integral , bonus_id, order_status, shipping_status, pay_status FROM " .$GLOBALS['ecs']->table('order_info') ." WHERE order_id = '$order_id'";
$order = $GLOBALS['db']->GetRow($sql);

if (empty($order))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['order_exist']);
return false;
}

// 如果用户ID大于0,检查订单是否属于该用户
if ($user_id > 0 && $order['user_id'] != $user_id) //这里是重点,此时未登录,所以$user_id=0,绕过了~~
{
$GLOBALS['err'] ->add($GLOBALS['_LANG']['no_priv']);

return false;
}
.....



3.任意用户订单确认收货

code 区域
elseif ($act == 'affirm_received') // /mobile/user.php 118行起
{
include_once(ROOT_PATH . 'includes/lib_transaction.php');

$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
$_LANG['buyer'] = '买家';
if (affirm_received($order_id, $_SESSION['user_id']))
{
ecs_header("Location: user.php?act=order_list\n");
exit;
}

}
/* affirm_received方法位于/includes/lib_transaction.php,和cancel_order一样的user_id判断 */



出现以上问题的原因是未对用户是否登录进行判断,来看一下/user.php (非手机版) 的代码

/user.php 40行起

* 未登录处理 */

code 区域
if (empty($_SESSION['user_id']))
{
if (!in_array($action, $not_login_arr))
{
if (in_array($action, $ui_arr))
{
......



这里的未登录处理杜绝了未登录时越权操作的发生,而手机版/mobile/user.php没有,忘加了?

漏洞证明:

1.png



未登录时执行:http://localhost/test/ecshop/mobile/user.php?act=cancel_order&order_id=31

2.png

修复方案:

参考 /user.php 40行起

* 未登录处理 */

code 区域
if (empty($_SESSION['user_id']))
{
if (!in_array($action, $not_login_arr))
{
if (in_array($action, $ui_arr))
{
......

版权声明:转载请注明来源 blue@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2013-05-26 23:19

厂商回复:

非常感谢您为shopex信息安全做的贡献
我们将尽快修复
非常感谢

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2013-05-26 22:35 | 淡漠天空 认证白帽子 ( 实习白帽子 | Rank:1117 漏洞数:144 | M:出售GOV STATE NSA CIA NASA DHS Symant...)
    0

    mark

  2. 2013-05-27 08:55 | 齐迹 ( 普通白帽子 | Rank:804 漏洞数:104 | 重庆地区招聘安全工程师。sec.zbj.com欢迎...)
    0

    @blue 手里应该还有不少把?悠着点。。呵呵

  3. 2013-07-05 23:41 | Aepl│恋爱 ( 实习白帽子 | Rank:45 漏洞数:15 | Forzen恋爱-不要做你的Guest 只想做的你adm...)
    0

    只是越权取消订单啊 没意思 继续看电影。。

登录后才能发表评论,请先 登录