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
角色,表示管理用户。
参考链接。
- 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
环境启动后,浏览http://192.168.44.132:5984/_utils/
到一个网页,说明Couchdb已经启动成功。但是没有身份验证,您什么也做不了。
利用
这是添加用户的正常请求。
1 | PUT /_users/org.couchdb.user:vulhub HTTP/1.1 |
返回了 403 错误:{"error": "forbidden", "reason": "Only _admin may set roles"}
,这意味着只有管理员可以使用端点。
通过发送包含重复roles的请求来绕过限制。
1 | PUT /_users/org.couchdb.user:vulhub HTTP/1.1 |
成功创建了一个用户vulhub
,有密码vulhub
。
登录成功。