iCagenda 安全通知
如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 iCagenda(JoomliC 开发的
com_icagenda,一个用于 Joomla 内容管理系统的活动日历扩展)的一个版本,该版本受一个已知安全问题
影响。本页面解释了该问题是什么、如何检查它是否适用于您,以及如何修复它。
本通知涉及 CVE-2026-48939,这是一个严重且正被主动利用的缺陷,通过该扩展前端的“提交活动” (Submit an Event)表单,允许 未经身份验证的任意文件上传,从而导致远程代码执行。它已于 2026 年 7 月 10 日被列入美国网络安全和基础设施安全局(CISA)的 已知被利用漏洞 目录。
两个条件,缺一不可
当以下两点 同时 成立时,您的网站会受到该远程代码执行问题的影响:
- iCagenda 处于 4.0.x 系列,且版本低于 4.0.8(即 4.0.0 至 4.0.7),且
- Joomla 核心版本低于 6.1.2。
如果 iCagenda 为 4.0.8 或更高版本,您不受影响。并且,如果您的 Joomla 核心版本为 6.1.2 或 更高,即使 iCagenda 版本较旧,您同样不受影响,因为核心本身会阻止该上传。如果这符合您网站的 情况,除了需要指出更新 iCagenda 仍然值得做之外,您可以在此停止阅读。
第二个条件正是本页面与供应商自身公告存在分歧的地方,该公告称此问题只会波及运行 Joomla 6 的 网站。实际上,它同样会波及完全保持最新的 Joomla 4 和 Joomla 5 网站,我在下文列出了相关证据, 因为如果您点击链接查看,会发现供应商所说的并非如此。
如果您使用的是受影响版本,请 更新 iCagenda;并且,由于该缺陷在补丁发布之前就已被利用, 还请 检查您的网站是否存在他人已抢先得手的迹象(见下文 如果您曾使用受影响版本)。
给仍在使用较旧的 3.9.x 系列的用户的提示。 已发布的 CVE 范围包括 3.9.x,供应商也为该系列 打了补丁,版本为 3.9.15。根据我自己的分析和测试,3.9.x 系列的上传功能使用了一条不同的、受保护 的代码路径,因此 远程代码执行这一后果在该系列上无法触发:在 Joomla 4 和 5 上,该上传会被 核心阻止;而在 Joomla 6 上,这条代码路径根本已不存在,因此该功能只会直接报错。但这不是忽视此次 更新的理由。同样的发行版还修复了一个 缺失的授权检查,该缺陷使匿名访客能够向您的站点推送 一个未经批准的活动(在 Joomla 4 和 5 上,还能连带推送一个允许类型的文件)。严重程度较低,但仍 值得修复:请更新到 3.9.15 或更高版本。另请注意,供应商仅为 3.9.x 系列提供安全补丁至 2026 年 10 月 13 日。
这封邮件是真实的吗?
是的。这是一份来自独立安全研究人员的善意、负责任披露通知。我 不会 向您索要金钱、密码或 网站访问权限,我也 没有 尝试侵入您的网站、上传任何内容或利用任何漏洞。
我读取的只是您网站向任何请求者公开提供的 两个公开文件:位于
/administrator/components/com_icagenda/icagenda.xml 的 iCagenda 组件清单文件,以及位于
/administrator/manifests/files/joomla.xml 的 Joomla 核心清单文件。这两个都是纯 XML 版本
文件,正是下文如何检查您的版本中描述的那两个文件,因此您可以
准确看到我看到了什么。仅此而已。我特意 没有 提交您的活动表单,没有上传任何内容,也没有
请求您网站上的附件目录。该路径之所以出现在本页面下方,仅仅是作为一个供 您 自己在网站上
查看的位置。此检查的任何部分都不会触及您的数据、您的后台,或您网站的任何私有部分。
如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。
为什么这很重要
iCagenda 在 Joomla 网站上发布活动日历。它的一项功能允许访客通过前端表单提交活动,并可选择
附加一个文件,该文件会存放在 images/icagenda/frontend/attachments/ 目录下。
在受影响版本中,该提交 无需登录 即可被接受,并且附件在写入磁盘时 不会对文件类型进行任何 检查,会保留提交者所选择的文件名和扩展名。这种组合使攻击者能够将自己选择的程序放置到您的 服务器上并运行它:完全的远程代码执行,既不需要账号,也不需要您的任何配合。
无需开启任何设置即可触发此问题。该表单不必已发布或对访客可见:在受影响版本中,其背后的控制器 无论如何都会接受提交。
这不是一种理论上的风险。NVD 对其评分为 9.8(满分 10 分)(在编号机构采用的新评分体系下为 10.0),并且它 正在野外被利用。供应商报告称,利用行为始于 2026 年 6 月 15 日 08:00 UTC,早于补丁发布之前,并将这些攻击描述为自动化攻击。CISA 已于 2026 年 7 月 10 日 将其 列入已知被利用漏洞目录。
我在此描述的详细程度仅限于网站所有者采取行动所需的水平,不再深入。我不会发布能让他人重现此 问题的细节,也希望您不要尝试在自己或他人的网站上进行测试。按照下文所述读取您的两个版本号, 就能获知决定采取何种行动所需的一切信息。
如果我的邮件中引用了此问题,说明您网站所报告的版本在这两项条件上都落入受影响范围。我没有测试 您的具体网站是否可被利用,或是否已经被入侵。
本页面与供应商公告的分歧之处
供应商的公告值得一读,我在下文附上了链接。他们迅速发布了修复方案,其指导意见也很到位。但其中 有一句关于适用范围的表述站不住脚,而且正是这句话会让本页面的大多数读者以为可以放心,所以我想 展示我的推理过程,而不是仅仅断言。该公告写道:
Unsafe file uploads were already blocked by default on all Joomla versions prior to Joomla 6. Only install of iCagenda on Joomla 6 (6.0.0-6.1.1) had the critical upload vulnerability.
以下是我在自己的隔离安装环境中测得的结果,整个过程未涉及任何第三方网站。
- iCagenda 4.0.x 通过 框架(framework) 类
Joomla\Filesystem\File执行上传,该类来自 Joomla 核心捆绑的joomla/filesystem包。它 没有 使用同名的旧版 Joomla CMS 类,而正是 那个旧版类一直带有安全文件检查,公告中所指的大概正是它。 - 该框架方法直到
joomla/filesystem4.2.0 才获得自身的安全文件检查($allowUnsafe参数 和isSafeFile测试),而这正是 Joomla 6.1.2 所捆绑的版本。 - 我实际检查过的 Joomla 发行版所捆绑的版本是:Joomla 4.4.14 捆绑 filesystem 2.0.2(无 检查),Joomla 5.4.7 捆绑 3.2.0(无检查),以及 Joomla 6.1.2 捆绑 4.2.0(有检查)。
因此,一个完全打了补丁的 Joomla 4 或 Joomla 5 网站,如果运行的是 iCagenda 4.0.0 至 4.0.7, 确实 处于暴露状态,这也是本页面将 Joomla 条件表述为“低于 6.1.2”而不是“仅限 Joomla 6”的 原因。已发布的 CVE 记录、NVD 条目或 CISA 目录都完全没有按 Joomla 版本来限定此问题的范围;这样 的限定只出现在供应商公告的那句话中。
如何检查您的版本
这两个数字都不必只听我一面之词,您可以自行检查。
通过清单文件查看您的 iCagenda 版本(无需登录): 打开
yourdomain.com/administrator/components/com_icagenda/icagenda.xml
并阅读其中的 <version> 元素。这是我读取的两个文件之一。
通过后台查看您的 iCagenda 版本:
- 登录您的 Joomla 后台(通常位于
yourdomain.com/administrator)。 - 前往 System 然后 Manage 然后 Extensions。
- 搜索 iCagenda 并记下已安装的版本。
请注意区分您读取的是哪一个 icagenda.xml。 iCagenda 软件包还捆绑了一个搜索插件,其清单
文件同名,但带有自己的、与之无关的版本号。只有上面给出的组件路径,才能告诉您该扩展实际运行的
版本。
您的 Joomla 核心版本: 在后台中,前往 System 然后 System Information。或者读取
/administrator/manifests/files/joomla.xml 并取其 <version> 元素。这是我读取的另一个
文件。
无法从公开的页面源代码中判断 iCagenda 的版本,也不应该尝试这样做。 该扩展的前端资源携带的 是 Joomla 站点级的媒体哈希值,而不是版本号;页面源代码中唯一形似版本号的数字,属于日历模块的 资源包(一个较小的数字,如 1.0.4),与组件本身毫无关系。清单文件或后台界面才是唯一可靠的检查 方式。
然后套用本页面开头的规则:4.0.x 系列且低于 4.0.8,并且 核心低于 6.1.2,即为受影响。
如何升级
最安全的做法是通过 Joomla 本身进行更新,并先做好备份:
- 在做出更改之前 备份您的站点(文件和数据库)。大多数主机服务商都提供一键备份,或者使用 Joomla 备份扩展。
- 在 Joomla 后台,打开 Extensions 然后 Manage 然后 Update,并点击 Find Updates。如果列出了 iCagenda 更新,就从这里安装它。
- 如果那里没有出现更新,请直接从供应商 JoomliC 下载当前版本, 并通过 Extensions 然后 Install 进行安装。
- 应安装哪个版本: 4.0.8 是修复此问题的版本,但撰写本文时的当前版本是 4.0.11,并且 4.0.8 之后的版本针对同一功能增加了进一步的防护,包括阻止从 iCagenda 媒体文件夹执行代码。 请升级到 4.0.11,而不要止步于 4.0.8。若使用较旧的系列,请升级到 3.9.15 或更高 版本。
- 另外,将 Joomla 核心更新到 6.1.2 或更高版本 同样可以关闭这个特定问题,但这不能替代对 扩展本身的更新:缺失的授权检查存在于 iCagenda 本身,只有更新 iCagenda 才能修复它。
- 升级后,按照上述步骤确认新的版本号,并检查您的日历是否仍能正常显示,活动提交功能是否仍 按预期正常工作。
既然您已经在处理这些,不妨顺便确认 Joomla 本身 以及您的其他扩展是否都是最新的,因为同样的 原则适用于所有这些组件。
如果您曾使用受影响版本
由于该缺陷在补丁发布 之前 就已被利用,曾运行受影响版本的网站不应想当然地认为更新就足够了。 更新会关闭这扇门,但不会告诉您是否已经有人从中走过。这一点值得心平气和地去检查,而不是假设最 坏的情况:大多数网站将一无所获。用供应商自己的话说:
The update closes the entry point and protect the file attachment feature, but does not clean up an already compromised site. […] Keep a copy of any suspicious files as evidence, delete them, change your Joomla passwords and credentials, and audit your entire site, not just the iCagenda folder.
以下是您(或您的网站管理员)可以在 自己的 网站上检查的内容:
-
images/icagenda/frontend/attachments/目录下的 PHP 文件。 该文件夹应当始终只存放 活动附件。在 Linux 主机上,检查方法是:find images/icagenda/frontend/attachments -name '*.php' -type f - 审核队列中滞留的未批准匿名活动,如果您从未向公众开放活动提交功能,这种情况本不应该 出现。
- 访问日志中来自自称
icagenda-batch/1.0的扫描器的记录。
从 4.0.8 版本起,iCagenda 也会自行检查入侵迹象,如果发现任何迹象,会在您更新后发出警报。供应商 明确表示,没有出现该警报并不能作为保证,因此它只是一个有用的信号,而不是健康证明。
如果您发现上述任何一种情况,请将该站点视为已被入侵:先保留可疑文件的副本作为证据,然后将其 删除,轮换所有凭据(Joomla 管理员账号、数据库、FTP/SSH、主机面板),审查您的 Joomla 用户 账号及其所属的用户组,并审计整个站点,而不仅仅是 iCagenda 文件夹。从 2026 年 6 月 15 日之前 的备份进行恢复,通常比原地清理更安全,因为遗留的后门可能会使清理工作前功尽弃。如果您的组织有 信息安全团队或所在国家的 CERT,请让他们参与进来。
我想说清楚:我 没有 针对上述任何一项迹象检查过您的网站,也不知道您的网站是否受到影响。列出 这份清单,是为了让您能够自行检查。
我没有网站管理员 / 我卡住了
如果您不是负责维护网站的人,请将此页面转发给负责的人(您的网页开发者、代理机构或主机服务商)。 他们会很快认出上述步骤。
如果您自己维护网站并遇到困难,我很乐意免费帮助您指明正确的方向。请使用下面的联系方式联系我。
联系方式
Evan Harris,安全研究员
- 邮箱:security@mail.mcpsec.dev
- X:@Evan__Harris
- GitHub:eharris128
- LinkedIn:Evan Harris
我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我, 我会遵从。
参考
官方公告与追踪
供应商(JoomliC)