▼ 关注「Apache Flink」,获取更多技术干货 ▼
摘要:有关 Apache Log4j 的一个新的漏洞问题被提出,本文主要阐述 CVE-2021-45105 的细节和影响,并给出新的临时解决方案和 Flink 社区的修复计划。主要内容包括:
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 用户的影响,可以参考上一篇文章:本文将主要阐述 CVE-2021-45105 的细节和影响,并给出新的临时解决方案和 Flink 社区的修复计划。
该漏洞表明,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 的效果。
- 对于 Apache Log4j 的 Zero Day 问题,虽然之前有其他的临时解决方法[4][5],但目前只有上面的方式能完全避免该漏洞的影响。
- 建议在社区发布修复版本后,尽快批量升级作业至对应的版本。
目前 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 版本进行升级,即可完全避免该问题。
参考
https://issues.apache.org/jira/browse/LOG4J2-3230https://nvd.nist.gov/vuln/detail/CVE-2021-45105[3] CVE-2021-45105: Apache Log4j2 does not always protect from infinite recursion in lookup evaluationhttps://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 Solutionhttps://stackoverflow.com/questions/70315727/where-to-put-formatmsgnolookups-in-log4j-xml-config-file/70315902#70315902https://issues.apache.org/jira/browse/LOG4J2-3198https://issues.apache.org/jira/browse/LOG4J2-3201https://issues.apache.org/jira/browse/LOG4J2-3208https://issues.apache.org/jira/browse/LOG4J2-3211[10] Update Log4j to 2.16.0https://issues.apache.org/jira/browse/FLINK-25295[11] [DISCUSS] Immediate dedicated Flink releases for log4j vulnerabilityhttps://lists.apache.org/thread/j15t1lwp84ph7ftjdhpw4429zgl13588[12] [VOTE] Release 1.11.5/1.12.6/1.13.4/1.14.1, release candidate #1https://lists.apache.org/thread/64tn3d38ko4hqc9blxdhqrh27x3fjro8[13] [VOTE] Release 1.11.6/1.12.7/1.13.5/1.14.2, release candidate #1https://lists.apache.org/thread/3yn7ps0ogdkr1r5zdjp10zftwcpr1hqnhttps://issues.apache.org/jira/browse/FLINK-25375
2022 年 1 月 8-9 日,FFA 2021 重磅开启,全球 40+ 多行业一线厂商,80+ 干货议题,带来专属于开发者的技术盛宴。
https://flink-forward.org.cnhttps://developer.aliyun.com/special/ffa2021/live
更多 Flink 相关技术问题,可扫码加入社区钉钉交流群~
戳我,查看更多技术干货~