Log4J2漏洞修复方法验证及最终方案

验证代码准备:

在项目登录接口中增加类似如下代码:

@PostMapping("login")

public R<?> login(@RequestBody LoginBody form) {

//form.getUsername()="${java:version}"

logger.info("登录:{}",form.getUsername());

// 用户登录

LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());

// 获取登录token

return R.ok(tokenService.createToken(userInfo));

}

public class App {

private static Logger logger = LogManager.getLogger(App.class);

public static void main(String[] args) {

logger.info("user {}", "${java:version}");

System.out.println("Hello World!");

}

}

存在漏洞时输出结果:org.example.App - user Java version 1.8.0_181

无漏洞时的输出结果:org.example.App - user ${java:version}

1、紧急缓解措施

方式一:修改jvm参数 -Dlog4j2.formatMsgNoLookups=true

输出结果:org.example.App - user ${java:version}

结论:有效

方式二: 修改配置log4j2.formatMsgNoLookups=True

注意:在应用程序入口logger初始化之前,写入代码System.setProperty("log4j2.formatMsgNoLookups", "true");

输出结果:org.example.App - user ${java:version}

结论:有效

方式三:将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

输出结果:org.example.App - user Java version 1.8.0_181

结论:Win10 无效【本人在Win10上测试的,而且没有尝试重新启动电脑】

2、下载最新的log4J,如2.15.0版本,直接将本地仓库中2.0至2.14.1版本里的jar,用2.15.0更名后替换

以Idea Maven项目Log4J依赖包为例:

第一步:在Project视图中展开External Libraries找到Log4J相关jar依赖,并进行如下操作:对应jar上右键->copy->Absolute Path 复制到文件管理器中打开

第二步:将2.15.0中对应jar复制一份更名成2.14.1中jar的名称并覆盖2.14.1中的jar

输出结果:org.example.App - user ${java:version}

结论:有效

3、从项目里强制修改直接依赖或间接依赖的Log4J版本

以Idea Maven项目spring-boot-starter-logging依赖包为例:

第一步:打开pom.xml

ctrl+鼠标左键 单击artifactId内容spring-boot-starter-logging进入如下界面:

原始配置:

第二步:将2.*版本更改成2.15.0

强制修改后:

第三步:Reimport

输出结果:org.example.App - user ${java:version}

结论:有效

4、总结

根据以上测试结果,对于正式环境有以下解决方案:

方案一:根据1中的方式一在bat中加入如下设置:

set _JAVA_OPTIONS=-Dlog4j2.formatMsgNoLookups=true

示例:

方案二:对于jar包与主程序分离的项目,可以直接将正式环境2.15.0的jar更名后直接覆盖2.*版本。

方案三:对于jar包与主程序统一打包的项目,可以采用2、3和1中的方式二在开发环境做对应更改后重新打包部署。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DbzZcz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值