Log4shell正在报道这个新闻。广泛使用的日志工具Log4J中的一个漏洞使许多服务器甚至一些桌面应用程序面临远程代码执行的风险。
这个漏洞是如何工作的?是什么错误使它成为可能?这与格式化字符串和${jndi:...}有关,但是为什么这样的字符串会导致远程代码执行?
我正在寻找一个没有任何Log4J或高级安全问题经验的IT专业人士的水平的解释。有点像你将如何解释SQLi或XSS给一个新的web开发人员。
发布于 2021-12-14 17:14:35
简而言之,据我理解,漏洞是由以下原因造成的:
详细地说,有几个设计问题导致了这个问题:
${date:YYYYMMDD}。不幸的是,在默认情况下,这个特性一直持续到log4j 2.15.0 enabled,尽管日志记录通常包括不受信任的用户输入,例如logger.debug(userInput)。出人意料的是,不受信任的输入<#>even的字符串扩展与参数化语句(如logger.debug("user said: {}", userInput) )一起工作。${jndi:ldap://host:port/whatever} )进行动态名称查找。这是一种具有多年来已知的大潜在攻击面的powerful机制--参见2016年这是年黑帽的演讲。请注意,这里没有任何地方是一个实际的错误,它意外地通过。一切都是按设计运作的。只有设计没有在涉及记录不受信任数据的真实世界用例中提供必要的鲁棒性。
https://security.stackexchange.com/questions/257968
复制相似问题