Skip to content

WxFeedbackController中的submit接口疑似存在水平越权漏洞 #574

@goldthree-shit

Description

@goldthree-shit

问题描述

WxFeedbackController中的submit接口中,直接不经过任何身份校验传入了用户iduserId,并且根据这个userId查询用户,修改用户数据。如果已登录的用户A通过直接调用接口传递用户B的userId,那么就可能造成潜在的跨用户数据修改的水平越权漏洞。

代码分析

如下方所示,不存在任何任何的对于用户身份的校验

    /**
     * 添加意见反馈
     *
     * @param userId   用户ID
     * @param feedback 意见反馈
     * @return 操作结果
     */
    @PostMapping("submit")
    public Object submit(@LoginUser Integer userId, @RequestBody LitemallFeedback feedback) {
        if (userId == null) {
            return ResponseUtil.unlogin();
        }
        Object error = validate(feedback);
        if (error != null) {
            return error;
        }

        LitemallUser user = userService.findById(userId);
        String username = user.getUsername();
        feedback.setId(null);
        feedback.setUserId(userId);
        feedback.setUsername(username);
        //状态默认是0,1表示状态已发生变化
        feedback.setStatus(1);
        feedbackService.add(feedback);

        return ResponseUtil.ok();
    }

建议的修复

通过当前用户的登录token获取userId, 而非直接通过controller层接口传递

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions