# OWASP CRS 多Content-Type绕过漏洞
## 概述
OWASP核心规则集(CRS)在处理具有多个部分的multipart请求时,规则922110存在逻辑缺陷,导致部分恶意内容可能被漏检。
## 影响版本
- 3.3.8 之前版本
- 4.22.0 之前版本
## 细节
规则922110在处理multipart请求时,会遍历`MULTIPART_PART_HEADERS`等集合。在遍历过程中,捕获变量(如`TX:0`、`TX:1`)在每次迭代中被覆盖,仅最后一次捕获的值可供后续链式规则使用。因此,若前面部分包含恶意charset,而后续部分包含合法charset,则恶意内容可能因变量被覆盖而未被检测。
## 影响
攻击者可利用此漏洞构造恶意multipart请求,隐藏非法字符编码于前置部分,绕过WAF检测,可能导致Web应用遭受注入等攻击。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|---|---|---|
| 1 | CVE-2026-21876 OWASP ModSecurity CRS WAF bypass (docker container + minimal PoC). | https://github.com/daytriftnewgen/CVE-2026-21876 | POC详情 |
标题: Release v3.3.8 · coreruleset/coreruleset · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中,我们可以获取到以下关于漏洞的关键信息:
- **漏洞编号**: 9AJ-260102
- **修复版本**: v3.3.8
- **修复提交**: 位于 `coreuleset` 仓库的 `v3.3.8` 版本中,具体提交可查看 `80d8047`.
- **修复人员**: `@airween`
- **漏洞报告者**: `@daytriftnewgen`
- **修复内容**:
- 紧急修复了漏洞编号为 `9AJ-260102` 的问题.
- 解决了规则阶段从 `950100` 转换为 `3` 的问题.
```markdown
### 关键漏洞信息
- **漏洞编号**: 9AJ-260102
- **修复版本**: v3.3.8
- **修复提交**: [提交链接](80d8047)
- **修复人员**: @airween
- **漏洞报告者**: @daytriftnewgen
- **修复内容**:
- 紧急修复了编号为 `9AJ-260102` 的问题.
- 解决了规则阶段从 `950100` 转换为 `3` 的问题.
```
标题: Release v4.22.0 · coreruleset/coreruleset · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 关键漏洞信息
### CRITICAL
- 修复了 CVE-2025-55188 漏洞。特别感谢 @daytriftnewgen 负责任地报告了该漏洞。
### Other Changes
- 添加了 CVE-2025-55188 的序列,POCs 由 @touchweb-vincent 提供(在 #4372 中)
- 解决了与数组在 ARGS_NAMES 中导致的误报(由 @touchweb-vincent 在 #4346 中修复)
- 解决了与数组在 ARGS_NAMES 中导致的误报(由 @touchweb-vincent 在 #4305 中修复)
- 修复了 Rust 中的正则表达式兼容性问题(由 @fgsch 在 #4385 中修复)
- 遗弃了旧的拼写变体(由 @fgsch 在 #4386 中进行重构)
### 版本
- v4.22.0
### 发布日期
- 2周前
### 贡献者
- fgsch
- touchweb-vincent
- daytriftnewgen
标题: Multipart bypass using multiple content-type parts · Advisory · coreruleset/coreruleset · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
## 关键漏洞信息
### 漏洞描述
- **漏洞名称**: Multipart bypass using multiple content-type parts
- **CVE ID**: CVE-2026-21876
- **严重性**: Critical (CVSS v3 base score: 9.3)
- **受影响版本**:
- OWASP CRS (CRS) <= 4.22.0
- OWASP CRS (CRS) <= 3.3.8
### 影响
- **描述**: 当处理具有多个部分的multipart请求时,规则922110存在一个漏洞。在迭代MULTIPART_PART_HEADERS等集合时,每个迭代都会覆盖捕获变量(TX:0, TX:1),导致后续规则只能访问最后一次捕获的值,从而可能导致恶意字符集在早期部分被忽略。
### 示例漏洞场景
- **Part 1 (username)**: charset=utf-7 (malicious) → captured to TX:1
- **Part 2 (dummy)**: charset=utf-8 (legitimate) → overwrites TX:1
- **Chained rule checks**: TX:1 = "utf-8" → passes ✗ (should have blocked)
### 修复
- **修复版本**:
- CRS 4.x >= 4.22.0
- CRS 3.x >= 3.3.8
### 参考
- **参考文献**: To be added
标题: Merge commit from fork · coreruleset/coreruleset@80d8047 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
标题: Merge commit from fork · coreruleset/coreruleset@9917985 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
# 关键漏洞信息
- **漏洞类型**: multipart bypass 使用多个内容类型部分的安全规则更新
- **受影响版本**: v4.22.0
- **修复提交**: [9917985](#commit 9917985)
- **规则更改**:
- 添加规则 `922140` 和 `922150`,用于处理 multipart 请求头,收集 Content-Type 和 charset 值,并检查这些值。
- 规则 `922110` 检查收集的头的 content type 和 charset,检测非法的 multipart header。
- `MULTIPART_HEADERS_CONTENT_TYPES` 变量用于存储 content types。
- **更新原因**:
- 修复 multipart 绕过漏洞,通过更多内容类型部分的检查来增强安全性。
- **相关文件**:
- 规则文件: `REQUEST-922-MULTIPART-ATTACK.conf`
- 测试用例: `test/regession/test.../922110.yaml`
- 辅助工具: 使用 regex-assembly 更新正则表达式
- **关键变更点**:
- 单独识别每个 multipart 部分的 header,获取准确的 content type 和 charset。
- 对 multipart 请求头增加更严格的检查机制。
- **安全建议**:
- 检查现有 multipart 请求中的 header,防止非法自定义 header。
- 根据这些规则更新安全策略。
- 跟踪 RFC 和协议更新,避免使用已废弃的 Content-Transfer-Encoding。
暂无评论