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