Log4shell正在制造新闻。广泛使用的日志工具 Log4J 中的一个漏洞使许多服务器甚至一些桌面应用程序面临远程代码执行的风险。
这个漏洞是如何工作的?什么样的错误使它成为可能?它是关于格式字符串和${jndi:...}
的,但为什么这样的字符串会导致远程代码执行?
我正在寻找适合没有任何 Log4J 或高级安全问题经验的 IT 专业人员的级别的解释。有点像您如何向新手 Web 开发人员解释 SQLi 或 XSS。
Log4shell正在制造新闻。广泛使用的日志工具 Log4J 中的一个漏洞使许多服务器甚至一些桌面应用程序面临远程代码执行的风险。
这个漏洞是如何工作的?什么样的错误使它成为可能?它是关于格式字符串和${jndi:...}
的,但为什么这样的字符串会导致远程代码执行?
我正在寻找适合没有任何 Log4J 或高级安全问题经验的 IT 专业人员的级别的解释。有点像您如何向新手 Web 开发人员解释 SQLi 或 XSS。
简而言之-据我了解,该漏洞是由以下原因引起的:
详细 - 有几个设计问题会导致问题:
${date:YYYYMMDD}
. 不幸的是,这个功能在 log4j 2.15.0 之前默认启用,即使日志记录通常包括不受信任的用户输入,例如logger.debug(userInput)
. 出乎意料的是,不受信任输入的字符串扩展甚至可以与参数化语句一起使用,例如logger.debug("user said: {}", userInput)
.${jndi:ldap://host:port/whatever}
. 这是一种强大的机制,具有多年以来已知的巨大潜在攻击面 - 请参阅Blackhat 2016的演讲。请注意,这里没有一个意外漏掉的实际错误。一切都按设计工作。在涉及记录不受信任的数据的实际用例中,只有设计不能提供必要的稳健性。