资讯详情

CouchDB 1.7.x 分支版本全解:安全漏洞修复、_bulk_get 批量读取与 HTTP 服务改进

📅 2026/10/9 3:05:03 | 华诺云谱 👁 阅读
CouchDB 1.7.x 分支版本全解:安全漏洞修复、_bulk_get 批量读取与 HTTP 服务改进
数据库文档数据库后端【免费下载链接】couchdbSeamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability项目地址https://gitcode.com/gh_mirrors/co/couchdb点击查看免费下载本指南以 CouchDB 官方发布说明 1.7.rst 为骨架系统梳理 1.7.0、1.7.1、1.7.2 三个版本的变更全貌包括 CVE-2017-12635 / CVE-2017-12636 / CVE-2018-8007 三项安全修复、POST /{db}/_bulk_get新接口、HTTP 服务器与查询服务器的多项行为改进并结合仓库源码chttpd、chttpd_db.erl、CVE 文档目录 cve做源码级佐证。读完本文你将掌握 1.7.x 分支每一处改动的内容、原理与影响面可直接用于理解旧版本升级动机与历史行为差异。1.7.x 分支概览1.7.x 是 CouchDB 1.x 系列的最后一个维护分支发布说明覆盖三个版本版本主题关键点1.7.0安全修复 API 扩展修复两个高危 CVE新增_bulk_get大量 HTTP 行为改进1.7.1权限修复修复数据库成员访问/{db}/_all_docs的问题1.7.2安全修复修复 CVE-2018-8007管理员配置校验绕过三个版本分别对应发布说明中的 release/1.7.0、release/1.7.1、release/1.7.2 小节。值得注意的是1.7.0 与 1.7.1 的发布说明中明确指出升级同系列版本1.x → 1.x是无缝的而 1.x → 2.x 的跨系列升级需要参考官方升级说明。安全修复三个 CVE 的成因与缓解1.7.x 分支承载了 2017–2018 年间三个 CVE 的修复全部在仓库 src/docs/src/cve 目录下有独立文档。CVE-2017-12635远程权限提升1.7.0 修复危害等级Critical严重影响范围所有版本的 Apache CouchDB发布日期2017-11-14成因CouchDB 的 Erlang JSON 解析器与 JavaScript JSON 解析器行为不一致。攻击者可以向_users数据库提交带重复roles键的用户文档写入时授权采用的是第二个roles键的值而新建用户后续鉴权采用的却是第一个roles键的值。通过这种解析器差异 重复键的组合普通用户可以为自己赋予包括_admin在内的管理角色实现权限提升。详见 2017-12635.rst。修复方式修改 Erlang 端 JSON 解析行为模拟 JavaScript 的语义——当 JSON 中存在重复键时取最后一个键的值。这消除了两种解析器之间的差异窗口。CVE-2017-12636远程代码执行1.7.0 修复危害等级Critical严重发布日期2017-11-14由 CouchDB 安全团队的 Joan Touzet 在调查 CVE-2017-12635 时发现成因CouchDB 管理员可以通过 HTTP(S) 配置服务器部分配置项包含操作系统级二进制文件的路径CouchDB 会随后启动这些进程。这允许管理员以 CouchDB 运行用户身份执行任意 shell 命令甚至从公网下载并执行脚本。详见 2017-12636.rst。关联性文档明确指出 CVE-2017-12635 与 CVE-2017-12636 可以组合利用——先用 12635 把非管理员提权为管理员再借助 12636 在服务器上以数据库系统用户身份执行任意命令。缓解措施两个 CVE 相同升级到 CouchDB 1.7.1 或 2.1.11.x 或 2.x 系列内升级无缝跨系列升级需查阅升级说明。CVE-2018-8007远程代码执行1.7.2 修复危害等级Low低发布日期2018-04-30由 MDSec Labs 的 Francesco Oddo 发现成因由于对管理员通过 HTTP API 提交的配置项校验不足管理员可以绕过不允许通过 HTTP API 修改的配置项黑名单把权限提升到 CouchDB 所运行的操作系统用户级别从而获得任意远程代码执行能力绕过了 CVE-2017-12636 的修复。详见 2018-8007.rst。缓解措施升级到 CouchDB 1.7.2 或 2.1.2。API 变更_bulk_get 与新校验行为1.7.0 引入了一系列 API 层面的变化其中最核心的是批量读取接口。新增 POST /{db}/_bulk_getissue 2310实现POST /{db}/_bulk_get用于在一次请求中按文档 ID可附带特定 revision批量读取多个文档。该接口的实现位于 src/chttpd/src/chttpd_db.erl 的db_req/2分支中请求进入后依次执行bulk_get_parse_doc_query解析查询参数、bulk_get_parse_args解析文档 ID 与 revision 列表、bulk_get_docs批量取文档最后根据请求头决定返回 JSON 还是 multipart 响应JSON 响应默认bulk_get_ret_json/4返回{docs: [...]}结构每个文档条目内嵌id、rev与docs数组multipart 响应当客户端请求 multipart 时通过bulk_get_ret_multipart与send_docs_multipart_bulk_get见 chttpd_db.erl按内部 boundary 组织每个文档的正文bulk_get_multipart_headers负责为每个 revision 构造头信息。源码还揭示了接口的两个内部优化路径chttpd_db.erl默认开启配置项chttpd.bulk_get_use_batches true走bulk_get_docs_batched批量取文档若显式关闭该配置则退化为bulk_get_docs_individually逐文档读取。该接口在仓库中还配套了专门的测试 chttpd_bulk_get_test.erl 与复制器侧的集成测试 couch_replicator_bulk_get_tests.erl接口的完整参数说明可参考 bulk-api.rst。_session 与校验行为变化issue 1356POST /_session现在会返回用户名username字段。对应认证模块位于 src/chttpd/src/chttpd_auth.erl便于客户端在建立会话后直接确认当前登录身份。issue 1876修复 show/update 函数产生重复 Content-Type头的问题。issue 2375当请求中指定了无效的 revision时返回 HTTP400此前行为不规范。issue 2845当revs参数不是列表时返回 HTTP400。这些 400 校验类改动提升了 API 的错误一致性客户端可以据此更可靠地处理参数错误。HTTP 服务器改进1.7.0 在 HTTP 服务器层面做了多项性能与正确性修复对应 src/chttpd 模块issue 2430默认禁用 Nagle 算法。在 chttpd.erl 中默认 socket 选项定义为[{sndbuf, 262144}, {nodelay, true}]——即发送缓冲区 256 KiB 且开启 TCP_NODELAY减少小包延迟对大量短请求的 HTTP API 场景有明显收益。issue 2583不需要请求体的端点不再主动断开连接避免客户端在无负载请求后遭遇意外的连接关闭。issue 2673正确转义Location:HTTP 响应头防止头注入类问题。issue 2677修正Expires头星期字段错误RFC 规范要求日期以 GMT 格式包含正确星期。issue 2783HTTP 服务同时绑定 IPv4 与 IPv6双栈。commit f30f3dd支持用户自定义 SSL 加密套件ciphers允许运维按安全基线调整 TLS 密码套件组合。数据库核心与权限修复issue 2534改进对数据库admin/member角色的校验逻辑收紧权限判断。issue 2735修复高并发编辑负载下产生重复文档 _id的问题这是写入路径的竞态缺陷。issue 9741.7.1修复数据库成员访问/{db}/_all_docs被拒绝的问题确保 member 级用户能够按权限枚举文档。这些改动分别落在 src/couch 的数据库核心与 src/chttpd 的 HTTP 层。Query Server 与前端相关变更Query Server查询服务器部分issue 1447设计函数返回的自定义响应头现在会与默认响应头合并输出而不是覆盖丢失。commit 7779c11内置 CoffeeScript 升级到1.10版本。对应的运行时入口与渲染逻辑可参考 share/server/coffee-script.js 与 share/server/render.js。FutonWeb 管理界面部分issue 241支持文档复制copy操作。issue 1011支持从 Futon 发起按文档 ID 过滤的复制replication filtered by document ids。issue 1275修复 Futon 最近使用数据库列表中数据库名的转义问题。commit f18f82a升级 jquery.ui 至1.10.4修复潜在的XSS问题。jquery.couch.js部分commit f9095e7同步修复文档复制document copying功能。构建与文档改进issue 1964用EUnit测试框架替换 etap 测试套件统一了测试基础设施。issue 2225强制校验系统可以构建共享库shared libraries。issue 2761支持glibc ≥ 2.20。issue 2747支持Erlang 18commit 5b9742c 进一步支持Erlang 19。commit 1545bf4移除失效的基准测试。文档方面1.7.0 明确了多组易混淆的语义commit c3c9588改进cacert_fileSSL 选项的文档说明commit 3266f23澄清tombstone墓碑的作用commit 75887d9完善CouchDB 复制协议定义可对照 复制文档commit 3b1dc0f移除对group_levelexact的过时提及commit 2a11daa移除 Futon 中 Test Suite 的过时表述commit 01c60f1澄清key、startkey、endkey参数的类型。升级与运维建议综合发布说明与 CVE 文档1.7.x 分支的实际运维要点如下安全基线若仍运行 1.7.0 之前的 1.x 版本务必至少升级到 1.7.1覆盖 CVE-2017-12635 / 12636若要覆盖 CVE-2018-8007需升级到 1.7.2 或 2.1.2。同系列升级1.x → 1.x 的升级是无缝的1.x → 2.x 属于跨系列升级需查阅官方升级说明不可直接套用。版本差异由于 1.7.x 是 1.x 系列的末代分支其 HTTP 行为如 Nagle 禁用、IPv4/IPv6 双栈、_bulk_get在后续 2.x/3.x 中均有延续或演进阅读 2.0.rst 等后续发布说明可追溯这些特性的去向。接口变化应用方若使用_bulk_get可结合 bulk-api.rst 与 chttpd_bulk_get_test.erl 验证 JSON 与 multipart 两种响应格式并留意bulk_get_use_batches配置项对批量读取路径的影响。赞分享数据库文档数据库后端【免费下载链接】couchdbSeamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability项目地址https://gitcode.com/gh_mirrors/co/couchdb点击查看免费下载相关推荐Zcash v2.0.7-3 安全热修复版本解析漏洞修复、服务期调整与 zcashd 日志与钱包并发改进Zcash v2.0.7 3 安全热修复版本解析漏洞修复、服务期调整与 zcashd 日志与钱包并发改进 本篇技术指南围绕 Zcash 全节点 zcashd区块链密码学Node.js v8.11.3LTS Carbon安全发布解读Buffer 与 HTTP/2 拒绝服务漏洞修复全解析Node.js v8.11.3LTS Carbon安全发布解读Buffer 与 HTTP/2 拒绝服务漏洞修复全解析 Node.js v8.11.3前端文档Node.js v12.8.1 安全版本深度解析8 个 HTTP/2 拒绝服务漏洞CVE-2019-9511 ~ 9518与修复提交全解读Node.js v12.8.1 安全版本深度解析8 个 HTTP/2 拒绝服务漏洞CVE 2019 9511 ~ 9518与修复提交全解读 2019 年前端文档上一篇【亲测免费】 源码探测器SourceDetector使用教程下一篇VSCodium彻底消除隐私隐患的革命性开源代码编辑器解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑