清缓存的动作能删掉任意目录,一段名字拼进路径会出什么问题
清缓存的动作能删掉任意目录,一段名字拼进路径会出什么问题?Joomla 2026 年 9 月的公告 CVE-2026-90915 给出了一个真实样本:缓存分组名未做校验,攻击者借路径穿越让清缓存动作删掉任意目录。这类问题的共同点是:功能本身合理,坏在把用户可控的名字未经处理拼进了文件路径。凡是在后台动作里把名称、分组、标识拼进路径的位置,都值得按同样的思路复查一遍。
公告写了什么?
这份 Joomla 核心公告的标题是”通过清缓存动作任意删除目录”,缺陷类型为路径穿越,影响程度评为高、发生概率评为低,受影响版本覆盖 4.0.0 至 5.4.8 与 6.0.0 至 6.1.3 两个系列,解决办法是升级到 5.4.9 或 6.1.4。成因原文说的是:缓存分组名校验不当,导致缓存层文件存储中的路径穿越,进而造成任意目录删除。概率评为低不代表可以缓办——触发条件并不复杂,影响又直接落在文件系统上,删掉的目录没有恢复按钮。
一段名字怎么变成目录穿越?
缓存系统通常按分组名建目录,也按分组名清目录。如果代码直接把分组名拼到存储根路径后面,一个包含跳转片段的名字就能把最终路径指到存储根之外,删除动作跟着路径走,删的就是拼出来的那个目录。问题不在”删除”这个动作,而在路径的构造方式:名字是输入,路径是拼接结果,中间少了校验这一环。修复思路也在这里:把名字限定在白名单字符内,拒绝包含路径分隔符与跳转片段的输入,删除动作再限定只能作用于存储根以内,三层收口叠加才算闭环。
哪些位置要按同样思路复查?
三类位置最值得查:缓存管理里的分组名与清理入口,上传环节的文件名与目录参数,备份与恢复环节的备份文件名与还原路径。复查时只需要回答一个问题:这个字符串会不会被拼进路径?会的话,它来自哪里、有没有字符白名单、动作能不能越出预设的根目录。后台动作的输入比页面上的输入更容易被忽视,因为写代码时默认”操作者已经登录”,而路径穿越恰恰常借合法登录会话触发。
升级之外还要做什么?
升级解决已知点,输入校验是面上的功夫。同类校验缺失在不同位置会演化成不同问题:拼进查询语句就是 SQL 注入,拼进页面输出就是跨站脚本,拼进文件路径就是目录穿越——防的是同一件事:不可信输入未经验证就进入执行环境。删改类动作还要留后手:动手前先备份,AnQiCMS 的备份与恢复支持包含静态文件在内的数据备份,出问题可以整体还原;删除类操作限定根目录、拒绝越界片段,再把高危动作的入口收敛到受控范围,才能真正把”概率低”变成”发生了也不怕”。
| 复查位置 | 拼进路径的输入 | 要确认的事 |
|---|---|---|
| 缓存管理 | 分组名、缓存键 | 白名单与根目录限定 |
| 上传附件 | 文件名、目录参数 | 拒绝路径分隔符 |
| 备份恢复 | 备份名、还原路径 | 动作入口收敛在后台 |
常见问题
问:影响评级高、概率低,还能缓一缓吗? 答:不建议。概率评的是被利用的难易,影响评的是后果轻重;删除目录类后果不可逆,而升级动作本身成本很低。
问:不用这个功能还会有风险吗? 答:漏洞在代码路径上而不在使用频率上;只要功能可达就可能被触发,升级到修复版本是彻底的处置方式。
问:怎么自查自己的系统有没有同类问题? 答:检索代码里所有把变量拼进路径的调用点,逐一核对输入源是否做了字符白名单与越界检查;没有源码审计条件时,至少保证系统运行在受支持版本上并及时跟进安全更新。