2.17. CVE-2023-45725:Apache CouchDB:使用设计文档进行权限提升¶
- 日期:
12.12.2023
- 受影响版本:
3.3.2 及以下版本
- 严重程度:
中等
- 供应商:
Apache 软件基金会
2.17.1. 描述¶
接收用户 HTTP 请求对象的設計文档函数可能会暴露访问该文档的用户授权或会话 cookie 标头。
- 这些设计文档函数是
list
show
rewrite
update
攻击者可以使用 HTML 类输出泄露会话组件,将会话插入为外部资源(例如图像),或将凭据存储在具有“update”函数的 _local
文档中。
为了使攻击成功,攻击者必须能够将设计文档插入数据库,然后操纵用户访问该设计文档中的函数。
2.17.2. 缓解措施¶
CouchDB 3.3.3 从传递到查询服务器执行环境的 HTTP 请求对象中删除敏感标头。
对于早于 3.3.3 的版本,将此补丁应用于 loop.js
文件也可以缓解此问题
diff --git a/share/server/loop.js b/share/server/loop.js
--- a/share/server/loop.js
+++ b/share/server/loop.js
@@ -49,6 +49,20 @@ function create_nouveau_sandbox() {
return sandbox;
}
+function scrubReq(args) {
+ var req = args.pop()
+ if (req.method && req.headers && req.peer && req.userCtx) {
+ delete req.cookie
+ for (var p in req.headers) {
+ if (req.headers.hasOwnProperty(p) && ["authorization", "cookie"].indexOf(p.toLowerCase()) !== -1) {
+ delete req.headers[p]
+ }
+ }
+ }
+ args.push(req)
+ return args
+}
+
// Commands are in the form of json arrays:
// ["commandname",..optional args...]\n
//
@@ -85,7 +99,7 @@ var DDoc = (function() {
var funPath = args.shift();
var cmd = funPath[0];
// the first member of the fun path determines the type of operation
- var funArgs = args.shift();
+ var funArgs = scrubReq(args.shift());
if (ddoc_dispatch[cmd]) {
// get the function, call the command with it
var point = ddoc;
2.17.3. 解决方案¶
避免使用来自不可信来源的设计文档,这些来源可能试图访问或操纵请求对象的标头。
2.17.4. 致谢¶
此问题由 JFrog 漏洞研究团队的 Natan Nehorai 发现,并由 Or Peles 报告。
它也由 IBM/Cloudant 的 Richard Ellis 和 Mike Rhodes 独立发现。