构建产物里 log4j-core 是 2.14.1,安全扫描报了 CVE-2021-44228 严重级别。这个包不是直接依赖,是某个日志适配器带进来的,pom 里搜不到。乍看像缓存或者权限的锅,追下去往往不是。

mvn dependency:tree -Dincludes=org.apache.logging.log4j
mvn versions:display-dependency-updates

追下去是这么回事:传递依赖的版本由上层组件决定,直接依赖写死在自己 pom 里也压不住。锁文件没提交,不同机器解析出的版本可能不一样。扫描只看直接依赖的话根本发现不了。

「依赖漏洞扫描」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

具体做法是,先跑依赖树 找到引入这个包的上级组件;用 dependencyManagement 或 resolutions 把版本钉到修复版;把锁文件提交进仓库 保证构建可复现;在 CI 里加一道卡点 有严重级别漏洞就不许合。

验收就看一点,重新构建后依赖树里 log4j-core 是 2.17 以上 扫描报告里这条 CVE 消失。

作者 9823189