暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Log4j2 Zero Day 漏洞 Apache Flink 应对指南(二)

Flink 中文社区 2021-12-22
838

▼ 关注「Apache Flink」,获取更多技术干货 

摘要:有关 Apache Log4j 的一个新的漏洞问题被提出,本文主要阐述 CVE-2021-45105 的细节和影响,并给出新的临时解决方案和 Flink 社区的修复计划。主要内容包括:


  1. CVE-2021-45105 漏洞说明
  2. 临时解决方案
  3. Flink 社区修复计划

Tips:点击「阅读原文」查看更多技术干货~

概述


12 月 16 号,有关 Apache Log4j 的一个新的漏洞问题被提出[1],经过验证后 CVE-2021-45105[2] 于 12 月 18 号发布。该漏洞进一步表示 2.16.0 版本及 CVE-2021-45046 的临时修复方案在某些配置条件下依然有被 DOS 攻击的风险。随后,Log4j 团队马上发布了 2.17.0 版本,并给出了新的临时修复方案。

上述漏洞的影响版本范围为 2.0-beta9 到 2.16.0。Apache Flink 在 1.11 及以上版本使用了 Log4j 2.x 版本,且均在受影响范围内。


有关 CVE-2021-44228 和 CVE-2021-45046 这两个漏洞的细节,以及这些漏洞对 Flink 用户的影响,可以参考上一篇文章:

《Log4j2 Zero Day 漏洞 Apache Flink 应对指南》

本文将主要阐述 CVE-2021-45105 的细节和影响,并给出新的临时解决方案和 Flink 社区的修复计划。


CVE-2021-45105 漏洞说明


该漏洞表明,Log4j 2.16.0 版本基于 CVE-2021-45046 的修复和临时解决方案下依然存在被 DOS 攻击的风险。其原因是当日志配置中使用了 Context lookup 这种非默认的 Pattern Layout 时 (如 $${ctx:loginId}
 ),攻击者可以在 Thread Context Map 中加入恶意的数据 ( ${${::-${::-$${::-j}}}}
 从而触发无限循环地 Lookup,进一步因为 StackOverflowError 导致进程终止。


如果日志配置中存在上述的 Pattern Layout,基于 “log4j2.formatMsgNoLookups=true” 和 "remove JndiLookup.class" 的方案并不能阻止恶意数据触发 CVE-2021-45105,因为该漏洞的根源发生在 String Substitution 过程中。


临时解决方案


若目前作业使用的 Flink 版本是 Log4j 2.16.0 对应的各个版本 (即 1.14.2,1.13.5,1.12.7,1.11.6),有两种解决方案:

  • 在日志配置的 PatternLayout 中,将类似 ${ctx:loginId}
     or $${ctx:loginId}
      Context lookup 模式替换成 Thread Context Map 模式 ( %X, %mdc, or %MDC
     )。

  • 在日志配置中完全移除掉类似 ${ctx:loginId}
     or $${ctx:loginId}
      Context lookup 模式 (核心还是在于这种模式下是可以注入恶意数据并被 Log4j 解析的)


若目前作业使用的 Flink 版本是 Log4j 2.15.0 或更早的版本对应的各个版本 (即 1.14.1,1.13.4,1.12.5,1.11.4 及之前的版本),除了上述的操作外,还需要使用:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

将 Flink 中依赖的 log4j-core 里的 JndiLooup.class 删除,以达到 2.16.0 中禁用 JNDI 的效果。

需要注意以下三点:

  1. 该修复过程需要停止作业,在做完修复后重启。


  2. 对于 Apache Log4j 的 Zero Day 问题,虽然之前有其他的临时解决方法[4][5],但目前只有上面的方式能完全避免该漏洞的影响。


  3. 建议在社区发布修复版本后,尽快批量升级作业至对应的版本。


Flink 社区修复计划


目前 Log4j 已发布了 2.15.0,2.16.0 和 2.17.0 版本,具体修复内容如下:


Flink 社区在得知这些漏洞后,马上讨论了修复计划[11][12][13]。Flink 社区目前针对受影响的分支已经发布了升级 Log4j 到 2.16.0 的修复版本 (1.14.2,1.13.5,1.12.7,1.11.6[10]),用户可以直接使用。


关于 Log4j 2.17.0 对应修复版本的计划正在讨论中[3][14]。在社区发布 Log4j 2.17.0 对应的各个修复版本后,用户只需要将作业使用的 Flink 版本进行升级,即可完全避免该问题。


参考


[1] LOG4J2-3230
https://issues.apache.org/jira/browse/LOG4J2-3230
[2] CVE-2021-45105
https://nvd.nist.gov/vuln/detail/CVE-2021-45105
[3] CVE-2021-45105: Apache Log4j2 does not always protect from infinite recursion in lookup evaluation
https://lists.apache.org/thread/6gxlmk0zo9qktz1dksmnq6j0fttfqgno
[4] Advise on Apache Log4j Zero Day (CVE-2021-44228)
https://flink.apache.org/2021/12/10/log4j-cve.html
[5] CVE-2021-44228 Solution
https://stackoverflow.com/questions/70315727/where-to-put-formatmsgnolookups-in-log4j-xml-config-file/70315902#70315902
[6] LOG4J2-3198
https://issues.apache.org/jira/browse/LOG4J2-3198
[7] LOG4J2-3201
https://issues.apache.org/jira/browse/LOG4J2-3201
[8]  LOG4J2-3208
https://issues.apache.org/jira/browse/LOG4J2-3208
[9]   LOG4J2-3211
https://issues.apache.org/jira/browse/LOG4J2-3211
[10] Update Log4j to 2.16.0
https://issues.apache.org/jira/browse/FLINK-25295
[11] [DISCUSS] Immediate dedicated Flink releases for log4j vulnerability
https://lists.apache.org/thread/j15t1lwp84ph7ftjdhpw4429zgl13588
[12] [VOTE] Release 1.11.5/1.12.6/1.13.4/1.14.1, release candidate #1
https://lists.apache.org/thread/64tn3d38ko4hqc9blxdhqrh27x3fjro8
[13] [VOTE] Release 1.11.6/1.12.7/1.13.5/1.14.2, release candidate #1
https://lists.apache.org/thread/3yn7ps0ogdkr1r5zdjp10zftwcpr1hqn
[14] FLINK-25375
https://issues.apache.org/jira/browse/FLINK-25375



Flink Forward Asia 2021 

2022 年 1 月 8-9 日,FFA 2021 重磅开启,全球 40+ 多行业一线厂商80+ 干货议题带来专属于开发者的技术盛宴。


大会官网:
https://flink-forward.org.cn

大会线上观看地址 (记得预约哦):
https://developer.aliyun.com/special/ffa2021/live



更多 Flink 相关技术问题,可扫码加入社区钉钉交流群~

   戳我,查看更多技术干货~

文章转载自Flink 中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论