常见漏洞验证121 条

Apache Struts 版本自查

Struts2 历史高危问题多与表达式求值相关:清点应用依赖版本、对照公告升级,并核查开发模式与调试功能在生产的开启情况。

Struts 自查为什么重要

Apache Struts 2 的多个历史高危问题与表达式求值有关:请求参数在特定条件下会被当作表达式解析,从而执行非预期逻辑。这类系统多为历史资产,往往同时存在框架陈旧、依赖庞杂与开发模式未关闭的情况。自查要回答三件事:用的哪个版本、依赖里还有哪些旧构件、生产环境有没有打开开发与调试开关。

基本信息

核查对象Struts 版本、相关插件、传递依赖、运行期配置
判定依据Apache 官方安全公告中的受影响版本区间
配置项开发模式与调试类开关在生产必须关闭
依赖检查依赖树中可能残留旧版本构件,需逐条比对
处置按公告升级、打补丁或下线迁移

典型使用场景

  • 存量系统盘点:清点哪些应用仍在使用 Struts 及其版本分布
  • 上线前核对:确认新版本的依赖中不存在旧构件残留
  • 公告响应:厂商发布安全公告后快速定位受影响系统
  • 自查复核:验证开发确认的升级是否真的生效
  • 下线与迁移评估:为停止维护的老系统给出迁移优先级建议

自查步骤

自查步骤
# Maven 项目查看依赖树中的 struts 相关构件与版本
mvn dependency:tree | grep -i struts
# 在产物目录里核对类路径中实际存在的 jar 文件
ls WEB-INF/lib | grep -i struts
# 核查生产配置中的开发模式与调试开关是否关闭
# 记录:应用名、版本、插件、处置计划与责任人

核查项与判定

核查项正常情况异常信号
主框架版本在官方修复版本之后落在公告的受影响区间内
插件与传递依赖无旧版本残留类路径中存在多个版本 jar
开发模式开关生产已关闭开启时暴露调试信息与额外入口
日志与错误页不回显表达式与堆栈报错页面直接输出框架细节
Struts 类系统多属历史资产:升级成本高时,要结合下线与迁移计划评估,而不是只安排打补丁。
只查主版本号会漏判:插件与传递依赖带来的旧构件同样可能被加载,判定必须落到类路径中的实际文件。

易错点

  • 只查主版本号,忽略插件与传递依赖
  • 升级不充分,旧版本 jar 仍留在类路径中
  • 生产环境保留开发模式与调试页面
  • 以未复现为由判定无风险,忽略版本可达性

数据来源与参考

  • Apache Struts 安全公告页
  • CWE-917(表达式注入)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌