IPBUF安全漏洞报告
English
CVE-2026-34363 CVSS 5.3 中危

CVE-2026-34363 Parse Server LiveQuery 数据泄露漏洞

披露日期: 2026-03-31

漏洞信息

漏洞编号
CVE-2026-34363
漏洞类型
竞态条件/信息泄露
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Parse Server

相关标签

信息泄露竞态条件Parse ServerLiveQueryCVE-2026-34363数据隔离

漏洞概述

Parse Server在特定版本之前的LiveQuery功能中存在安全漏洞。当多个客户端订阅同一类时,系统使用共享的可变对象并发处理订阅者。由于敏感数据过滤器会原地修改这些对象,导致一个订阅者的过滤操作可能影响后续订阅者接收到的数据。这可能导致受保护字段或认证数据泄露给无权查看的客户端,或者导致客户端接收到不完整的数据对象。

技术细节

该漏洞的根本原因是LiveQuery事件处理器在处理并发订阅时未能正确隔离数据状态。Parse Server在处理LiveQuery更新时,为了性能可能使用了共享的对象引用来传递数据。当配置了类级别权限(CLP)或字段级别安全策略时,系统会遍历对象以移除当前用户无权访问的字段。由于对象是共享且可变的,一旦一个订阅者的上下文修改了该对象(例如删除了password字段),该对象在内存中即被改变。随后,另一个订阅者读取同一引用时,获取到的便是已被修改后的对象。此外,afterEvent触发器中的修改也会通过此共享状态泄露,破坏了多租户环境下的数据隔离性。

攻击链分析

STEP 1
侦察
攻击者识别目标正在使用受影响版本的Parse Server,并且启用了LiveQuery功能。
STEP 2
建立连接
攻击者创建两个或多个客户端(或利用现有并发用户),让这些客户端同时订阅同一个包含敏感字段(如认证信息、个人身份信息)的Parse Class。
STEP 3
触发事件
攻击者等待或诱导服务端对该Class进行数据更新操作,从而触发LiveQuery事件推送。
STEP 4
竞态利用
服务端并发处理订阅者的数据过滤。由于共享可变对象,一个订阅者的权限过滤逻辑(如移除字段)修改了内存中的对象。
STEP 5
数据泄露
后续的订阅者接收到已被修改的对象。如果修改逻辑导致敏感字段未被正确过滤,则发生数据泄露;或者导致合法用户丢失数据访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// This is a conceptual PoC to demonstrate the race condition scenario. // It requires two clients subscribing to the same class simultaneously. const Parse = require('parse/node'); // Initialize Parse connection to the vulnerable server Parse.initialize('APP_ID', 'JS_KEY'); Parse.serverURL = 'http://localhost:1337/parse'; async function demonstrateDataLeak() { const query = new Parse.Query('SensitiveData'); // Client 1: Has permission to see 'secretField' const client1Subscription = await query.subscribe(); client1Subscription.on('update', (object) => { console.log('[Client 1] Received object:', object.toJSON()); // Expecting to see 'secretField' }); // Client 2: Does NOT have permission to see 'secretField' (CLP restriction) // In a vulnerable version, Client 2 might receive an object where 'secretField' // is missing because Client 1's processing pipeline (or vice versa) mutated the shared object. const client2Subscription = await query.subscribe(); client2Subscription.on('update', (object) => { console.log('[Client 2] Received object:', object.toJSON()); // Vulnerability: If Client 1's filter ran first and removed a field Client 2 needs, // or if Client 2's filter removed a field that Client 1 needs, data integrity is lost. // Or sensitive data leaks if the mutation logic is inverted. }); // Trigger an update on the server to fire the LiveQuery event // This simulates the concurrent processing condition } demonstrateDataLeak();

影响范围

Parse Server < 8.6.65
Parse Server < 9.7.0-alpha.9

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用LiveQuery功能,或者在应用层确保不会有多权限级别的用户同时订阅同一个数据类,以避免竞态条件导致的数据混淆。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表