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

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

缺陷编号:wooyun-2013-024938

漏洞标题:百度某社区权限缺陷导致用户信息泄露等

相关厂商:百度

漏洞作者: 你撸我也撸

提交时间:2013-06-03 10:55

修复时间:2013-07-18 10:57

公开时间:2013-07-18 10:57

漏洞类型:未授权访问/权限绕过

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-06-03: 细节已通知厂商并且等待厂商处理中
2013-06-03: 厂商已经确认,细节仅向厂商公开
2013-06-13: 细节向核心白帽子及相关领域专家公开
2013-06-23: 细节向普通白帽子公开
2013-07-03: 细节向实习白帽子公开
2013-07-18: 细节向公众公开

简要描述:

RT!

详细说明:

改一下id,可以读取其他存在“发件箱”的私信:
http://openresearch.baidu.com/member/message_read.jspx?id=500&&box=1

漏洞证明:

大量获奖大学生的详细联系方式等信息:

1.png


2.png


3.png


4.png


5.png


修复方案:


好象是用的开源代码啊,jeecms(这个开源系统百度也敢用?权限稀烂啊!):

6.png


或者可能是下面的关联因素造成的(参考代码是jeecms-2012-sp1):
com.jeecms.cms.action.member.MessageAct.java类:

public String message_read(Integer id, Integer box,HttpServletRequest request, HttpServletResponse response,ModelMap model) 方法:
@RequestMapping(value = "/member/message_read.jspx")
public String message_read(Integer id, Integer box,
HttpServletRequest request, HttpServletResponse response,
ModelMap model) {
CmsSite site = CmsUtils.getSite(request);
CmsUser user = CmsUtils.getUser(request);
FrontUtils.frontData(request, model, site);
MemberConfig mcfg = site.getConfig().getMemberConfig();
// 没有开启会员功能
if (!mcfg.isMemberOn()) {
return FrontUtils.showMessage(request, model, "member.memberClose");
}
if (user == null) {
return FrontUtils.showLogin(request, model, site);
}
CmsReceiverMessage message = receiverMessageMng.findById(id);
if (message != null) {
// 阅读收信
// 非收件人和发件人无权查看信件
if (!message.getMsgReceiverUser().equals(user)
&& !message.getMsgSendUser().equals(user)) {
WebErrors errors = WebErrors.create(request);
errors.addErrorCode("error.noPermissionsView");
return FrontUtils.showError(request, response, model, errors);
}
// 收件人查看更新已读状态
if (message.getMsgReceiverUser().equals(user)) {
message.setMsgStatus(true);
receiverMessageMng.update(message);
log
.info(
"member CmsMessage read CmsMessage success. id={}",
id);
}
model.addAttribute("message", message);
} else {
// 阅读已发信
CmsMessage msg = messageMng.findById(id);
model.addAttribute("message", msg);
}
model.addAttribute("box", box);
return FrontUtils.getTplPath(request, site.getSolutionPath(),
TPLDIR_MESSAGE, MESSAGE_READ);
}


例如,看看这段权限控制:
先根据id在“收件箱”

CmsReceiverMessage message =receiverMessageMng.findById(id);

里找这条信息。
如果存在

if (message != null) {

,就走“阅读收信”的流程,再去判断当前用户是否有阅读权限

if(!message.getMsgReceiverUser().equals(user)&&!message.getMsgSendUser().equals(user)) {

,下面就是正常逻辑了,没什么大问题。
如果上面这个id在“收件箱”中不存在,就在下面“发件箱”中找

CmsReceiverMessage message =receiverMessageMng.findById(id);


看到,没有和上面“阅读收信”一样做进一步的权限验证,直接addAttribute发件箱的这条信息给用户了:

else {
// 阅读已发信
CmsMessage msg = messageMng.findById(id);
model.addAttribute("message", msg);
}


刚本地测试,自己发的一条给其他用户的信息,自己都没有这条信息在“发件箱”中的阅读权限了(id错位了),@jeecms :

7.png


看看是不是这种情况?当然,如果是,上面至少还有一层逻辑造成“收件箱”与“发件箱”的id错位了(“收件箱”、“发件箱”、“草稿箱”、“垃圾箱”这四个操作存储时id问题,我这边测试id逻辑全错了,所以jeecms把上面的权限控制及存储代码的逻辑好好再捋一遍!),自己去看吧,看别人的代码很辛苦!
或者是二次开发等其他情况造成的!

版权声明:转载请注明来源 你撸我也撸@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2013-06-03 20:16

厂商回复:

感谢提交,此为第三方开发。正在联系处理!

最新状态:

暂无