企业应用中的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漏洞。
利用代码示例:
|
|
披露时间线:
- 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://等),可能导致任意代码执行。
利用代码示例:
|
|
披露时间线:
- 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钓鱼提示。
利用代码示例:
|
|
披露时间线:
- 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文件附件在电子邮件收件箱中发生。
利用代码示例:
|
|
披露时间线:
- 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)。
开发者应在设计和实现方面加强现有标准:
- 通过集中客户端和服务器库解决"一个标准,多种解释"问题
- 避免不必要的专有标准扩展
- 通过贡献开源iCalendar库保护整个生态系统
安全研究人员无疑会在iCalendar标准的不一致应用中发现许多错误。