cwe - 113:不当中和CRLF序列在HTTP头(HTTP请求/响应分裂)
 描述
产品接收数据从一个HTTP代理/组件(例如,web服务器,代理,浏览器,等等),但它并不中和或错误中和CR和低频字符之前的数据包含在即将离任的HTTP标头。
 扩展描述
HTTP代理或组件可能包括web服务器、负载平衡器、反向代理,网络缓存代理,应用防火墙,网络浏览器,等等。不管这个角色,他们预计将保持连贯,一致的所有组件的HTTP通信状态。然而,包括意想不到的数据在一个HTTP头允许攻击者指定HTTP消息的整体所呈现的HTTP代理客户端(如web浏览器)或后端HTTP代理(例如,web服务器),是否请求或响应消息的一部分。
当HTTP请求包含意外的CR和低频字,服务器可能响应的输出流被解释为“分裂”流到两个不同的HTTP消息而不是一个。CR回车,也由% 0 d或\ r,低频换行,也由% 0 a或\ n。
除了CR和低频字,其他有效/ RFC兼容的特殊字符和独特的字符编码可以利用,如HT(水平选项卡,也由% 09或\ t)和SP(空间,也给+签名或者% 20)。
这些类型的用户和意想不到的数据在HTTP消息头允许攻击者控制第二个“分裂”消息发起攻击,如服务器端请求伪造,跨站点脚本,缓存中毒攻击。
HTTP响应分裂时可能存在的弱点:
- 数据进入一个web应用程序通过一个不可信的来源,最常见的一个HTTP请求。
- HTTP响应头中包含的数据发送到一个web用户没有中和恶意字符可以被作为标题分隔字符。
 替代条款
 的关系
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性 访问控制
|
技术的影响:修改应用程序数据;获得特权或假设的身份
CR和低频字符在一个HTTP头可能给攻击者控制剩余的头和身体的消息应用程序打算发送/接收,以及允许他们创建额外的消息完全控制。 |
|
 示范例子
示例1
下面的代码段读取一个weblog条目的作者的名字,作者,从一个HTTP请求,并设置它的饼干头一个HTTP响应。
字符串作者= request.getParameter (AUTHOR_PARAM); … 曲奇饼干= new饼干(“作者”,作者); cookie.setMaxAge (cookieExpiration); response.addCookie(饼干);
假设一个字符串组成的标准字母数字字符,如“简·史密斯”,提交请求的HTTP响应中包括这个饼干可能采取以下形式:
HTTP / 1.1 200 OK … set - cookie:作者=简·史密斯 …
然而,由于cookie的值是由多组用户输入,反应只会维持这种形式提交的值如果AUTHOR_PARAM不包含任何CR和低频字符。如果攻击者提交一个恶意的字符串,如
威利黑客\ r \ nHTTP / 1.1 200 OK \ r \ n
HTTP响应将分裂成两个反应下列形式:
HTTP / 1.1 200 OK … set - cookie:作者=威利黑客 HTTP / 1.1 200 OK …
第二个反应是完全由攻击者控制的,可以由任何标题和正文内容。构造任意HTTP响应的能力允许产生各种各样的攻击,包括:
-
cross-user乱涂
-
web和浏览器缓存中毒
-
跨站点脚本编制
-
网页劫持
示例2
攻击者可以使单个请求一个脆弱的服务器,将导致服务器创建两个反应,第二个可能被误解为响应不同的请求,可能是一个由另一个用户与服务器共享相同的TCP连接。
Cross-User乱涂可以实现通过说服用户提交恶意请求本身,或远程攻击者的情况下,用户共享一个共同的TCP连接到服务器,如一个共享的代理服务器。
- 在最好的情况下,攻击者可以利用这种能力来说服用户应用程序已经被黑客入侵,导致用户对应用程序的安全失去信心。
- 在最坏的情况下,攻击者可以提供特别制作的内容旨在模拟应用程序的行为但重定向的私人信息,如账号和密码,攻击者。
示例3
恶意构造响应可以放大的影响如果缓存,通过一个web缓存使用的多个用户,甚至单个用户的浏览器缓存。
缓存中毒:如果一个共享web缓存响应缓存,如常见的代理服务器,那么所有用户的缓存将继续接收恶意内容,直到清除缓存条目。同样,如果响应是单个用户的浏览器缓存,那么用户将继续收到恶意内容,直到缓存条目净化,尽管本地浏览器实例的用户将受到影响。
示例4
一旦攻击者控制应用程序发送的响应,他们有选择的各种恶意用户提供内容。
跨站点脚本:跨站点脚本是常见的攻击,恶意JavaScript或其他代码包含在响应是在用户的浏览器中执行。
各种基于XSS攻击几乎是无限的,但他们通常包括传输私有数据,如饼干或其他会话信息攻击者,将受害者web内容由攻击者控制,或进行其他恶意用户的机器上的操作的幌子下脆弱的网站。
最常见的和危险的攻击向量对脆弱的应用程序使用JavaScript的用户传输会话和身份验证信息回的攻击者可以完全控制受害者的考虑。
示例5
除了使用脆弱的应用程序向用户发送恶意内容,相同的弱点也可以利用重定向敏感内容由服务器生成的攻击者,而不是预期的用户。
页面劫持:通过提交一个请求,结果在两个反应,预期的响应从服务器和反应生成的攻击,攻击者可以造成一个中间节点,如一个共享的代理服务器,误导反应生成的服务器攻击者而不是用户。
因为请求由攻击者产生两种反应,第一个是解读为对攻击者的请求,而第二个悬而未决。当用户是一个合法的请求通过相同的TCP连接,攻击者的请求已经等待和解读为应对受害人的请求。攻击者发送一个请求到服务器,生成的代理服务器与服务器响应请求用于受害者,从而危及任何敏感信息的头部或身体反应用于受害者。
 观察到的例子
参考 |
描述 |
|
|
|
Scala-based HTTP接口允许请求和响应痛不欲生通过头名称,标题值,状态的原因,和uri |
|
基于javascript框架允许请求将通过一个HTTP请求的路径选择 |
|
应用程序接受CRLF对象ID,允许HTTP响应分裂。 |
|
购物车允许HTTP响应分解执行HTML注入通过CRLF url参数 |
|
公告板允许响应通过CRLF分裂参数。 |
|
通过在PHPSESSID CRLF响应分裂。 |
|
电子商务应用程序允许HTTP响应分裂使用CRLF对象id参数 |
 潜在的缓解措施
实施阶段:
构建HTTP头仔细,避免non-validated输入数据的使用。 |
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,使用一个可接受的输入列表,严格遵守规范。如果输入不严格遵守规范,拒绝或转换成符合的东西。
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
|
实施阶段:
使用和指定输出编码可以由下游组件读取输出。常见的编码包括iso - 8859 - 1、utf - 7, utf - 8。如果不指定一个编码,下游组件可能会选择不同的编码,通过假设一个默认的编码或使用自动推断哪些编码,这可能是错误的。编码不一致时,下游组件可能治疗一些特殊字符或字节序列,即使他们没有特别在原始的编码。攻击者就能够利用这种差异,开展注入攻击;他们甚至可以绕过保护机制,假设原编码也被下游组件。 |
实施阶段:
输入应该解码和规范化应用程序当前的内部表示之前验证( cwe - 180)。确保应用程序不会解码输入两次相同( cwe - 174)。这些错误可以用来绕过allowlist验证方案通过引入危险的输入后检查。 |
 检测方法
自动静态分析
自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。
|
 脆弱性映射笔记
用法:允许
(CWE ID可以用来映射到现实世界的漏洞) |
原因:可接受的使用 |
理由是: 这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。 |
评论: 仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。 |
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
千鸟 |
|
|
HTTP响应分裂 |
7有害的王国 |
|
|
HTTP响应分裂 |
WASC |
25 |
|
HTTP响应分裂 |
软件故障模式 |
SFP24 |
|
污染输入命令 |
 引用
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之2:服务器相关的漏洞(XSS, XSRF和响应分裂)。”Page 31. McGraw-Hill. 2010. |
|
 内容的历史
提交 |
提交日期 |
提交者 |
组织 |
2006-07-19 (CWE草案3,2006-07-19) |
千鸟 |
|
|
贡献 |
贡献的日期 |
贡献者 |
组织 |
2022-02-25 (CWE 4.9, 2022-10-13) |
乔纳森Leitschuh |
丹Kaminsky奖学金@人类安全 |
提出了一个新的条目HTTP请求分割,导致范围扩张cwe - 113 |
修改 |
修改日期 |
修饰符 |
组织 |
2008-07-01 |
Eric Dalci |
Cigital |
更新引用,Potential_Mitigations Time_of_Introduction |
2008-09-08 |
CWE内容团队 |
主教法冠 |
更新的关系,Observed_Example, Other_Notes、引用Taxonomy_Mappings |
2008-10-14 |
CWE内容团队 |
主教法冠 |
更新描述 |
2008-11-24 |
CWE内容团队 |
主教法冠 |
更新描述,Other_Notes |
2009-03-10 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples |
2009-05-27 |
CWE内容团队 |
主教法冠 |
更新后的名字 |
2009-07-27 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples Potential_Mitigations |
2009-10-29 |
CWE内容团队 |
主教法冠 |
Common_Consequences更新,描述、Other_Notes Theoretical_Notes |
2010-02-16 |
CWE内容团队 |
主教法冠 |
更新Taxonomy_Mappings |
2010-06-21 |
CWE内容团队 |
主教法冠 |
更新描述、名称 |
2011-03-29 |
CWE内容团队 |
主教法冠 |
更新Potential_Mitigations |
2011-06-01 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences、描述 |
2012-05-11 |
CWE内容团队 |
主教法冠 |
更新Common_Consequences、引用关系 |
2012-10-30 |
CWE内容团队 |
主教法冠 |
更新Potential_Mitigations |
2014-06-23 |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples |
2014-07-30 |
CWE内容团队 |
主教法冠 |
更新的关系,Taxonomy_Mappings |
2015-12-07 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2017-05-03 |
CWE内容团队 |
主教法冠 |
更新Related_Attack_Patterns |
2017-11-08 |
CWE内容团队 |
主教法冠 |
更新Applicable_Platforms Demonstrative_Examples |
2019-06-20 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2020-02-24 |
CWE内容团队 |
主教法冠 |
更新Applicable_Platforms Potential_Mitigations、关系类型 |
2020-06-25 |
CWE内容团队 |
主教法冠 |
更新Potential_Mitigations |
2021-10-28 |
CWE内容团队 |
主教法冠 |
更新的关系 |
2022-06-28 (CWE 4.8, 2022-06-28) |
CWE内容团队 |
主教法冠 |
扩展的抽象进入包括HTTP请求和响应分裂。 |
2022-06-28 (CWE 4.8, 2022-06-28) |
CWE内容团队 |
主教法冠 |
更新Alternate_Terms、Common_Consequences Demonstrative_Examples、描述、名称、Observed_Examples, Potential_Mitigations,引用关系,Theoretical_Notes |
2022-10-13 (CWE 4.9, 2022-10-13) |
CWE内容团队 |
主教法冠 |
更新Demonstrative_Examples Related_Attack_Patterns |
2023-01-31 (CWE 4.10, 2023-01-31) |
CWE内容团队 |
主教法冠 |
更新描述 |
2023-04-27 (CWE 4.11, 2023-04-23) |
CWE内容团队 |
主教法冠 |
更新Detection_Factors、引用关系 |
2023-06-29 |
CWE内容团队 |
主教法冠 |
更新Mapping_Notes |
以前的条目名称 |
改变日期 |
以前的条目名称 |
2008-04-11 (CWE草案9) |
HTTP响应分裂 |
|
2009-05-27 1.4 (CWE) |
未能Sanitize CRLF序列在HTTP头(又名“HTTP响应分裂”) |
|
2010-06-21 1.9 (CWE) |
未能Sanitize CRLF序列在HTTP头(HTTP响应分裂) |
|
2022-06-28 4.8 (CWE) |
不当中和CRLF序列在HTTP头(HTTP响应分裂) |
|
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。
|