安全小黄鸭 前天 00:47
XSSI漏洞:浏览器而非开发逻辑的潜在风险
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了XSSI(Cross Site Script Include)漏洞,并将其与常见的JSONP劫持进行区分。文章指出,XSSI漏洞并非源于开发逻辑错误,而更多地与浏览器本身的漏洞相关。通过分析假的AJAX请求和浏览器(如IE、Chrome/Firefox)的特定bug,特别是利用Harmony proxy bug来劫持JSON数据,揭示了该漏洞的产生机制。文章还提及了Proxy对象被滥用的案例,并提供了修复建议,包括验证X-Requested-With请求头和使用X-Content-Type-Options: nosniff响应头。

💡 XSSI漏洞并非开发者的逻辑错误,而是主要源于浏览器本身的漏洞。它不同于JSONP劫持,JSONP劫持利用的是可控的回调函数名来窃取信息,而XSSI则通常需要结合浏览器漏洞来劫持AJAX请求返回的敏感数据。

⚠️ 假AJAX请求是XSSI产生的原因之一。如果后端接口未对`X-Requested-With: XMLHttpRequest`请求头进行验证,攻击者便可能通过script标签加载该接口,尝试获取数据。然而,AJAX返回的数据格式多样,直接获取存在难度。

💥 浏览器漏洞是XSSI利用的关键。文章重点分析了利用Harmony proxy bug的攻击方法。通过Proxy代理`window`对象,当script标签加载的接口返回非JS格式的字符串时,浏览器会尝试执行,而Proxy能够截获并读取这些字符串内容,从而泄露敏感信息。

🛡️ 修复XSSI漏洞的关键在于后端和浏览器端的协同。后端应统一验证AJAX接口的`X-Requested-With`请求头,或者添加`X-Content-Type-Options: nosniff`响应头。同时,用户应及时更新浏览器到最新版本,以修复已知的安全漏洞。

Fr1day 2017-08-27 19:31

一篇虎头蛇尾的番外

这是之前写的一篇文章,写到一半拖延了半年...


一句话总结:XSSI漏洞,并非开发逻辑错误而产生的,更应该算是浏览器的漏洞。


0x00 JSONP劫持漏洞

首先,从大家比较熟悉的 JSONP劫持 开始讲起。举个栗子,某站(xxx.yyy.com)需要从主站(www.yyy.com)跨域加载一些信息,所以有了下面的这段代码:

但是getinfo.php的代码没有对来源站做检查,再加上script的跨域特性,就让攻击者有机可乘了。攻击代码示例如下:

当用户点击了恶意链接之后,页面解析自动发出请求,然后执行攻击者设定好的代码,该接口返回的信息就被攻击者掌握了。攻击原理可以参考CSRF漏洞,利用姿势参考XSS漏洞,这里不再细讲。


这是 JSONP劫持 里比较经典的一个案例。而我们今天要讲的是 XSSI漏洞,跟这个有什么关系吗?


都是劫持敏感信息,但劫持的类型不一样。JSONP劫持的是callback函数名可以被攻击者控制/猜测的JSONP接口,开发人员背锅。而XSSI漏洞劫持的通常是一些AJAX请求的接口,需要配合浏览器漏洞才能成功利用


0x01 XSSI


XSSI -> Cross Site Script Include,漏洞到底是怎么产生的呢?


原因之一,是你用了假的AJAX请求。从开发的视角来看,AJAX请求只能通过 javascript 里的 XMLHttpRequest 对象发出,且在请求的时候浏览器会自动在请求头里加上 X-Requested-With: XMLHttpRequest。如果后台没有检查请求头里没有 “X-Requested-With: XMLHttpRequest” ,直接返回数据(AJAX失去了做人的尊严),就会出现问题。


也就是说,攻击者仍然可以用这种方法去加载存在问题的接口(就像JSONP劫持一样):


```

<script src=http://www.yyy.com/getinfo.php??userid=xxx>

```


但AJAX请求返回内容的格式不定,有可能是json,也有可能是字符串、CSV等。举个栗子,json的格式往往是 {"secret": "secret"},没有赋值给某个变量,也不像jsonp请求会执行指定函数。攻击者无法直接获取到内容,那到底是什么操作泄露了返回的内容呢?


原因之二,是浏览器有了真的漏洞。15年有国外的研究人员发布文章提到了如下几种攻击方法,可以获取到接口的内容:


我们重点来分析下第三种,通过Proxy的设计缺陷来获取json的内容。产生原因比较经典:因为浏览器新性能导致的漏洞。


0x02 案例分析——Proxy

先来看下 Proxy 的基本使用方法。

看起来像webhook,可以更改原有接口的逻辑,截获参数的内容。原本设计应该是为了方便JavaScript的类继承,但黑阔们发现可以用Proxy代理window对象:

由于 {{target_url}} 是用<script>标签加载的,返回内容会被浏览器当成JS解析,当返回的内容为字符串(xyz)的时候,执行内容类似于 window.xyz。字符串的内容就被Proxy has函数读取到了。


现在漏洞已经修复,不能再给window对象添加Proxy代理。修复的过程也比较有意思,出过几次bypass,看来国际大厂的开发哥哥们也喜欢 “指哪儿修哪儿”


具体的案例可以参考: http://balpha.de/2013/02/plain-text-considered-harmful-a-cross-domain-exploit/


0x03 更多劫持方法

Proxy问题只是诸多劫持方法中的一种,更多类型的数据劫持方法可以参考: 

http://www.mbsd.jp/Whitepaper/xssi.pdf

http://bobao.360.cn/learning/detail/3242.html


乌云知识库翻译版本: http://wps2015.org/drops/drops/XSSI%E6%94%BB%E5%87%BB%E5%88%A9%E7%94%A8.html


更多关于Proxy的用法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy


0x04 影响及修复

漏洞的利用条件:

* 含有敏感信息的接口没有验证 X-Requested-With 请求头

* 浏览器非最新版本,或者存在0day

* 用户点击攻击者的链接


修复:

* AJAX接口统一验证 X-Requested-With 请求头,或者添加响应头 X-Content-Type-Options: nosniff 

* 关服务器跑路(划掉)



阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

XSSI JSONP劫持 浏览器漏洞 AJAX Proxy 安全 XSSI JSONP Hijacking Browser Vulnerability AJAX Proxy Security
相关文章