CVE-2020-35669:Dart http 包头部注入漏洞分析
漏洞概述
CVE-2020-35669 是一个在 Dart 编程语言的 http 包中被发现的中等严重性安全漏洞。该漏洞影响 0.13.3 之前的所有版本。
漏洞详情
当攻击者能够控制 HTTP 请求方法,并且应用程序直接使用 Request 对象时,就可能通过 HTTP 头部注入实现 CRLF 注入攻击。CRLF(回车换行)是 HTTP 协议中用于分隔头部字段和界定头部与正文的特殊字符。成功利用此漏洞可能导致请求走私、缓存投毒或跨站脚本(XSS)等安全风险。
影响范围
- 受影响的包:
http(Pub) - 受影响版本:所有
< 0.13.3的版本 - 已修复版本:
0.13.3及更高版本
技术背景
该漏洞的根本原因在于 http 包在构造 HTTP 请求时,未能对用户提供的输入(特别是 HTTP 方法字段)进行充分的验证和净化。攻击者可以在方法名中嵌入 \r\n(CRLF)字符,随后注入任意 HTTP 头部或修改请求结构。
修复方案
该漏洞已在提交 abb2bb1 中得到修复,修复的核心措施是对请求方法进行严格的验证,确保其中不包含可能用于注入的非法字符(如 CRLF)。
相关链接
-
国家漏洞数据库(NVD):https://nvd.nist.gov/vuln/detail/CVE-2020-35669
-
官方变更日志:https://pub.dev/packages/http/changelog#0133
-
源代码仓库:dart-lang/http
严重性评估
- CVSS v3.1 评分:6.1(中危)
- 攻击向量:网络(AV:N)
- 攻击复杂度:低(AC:L)
- 所需权限:无(PR:N)
- 用户交互:需要(UI:R)
- 影响范围:发生变化(S:C)
- 影响:对机密性和完整性造成低影响,对可用性无影响(C:L/I:L/A:N)
关联弱点
- CWE-74:输出到下游组件时对特殊元素中和不当(‘注入’)
建议措施
所有使用 Dart http 包的开发者应立即将包版本升级至 0.13.3 或更高版本,以消除此安全风险。在升级前,应对代码进行审查,检查是否有直接使用 Request 构造函数并传入外部可控 HTTP 方法的情况。