【Web实战】浅谈Apache Shiro FORM URL Redirect漏洞(CVE-2023-46750)
字数 1090 2025-08-10 08:28:37

Apache Shiro FORM URL Redirect漏洞(CVE-2023-46750)分析与防护指南

漏洞概述

CVE-2023-46750是Apache Shiro框架中的一个安全漏洞,影响使用FORM身份验证的场景。该漏洞源于在FORM认证过程中未对认证后重定向的URL进行充分验证,导致攻击者可以构造恶意URL,诱导用户重定向到任意恶意网站。

受影响版本

  • Apache Shiro 1.11.0及以下版本
  • Apache Shiro 1.12.0至1.13.0之间的部分版本

漏洞原理

在FORM身份验证流程中,Shiro处理认证成功后的重定向时存在以下问题:

  1. 重定向参数未验证:认证成功后,Shiro会根据请求中的redirectUrl参数进行跳转,但未对该参数进行严格的合法性检查
  2. 开放重定向风险:攻击者可构造包含恶意URL的认证请求,用户完成认证后会被重定向至攻击者控制的网站
  3. 信任边界突破:利用Shiro的域名信任,攻击者可绕过部分安全限制

漏洞利用场景

  1. 钓鱼攻击:诱导用户点击恶意链接,认证后跳转至伪造的登录页面窃取凭证
  2. 恶意软件分发:重定向至托管恶意软件的网站
  3. 跨站脚本攻击:结合XSS漏洞进行更复杂的攻击

漏洞复现步骤

  1. 构造恶意URL:
    http://vulnerable-site.com/login?redirectUrl=http://malicious-site.com
    
  2. 诱使用户访问该URL并完成认证
  3. 认证成功后,用户将被重定向至malicious-site.com

修复方案

官方补丁

升级至以下安全版本:

  • Apache Shiro 1.13.0及以上版本
  • Apache Shiro 1.11.1及以上版本(1.11.x系列)

临时缓解措施

如果无法立即升级,可采用以下方法:

  1. 自定义重定向验证

    @Override
    protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {
        String successUrl = getSuccessUrl();
        String redirectUrl = request.getParameter("redirectUrl");
    
        if(redirectUrl != null && isValidRedirect(redirectUrl)) {
            successUrl = redirectUrl;
        }
    
        WebUtils.redirectToSavedRequest(request, response, successUrl);
    }
    
    private boolean isValidRedirect(String url) {
        // 实现严格的白名单验证逻辑
        return url.startsWith("/") || url.startsWith(getApplicationBaseUrl());
    }
    
  2. 配置过滤器

    <filter>
        <filter-name>redirectFilter</filter-name>
        <filter-class>com.example.RedirectValidationFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>redirectFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  3. 禁用外部重定向

    shiro.successUrl.allowedDomains=yourdomain.com
    

安全建议

  1. 输入验证

    • 对所有重定向URL实施严格的白名单验证
    • 禁止包含http://https://的外部URL重定向
    • 验证URL是否以应用程序的基本路径开头
  2. 会话管理

    • 在重定向前使当前会话失效
    • 使用一次性令牌防止CSRF
  3. 日志监控

    • 记录所有重定向操作
    • 监控异常的重定向模式
  4. 安全头设置

    response.setHeader("Content-Security-Policy", "default-src 'self'");
    response.setHeader("X-Frame-Options", "DENY");
    response.setHeader("X-XSS-Protection", "1; mode=block");
    

检测方法

  1. 手动检测

    • 尝试在登录请求中添加redirectUrl参数
    • 验证是否能够重定向至外部域名
  2. 自动化扫描

    • 使用Burp Suite等工具测试开放重定向
    • 编写自定义脚本检测重定向漏洞

总结

CVE-2023-46750是一个典型的开放重定向漏洞,虽然风险评级通常为中危,但结合社会工程学可能造成严重危害。建议所有使用Apache Shiro的开发团队立即检查受影响版本,并按照上述方案进行修复或缓解。

Apache Shiro FORM URL Redirect漏洞(CVE-2023-46750)分析与防护指南 漏洞概述 CVE-2023-46750是Apache Shiro框架中的一个安全漏洞,影响使用FORM身份验证的场景。该漏洞源于在FORM认证过程中未对认证后重定向的URL进行充分验证,导致攻击者可以构造恶意URL,诱导用户重定向到任意恶意网站。 受影响版本 Apache Shiro 1.11.0及以下版本 Apache Shiro 1.12.0至1.13.0之间的部分版本 漏洞原理 在FORM身份验证流程中,Shiro处理认证成功后的重定向时存在以下问题: 重定向参数未验证 :认证成功后,Shiro会根据请求中的 redirectUrl 参数进行跳转,但未对该参数进行严格的合法性检查 开放重定向风险 :攻击者可构造包含恶意URL的认证请求,用户完成认证后会被重定向至攻击者控制的网站 信任边界突破 :利用Shiro的域名信任,攻击者可绕过部分安全限制 漏洞利用场景 钓鱼攻击 :诱导用户点击恶意链接,认证后跳转至伪造的登录页面窃取凭证 恶意软件分发 :重定向至托管恶意软件的网站 跨站脚本攻击 :结合XSS漏洞进行更复杂的攻击 漏洞复现步骤 构造恶意URL: 诱使用户访问该URL并完成认证 认证成功后,用户将被重定向至 malicious-site.com 修复方案 官方补丁 升级至以下安全版本: Apache Shiro 1.13.0及以上版本 Apache Shiro 1.11.1及以上版本(1.11.x系列) 临时缓解措施 如果无法立即升级,可采用以下方法: 自定义重定向验证 : 配置过滤器 : 禁用外部重定向 : 安全建议 输入验证 : 对所有重定向URL实施严格的白名单验证 禁止包含 http:// 或 https:// 的外部URL重定向 验证URL是否以应用程序的基本路径开头 会话管理 : 在重定向前使当前会话失效 使用一次性令牌防止CSRF 日志监控 : 记录所有重定向操作 监控异常的重定向模式 安全头设置 : 检测方法 手动检测 : 尝试在登录请求中添加 redirectUrl 参数 验证是否能够重定向至外部域名 自动化扫描 : 使用Burp Suite等工具测试开放重定向 编写自定义脚本检测重定向漏洞 总结 CVE-2023-46750是一个典型的开放重定向漏洞,虽然风险评级通常为中危,但结合社会工程学可能造成严重危害。建议所有使用Apache Shiro的开发团队立即检查受影响版本,并按照上述方案进行修复或缓解。