Undertow URL解析特性及其安全问题
字数 1378 2025-08-25 22:59:03
Undertow URL解析特性及其安全风险分析
一、概述
本文详细分析Undertow Web容器在处理包含特殊字符(如分号)的URL时的解析特性,以及与Tomcat的差异,揭示由此可能引发的安全风险。
二、问题背景
发现一个未授权访问漏洞案例:
- 攻击者使用URL:
http://www.xxx.com/admin/..;/index.action - 正常URL应为:
http://www.xxx.com/admin/index.action
环境:Undertow + Spring Boot
三、技术原理分析
1. Tomcat URL解析机制
Tomcat处理/..;/这类URL时:
- 将
/..;/识别为根目录 - 解析过程:
CoyoteAdapter.service()接收原始请求postParseRequest()处理请求/响应parsePathParameters()处理分号路径参数(如/path;name=value)normalize()标准化URI,处理/../等特殊字符
示例:
- 输入:
/admin/..;/index.action - 处理后:
/index.action
2. Undertow URL解析机制
Undertow处理方式与Tomcat不同:
- 在
HttpRequestParser.handlePath()中:- 以分号为分隔符拆分URL
- 前半部分存入exchange对象
- 后半部分作为参数处理
- Filter链构造:
- 基于分号前的路径匹配Filter
- Controller基于分号后的路径路由
关键差异:
- Filter匹配分号前的路径(如
/admin/..) - Controller匹配分号后的路径(如
/index.action)
四、安全风险分析
1. 风险场景
URL示例:http://127.0.0.1/admin/..;/admin/index.action
可能存在的安全问题:
- Filter鉴权逻辑检测
/admin/*.action并跳转登录页 - Controller路由检测
/admin/index.action跳转后台主页 - Undertow环境下:
- Filter无法匹配
/admin/.. - Controller匹配
/admin/index.action - 导致未授权访问
- Filter无法匹配
2. 根本原因
URL解析不一致:
- Filter和Controller对同一URL的解析结果不同
- 鉴权逻辑与实际路由逻辑分离
五、解决方案
-
获取完整请求路径鉴权:
- 在Undertow环境下,应获取完整URL进行鉴权
- 避免仅依赖部分路径判断
-
统一解析逻辑:
- 确保安全控制层与实际路由层使用相同的URL解析方式
-
输入验证:
- 对URL中的特殊字符(如分号)进行严格验证
- 拒绝包含可疑字符的请求
六、总结
- 这不是一个漏洞,而是Web容器的解析特性差异
- Undertow和Tomcat对分号的处理方式不同:
- Tomcat:删除分号并标准化路径
- Undertow:分号前后分别处理
- 使用不当会导致安全控制被绕过
- 建议在Undertow环境下采用更严格的URL处理方式