【安全漏洞】Rocket.Chat 远程命令执行漏洞分析

简述Rocket.Chat 是一个开源的完全可定制的通信平台,由 Javascript 开发,适用于具有高标准数据保护的组织。2021年3月19日,该漏洞在 HackerOne 被提出,于2021年4月14日被官方修复。该漏洞主要是因为 Mongodb 的查询语句是类 JSON 形式的,如{"_id":“1”}。由于对用户的输入没有进行严格的检查,攻击者可以通过将查询语句从原来的字符串变为恶意的对象,例如{"_id":{"$ne":1}}即可查询 _id 值不等于 1 的数据。影响版本3.12.1&
摘要由CSDN通过智能技术生成

简述

Rocket.Chat 是一个开源的完全可定制的通信平台,由 Javascript 开发,适用于具有高标准数据保护的组织。

2021年3月19日,该漏洞在 HackerOne 被提出,于2021年4月14日被官方修复。该漏洞主要是因为 Mongodb 的查询语句是类 JSON 形式的,如{"_id":“1”}。由于对用户的输入没有进行严格的检查,攻击者可以通过将查询语句从原来的字符串变为恶意的对象,例如{"_id":{"$ne":1}}即可查询 _id 值不等于 1 的数据。

影响版本

3.12.1<= Rocket.Chat <=3.13.2

漏洞影响面

通过ZoomEye网络空间搜索引擎,搜索ZoomEye dork数据挖掘语法查看漏洞公网资产影响面。

zoomeye dork 关键词:app:“Rocket.Chat”

输入CVE编号:CVE-2021-22911也可以关联出ZoomEye dork

在这里插入图片描述

漏洞影响面全球视角可视化
在这里插入图片描述

复现

复现环境为 Rocket.Chat 3.12.1。

使用 pocsuite3 编写 PoC,利用 verify 模式验证。
在这里插入图片描述

漏洞分析

该漏洞包含了两处不同的注入,漏洞细节可以在这篇文章中找到,同时还可以找到文章作者给出的 exp。第一处在server/methods/getPasswordPolicy.js,通过 NoSQL 注入来泄露重置密码的 token。

getPasswordPolicy(params) {
   
        const user = Users.findOne({
    'services.password.reset.token': params.token });
        if (!user && !Meteor.userId()) {
   
            throw new Meteor.Error('error-invalid-user', 'Invalid user', {
   
                method: 'getPasswordPolicy',
            });
        }
        return passwordPolicy.getPasswordPolicy();
    }

这里的 params 是用户传入的参数,正常来说,params.token 是一串随机字符串,但在这里可以传一个包含正则表达式的查询语句 {’$regex’:’^A’},例如下面这个例子意为查找一处 token 是以大写字母 A 为开头的数据。通过这个漏洞就可以逐字符的爆破修改密码所需的 token。

Users.findOne({
    
    'services.password.reset.token': {
   
        '$regex': '^A'
    } 
})

第二处漏洞在 app/api/server/v1/users.js,需要登陆后的用户才能访问,通过这处注入攻击者可以获得包括 admin 在内的所有用户的信息。注入点代码如下:

API.v1.addRoute('users.list', {
    authRequired: true }, {
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值