# Fastify Express URL编码处理漏洞
## 概述
@fastify/express 插件在版本 4.0.3 之前存在路径绕过漏洞,攻击者可通过 URL 编码字符(如 `/%61dmin`)绕过中间件安全限制。
## 影响版本
@fastify/express < 4.0.3
## 细节
该漏洞源于 @fastify/express 在匹配中间件路径时未正确处理 URL 编码字符。当请求路径包含编码字符(如 `%61` 代表 `a`)时,中间件引擎因路径未匹配而跳过执行,但底层 Fastify 路由器在解码后仍能匹配目标路由,导致中间件(如鉴权逻辑)被绕过。
## 影响
攻击者可利用此漏洞绕过依赖中间件实施的安全控制,访问本应受保护的端点,可能导致未授权访问或敏感操作。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Improper Handling of URL Encoding (Hex Encoding) in @fastify/express · Advisory · fastify/fastify-express · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键信息总结
#### 漏洞概述
- **名称**: Improper Handling of URL Encoding (Hex Encoding) in @fastify/express
- **CVE ID**: CVE-2026-22037
- **CVSS 评分**: 8.4/10
- **严重性**: 高
#### 影响版本
- **受影响版本**: <=4.0.2
- **已修复版本**: 4.0.3
#### 漏洞细节
- **描述**: 在 `@fastify/express` 中,注册具有特定路径前缀的中间件可以通过 URL 编码字符(如将 `/admin` 替换为 `/%61dmin`)来绕过中间件的路径匹配,导致中间件执行被跳过,底层 Fastify 路由器正确解码路径并匹配到路由处理程序,使攻击者能够访问受保护的端点,而不需要通过中间件的约束。
#### 计算机漏洞的原因
- 在 `@fastify/express` 中,路径匹配机制没有正确处理 URL 编码字符,这导致路径编码后的路径无法被正确匹配,使得通过编码来绕过特定路径的访问控制成为可能。
#### 示例代码与证明
- 提供了使用 `@fastify/express` 框架配置的示例应用程序,并演示了攻击者如何通过 URL 编码绕过保护措施的技术性步骤。
- 展示了利用该漏洞的请求与结果,表明保护的 `/admin` 路径可以被绕过访问。
#### 相关标识
- **弱点**: CWE-177, CWE-288
- **报告者**: rootxharsh
- **修复验证**: Eomm
- **修复开发者**: mcollina
标题: fix: decode paths before matching (#174) · fastify/fastify-express@dc02a3f · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
- **漏洞类型**: URL-encoded paths bypass middleware
- **漏洞描述**: URL-encoded paths (如 /%61dmin) 能够绕过中间件检查。虽然中间件注册在 /admin 上,但通过 URL-encode 的路径可以绕过它们。
- **解决方法**: 在 Express 匹配中间件之前使用 `FindMyWay.sanitizeUrlPath()` 来解码 URL,以防止编码路径绕过。
- **相关提交**: #174, #245, #175
- **依赖更新**:
- `fastify-plugin`: 从 ^5.0.0 升级到 ^5.0.0
- 新增 `find-my-way`: ^9.4.0
- **测试更新**:
- 增加了测试用例,确保编码路径能够被正确解码并运行中间件
- 确保没有双次解码 URL
- 确保 Expres 处理程序能够正确处理解码
- **提交作者**: mcollina, Eomm, Manuel Spigolon
暂无评论