freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【缺陷周话】第14期:HTTP 响应截断
2018-12-17 17:29:44

代码审计是使用静态分析发现源代码中安全缺陷的方法,能够辅助开发或测试人员在软件上线前较为全面地了解其安全问题,防患于未然,因此一直以来都是学术界和产业界研究的热点,并且已经成为安全开发生命周期 SDL 和 DevSecOps 等保障体系的重要技术手段。

360代码卫士团队基于自主研发的国内首款源代码安全检测商用工具,以及十余年漏洞技术研究的积累,推出“缺陷周话”系列栏目。每周针对 CWE、OWASP 等标准中的一类缺陷,结合实例和工具使用进行详细介绍,旨在为广大开发和安全人员提供代码审计的基础性标准化教程。

1、HTTP 响应截断

HTTP响应截断是由于应用程序未对用户提交的数据进行严格过滤,当用户恶意提交包含 CR(回车,即URL编码%0d或\r)和 LF(换行符,即URL编码%0a或\n)的HTTP请求,服务器可能会创建两个 HTTP 响应,攻击者可以控制第二个响应并加载攻击。攻击者可控制响应的内容构造 XSS 攻击,其中响应中包含恶意的 JavaScript 或其它代码在用户的浏览器中执行,也有可能让用户重定向到攻击者控制的Web内容或在用户的主机上执行恶意操作。本篇文章以JAVA语言源代码为例,分析HTTP响应截断漏洞产生的原因以及修复方法。 详细请参见 CWE ID 113: Improper Neutralization of CRLF Sequences inHTTP Headers ('HTTP Response Splitting') (http://cwe.mitre.org/data/definitions/113.html)。

2、 HTTP 响应截断的危害

HTTP响应截断一旦被攻击者利用,并不直接造成安全问题,而是由攻击者控制的HTTP响应内容造成间接攻击。例如,攻击者可控制HTTP响应体内容,在web页面中插入恶意的 javaScript 或 html 代码,而浏览器正常解析,导致正在请求页面的结构被破坏、用户信息泄露、拒绝服务等。同样,攻击者还可利用 HTTP 响应再次发起对其他目标服务器的请求,造成页面内容被篡改。甚至在同一代理服务器下,单个用户被攻击后,多个用户共享web缓存,共享用户将继续收到恶意内容,直到缓存条目被清除。


从2018年1月至12月,CVE中共有11条漏洞信息与其相关。部分漏洞如下:

CVE 概述
CVE-2018-1474IBM BigFix Platform 9.2.0 到 9.2.14 和 9.5 到 9.5.9 容易受到 HTTP 响应截断攻击,这是由用户提供的输入验证不当引起的。远程攻击者可以利用此漏洞注入任意 HTTP 请求头,并在单击URL后使服务器返回拆分响应。这将允许攻击者执行进一步的攻击,例如 Web 缓存中毒或跨站点脚本,并可能获取敏感信息。
CVE-2018-11347YunoHost 2.7.2 到 2.7.14 Web 应用程序受一个 HTTP 响应头注入的影响。此漏洞允许攻击者将来自服务器的响应注入一个或多个 HTTP 请求头。它需要与用户进行交互才能向他发送恶意链接。它可用于执行其他攻击,例如用户重定向到恶意网站,HTTP响应截断或 HTTP 缓存中毒。
CVE-2018-7830HTTP 请求头中 HTTP 响应截断漏洞存在于 Modicon M340、Premium、Quantum PLC 和 BMXNOR0200 的嵌入式 Web 服务器中,通过发送特定 HTTP 请求头,会导致拒绝服务。
CVE-2018-1319在 1.8.1 之前的 Apache Allura 中,攻击者可能会制作导致 HTTP 响应截断 URL。如果受害者访问恶意制作的 URL,可能会发生不需要的结果,包括受害者浏览会话的 XSS 或拒绝服务。

3、示例代码

示例源于 Samate Juliet Test Suite for Java v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE113_HTTP_Response_Splitting__Environment_addHeaderServlet_01.java。

3.1缺陷代码


14-3-1代码.png

上述示例代码操作是获取环境变量的 ADD,在38行将该值设置到相应头的 Location 字段中,这样浏览器读到 Location 字段时就会进行资源跳转。当环境变量值为: add \ r \ n \nHTTP/1.1200OK \ r \ n 时,在程序中未对环境变量值做校验,那么HTTP响应将会被拆分成两个响应,第二个响应完全由攻击者控制,并构造出攻击者期望的头部内容和主体内容,由此可产生包括跨站脚本,页面劫持,浏览器缓存中毒等间接攻击。

使用360代码卫士对上述示例代码进行检测,可以检出“HTTP响应截断”缺陷,显示等级为中。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第38行报出缺陷,如图1所示:

14-3-1图.png

图1:HTTP 响应截断检测示例


3.2 修复代码


14-3-2代码.png

在上述修复代码中,第38行使用 Refenence 类对环境变量值进行 decode,剔除特殊字符。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“HTTP响应截断”缺陷。如图2:

14-3-2图.png

图2:修复后检测结果

4 、如何避免 HTTP 响应截断

要避免HTTP响应截断,需要注意以下几点:

(1)对用户的输入进行合理验证,对特殊字符(如<、>、'、"等)等进行编码。

(2)创建一份安全字符白名单,只接受完全由这些受认可的字符组成的输入出现在 HTTP 响应头文件中。

(3)使用源代码静态分析工具,进行自动化的检测,可以有效的发现源代码中的 HTTP 响应截断问题。


扫一扫,获取更多资讯~

qrcode_for_gh_bba053bd7494_1280.jpg

# 代码审计 # 安全缺陷分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者