在比较防火墙之前更新 Forminator
防火墙是一个附加层,不能替代更正的上传逻辑。
- 1安装最新支持的 Forminator 版本
NVD 将 1.24.6 之前的版本识别为受影响的版本。不要仅仅因为旧的历史版本包含原始更正就安装它。
- 2确认当前版本
检查 WordPress 插件屏幕上显示的版本,并验证废弃的副本没有留在服务器的其他位置。
- 3查看较旧的暴露站点
如果 1.24.6 或更早版本接受公共图像后上传,请调查意外的可执行文件,尤其是在上传目录下,并查看相关的请求和文件更改日志。
- 4将可疑文件视为事件
保留日志和备份、调查持久性、在遏制后轮换受影响的凭据,并遵循 恶意软件清理指南.
简单的英语漏洞
受影响的图像后路径在完成决定是否允许其最终文件类型的检查之前写入了一个文件。
在 Forminator 到 1.24.6 中, upload_post_image() 读取上传的数据,选择最终的文件名,然后写入文件。之后代码才调用 WordPress 文件类型检查来确定最终扩展名是否属于允许的图像列表。
WordPress 变更集将写入移至成功的验证分支内。这个顺序很重要:验证只有在服务器创建文件之前运行时才能拒绝危险的最终名称。
历史测试范围
存档保留了表格和散文,但没有足够的细节来进行当前或完全可重现的比较。
- 测试日期
- 2023 年 9 月 2 日
- 目标
- Forminator 1.24.6 后期图片上传路径
- 流量来源
- 根据原始文章,AWS 微型服务器
- 测试输入
- 文章引用的公共Exploit-DB样本;这里没有复制有效负载
- 产品展示
- Wordfence、NinjaFirewall、Shield Security、SiteGround Security 和 BitFire
- 配置声明
- 作者报告说启用了所有现成的安全选项
更新后的表格保留了 BitFire 撰写的过时观察结果,而不是重新测试。下面的每个状态都是原始图例的文本替换:已阻止、已绕过、未阻止或手动规则。没有推断出丢失的结果。
链条可能被中断的七个地方
每个控件看到同一请求的不同部分。一个有用的设计并不依赖于所有七个工作。
机器人身份或请求策略可以停止第一个连接。
拒绝明显危险的延期。
清理或重命名后再次检查。
超越可执行 PHP 的扩展名。
运行时策略可以拒绝未经授权的 PHP 写入。
服务器策略可以使上传目录保持不可执行。
网络策略可以限制已知的命令和控制行为。
第一到第五阶段可以阻止文件被创建或接受。第六阶段允许普通上传存在,但阻止 Web 服务器以 PHP 形式运行它们。第七阶段发生较晚,可以限制一种妥协后的通信;它不会撤消先前的上传。
2023 年 9 月测试结果
将每个单元格读取为“在此测试中”,并将缺失版本限制应用于整个表。
| 安全插件 | 1. 客户限制 | 2. 扩展检查 | 3. 最终名称验证 | 4.内容检查 | 5.运行时写控制 | 6.上传执行策略 | 7. 出站工具流量 |
|---|---|---|---|---|---|---|---|
| 字栅栏 | 本次测试中未被阻止 | 在此测试中被绕过 | 本次测试中未被阻止 | 在此测试中被绕过 | 本次测试中未被阻止 | 手动缓解可用但未启用/测试 | 本次测试中未被阻止 |
| 忍者防火墙 | 本次测试中未被阻止 | 在此测试中被绕过 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 手动缓解可用但未启用/测试 | 本次测试中未被阻止 |
| 盾牌安全 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 |
| 站点地面安全 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 | 本次测试中未被阻止 |
| BitFire | 在此测试中被阻止 | 在此测试中被阻止 | 手动缓解可用但未启用/测试 | 在此测试中被阻止 | 在此测试中被阻止 | 手动缓解可用但未启用/测试 | 在此测试中被阻止 |
旧符号如何更新: 四个原始符号类别现在写为“已阻止”、“已绕过”、“未阻止”和“可手动缓解”。为了完整性起见,图例中包含“未记录”,但单元格不需要“未记录”,因为旧表格的每个位置都有一个符号。
每个产品的观察
这些注释解释了历史表。他们没有对当前功能或当前默认配置做出任何声明。
字栅栏
官方插件页面原始测试报告客户端限制并未停止请求。它的扩展名和文件内容检查识别了部分示例,但被测试变体绕过。没有最终名称或运行时写入控制停止请求。该文章报告称,可以通过优化/手动服务器规则来阻止上传下的直接 PHP 访问,但缓解措施并不属于测试结果的一部分。出站工具流量未被阻止。
忍者防火墙
官方插件页面测试请求未因客户端限制、最终名称验证、内容检查、运行时写入控制或出站过滤而停止。测试中绕过了扩展检查。旧文章描述了用于拒绝上传下的 PHP 访问的手动选项,但没有将其作为启用的控件进行测试。
盾牌安全
官方插件页面所观察到的七个阶段都没有阻止记录配置中的此特定请求。这一狭隘的结果并不能确定 Shield Security 现在支持什么、其他配置会做什么,或者不相关的控制是否有效。
站点地面安全
官方插件页面在记录的配置中,七个阶段都没有阻止此特定请求。该测试仅限于该上传链,不应推广到产品的其他安全或帐户功能。
BitFire
官方插件页面记录的配置在客户端限制、扩展检查、文件内容检查、运行时写入控制和出站过滤方面阻止请求。最初的散文指出,机器人政策可能会以宽松的模式有所不同。它将评估清理后的最终名称归功于扩展检查,而专用清理挂钩阶段和服务器上传目录规则被标记为手动缓解措施而不是测试块。
围绕上传构建独立的控件
桌子会老化。安全设计原则不依赖于特定产品。
消除已知的错误,而不是要求每个防御层永远弥补它。
在存储之前检查原始名称和最终清理或生成的文件名。
文件名是一个信号。上传的字节和预期的媒体行为提供了额外的证据。
在应用程序和托管要求允许的情况下,配置上传目录,以便 PHP 无法在那里执行。
第二个边界可以拒绝不属于经过身份验证的预期操作的可执行写入。
查找意外的可执行文件、上传后的更改、直接访问以及异常的外部连接。
限制、商业利益和来源
公平的比较使不确定性变得可见,并为读者提供主要证据。
主要和官方参考资料
- CVE-2023-4596 的 NVD 记录
受影响的版本截至 1.24.6、漏洞描述和 CVSS 3.1 评估。
- Forminator 的 WordPress 变更集 2954409
在成功完成最终文件类型检查后移动文件创建。
- 历史公共漏洞利用数据库参考
原始测试引用的样本。本文不会重现其有效负载。
- 官方 Forminator 插件页面和变更日志
当前发布信息。历史变更日志没有明确命名此修复。
- Wordfence官方页面, NinjaFirewall 官方页面, 神盾安全官方页面, SiteGround 安全官方页面, 和 BitFire 官方页面
对于当前的功能,请使用当前的供应商文档而不是此 2023 年表。