11 月 2 日披露的 CVE-2026-102802 值得单独写一篇——不是因为它的严重度(官方定级 informational,无在野利用),而是因为它展示了一类 Joomla 扩展生态里最少被谈论的风险:两个各自都正确的扩展,组合起来产生授权缺口。涉事双方都是 Regular Labs——Joomla 生态最负盛名的扩展商之一,修复已在 Sourcerer 17.0.1 和 Articles Anywhere 20.1.1 中发布。同时使用这两个扩展的中文站点不在少数,值得对照版本号自查。

漏洞机制:顺序错了,权限就错了

先看两个"受害者"各自的设计意图。Sourcerer 允许受信任的作者在文章里直接写 PHP 代码——它的安全模型建立在"作者信任级别"上:谁能写 PHP、写到哪里,都按文章作者的权限判断。Articles Anywhere 则可以把一篇文章的内容嵌入到另一篇文章或任何内容区域里显示——它自己也不涉及权限问题,只是做内容引用。问题出在组合后的处理顺序:当 Articles Anywhere 先把 A 文章的内容嵌进 B 文章、而 Sourcerer 的安全检查随后才运行时,Sourcerer 是用外层文章(B)的作者信任级别去评估嵌入内容里的 PHP 代码的——而不是内层文章(A)作者自己的权限。于是一条授权缝隙出现了:一个只有普通文章编辑权限的用户,把自己的 PHP 代码写进 A 文章,等 A 被 B 嵌入显示时,这段代码会以 B 的更高信任级别执行。攻击前提是拥有文章创建/编辑权限——所以它不是匿名攻击向量——但在多作者站点上,这等于给低权限用户开了一条执行 PHP 的暗道。技术层面的关键变量是 "Force Content Triggers" 设置:该选项被禁用时,内容触发器的处理顺序正是产生缺口的前提。

组合漏洞为什么难防

这类问题的本质是插件执行顺序不可控。Joomla 的事件/触发器系统让扩展彼此协作,但几乎没有扩展会假设"可能有另一个扩展在我之前改写了内容"。Sourcerer 单测是对的(按文章作者权限判断),Articles Anywhere 单测也是对的(正确嵌入内容),两者的安全假设拼在一起却漏了一条缝。这不是 Regular Labs 一家的课题——上一期我们盘点编辑器和构建器时也提过,前端端点之间的交互是自动化审计最容易漏掉的地带。另外值得注意 Regular Labs 自身的修复节奏:近三个月里它已连续处理了 Articles Anywhere/Users Anywhere 反射 XSS、Articles Anywhere 存储型 XSS(link 选项)、Sourcerer 未验证输入 RCE、缓存信息暴露等一连串问题——顶级开发商的代码也在持续被打补丁,"用大牌就放心"并不是安全策略。

给中文用户的建议

同时使用 Sourcerer 和 Articles Anywhere 的站点(Regular Labs 全家桶用户尤其要查):把两个扩展分别升级到 Sourcerer 17.0.1 与 Articles Anywhere 20.1.1 或更新版本,缺一不可——这个洞修在两边。管理后台:检查 Sourcerer 的 "Force Content Triggers" 设置,理解它对你站点内容处理顺序的影响;如果用不到嵌套内容触发,保持默认谨慎配置。多作者站点:借这次机会做一次"谁能写 PHP"的权限盘点——Sourcerer 的信任组里除了你自己还有谁?作者角色是否真的需要进入信任名单?建站公司:代维站点里凡是同时装了这两个扩展的,一并升级并记录版本号;与 Helix、Gridbox 的更新一样,把"升级完成日期"写进维护日志,下次漏洞披露时能立刻核对站位。

总结

CVE-2026-102802 的严重度不高,攻击前提也不苛刻到值得恐慌——但它示范了一种难以自动化检测的风险形态:单独审计每个扩展都合格,组合运行才暴露问题。对中文站长,两个动作马上做:升级两个扩展到修复版、盘点 PHP 执行权限名单。对整个生态,这条 CVE 留下的启示更长久——扩展组合本身就是一个攻击面,而它不在任何一家开发商的安全责任书里。

作者: 樱木花道

Joomla程序员,从J1.5到J6.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前