Dart HTTP 包 CRLF 注入漏洞深度解析 (CVE-2020-35669)

本文详细分析了Dart语言中http包在0.13.3之前版本存在的CRLF/HTTP头注入漏洞。攻击者可控制HTTP方法时,通过构造恶意请求实现注入,影响请求的完整性。

漏洞概述

CVE-ID: CVE-2020-35669 GHSA-ID: GHSA-4rgh-jx4f-qfcq 漏洞等级: 中等 (CVSS 6.1) 影响包: Dart http受影响版本: < 0.13.3 修复版本: 0.13.3

漏洞详情

在 Dart http 包的 0.13.3 之前版本中发现了一个安全问题。如果攻击者能够控制 HTTP 方法,并且应用程序直接使用 Request 对象,则可能通过 HTTP 头注入实现 CRLF 注入攻击。

技术原理

该漏洞属于 CWE-74 弱点类别:下游组件输出中特殊元素的不当中和(注入)。当产品使用来自上游组件的外部输入构造命令、数据结构或记录的一部分,但在发送到下游组件时未能正确中和可能修改其解析或解释方式的特殊元素时,就会发生此类漏洞。

具体来说,攻击者可以通过精心构造的 HTTP 方法字段,在 HTTP 请求中注入回车换行符(CRLF),从而添加恶意 HTTP 头或修改请求结构。

修复方案

该问题已在提交 abb2bb182 中通过验证请求方法得到解决。修复的核心是对传入的 HTTP 方法进行严格的验证和清理,确保不包含可能被解释为控制字符的特殊序列。

影响评估

CVSS v3.1 评分: 6.1 (中等)

基础指标:

  • 攻击向量:网络 (AV:N)
  • 攻击复杂度:低 (AC:L)
  • 所需权限:无 (PR:N)
  • 用户交互:需要 (UI:R)
  • 影响范围:改变 (S:C)
  • 机密性影响:低 (C:L)
  • 完整性影响:低 (I:L)
  • 可用性影响:无 (A:N)

EPSS 评分: 25.314% (第96百分位数) 此分数估计了未来30天内此漏洞被利用的可能性。数据由 FIRST 提供。

相关资源

官方公告:

技术参考:

时间线

  • 2020年12月24日: 国家漏洞数据库发布
  • 2022年5月24日: GitHub 咨询数据库发布
  • 2022年8月4日: GitHub 审核
  • 2023年1月27日: 最后更新

开发建议

所有使用 Dart http 包的开发者应立即升级到 0.13.3 或更高版本。对于无法立即升级的情况,建议在应用程序层面增加对 HTTP 方法输入的验证和清理逻辑,特别是当 HTTP 方法来自用户可控输入时。

关键修复代码参考(基于提交 abb2bb182): 修复的核心在于对请求方法进行验证,确保其不包含可能被解释为 HTTP 协议控制字符的序列,特别是回车(\r)和换行(\n)字符。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计