对于那些熟悉现代广告技术的人来说,iFrameBusters是托管在发布商网站上的HTML文件,允许广告创意扩展到其标准边界之外。这些可展开的广告素材通常很容易在网站上识别,就是我们深恶痛绝的广告块。
虫虫看考有关文献发现很多Busters中存在这样或者那样的XXS漏洞,本文就跟大家一起来截些广告Busters的实现以及XSS漏洞解析。
互联网广告行业比较分散,各广告供应商之间的流程可能差别很大。虽然对广告网络投放的完整说明超出了本文的范围,但是基本流程都是通过iFrame和iFrameBusters来实现可扩展广告素材展现。
例如,在发布商页面上提供的简单(非扩展)广告素材源码如下所示:
请注意,iFrame的src属性指向嵌入所需广告素材的广告客户的域。这里没什么特别的。这正是任何其他外部指向iFrame的功能。此外,请注意iFrame的大小限制为*,标准广告位的大小。广告不能将显示扩展该框架的限制大小之外,由于同源策略(SOP)设置不能在其母页面中做DOM操纵。
为了解决这个问题并允许特定广告供应商绕过同源策略限制,通常会提供供应商iFrameBusters(特殊的HTML文件)以托管在网站的网站发布域的主机上。
一个简单典型的iFrameBuster(buster.html)可能如下所示:
这样上面的iFrameBuster页面就可以得以嵌入网站正常页面(index.html)如下:
我们可以从上面的源码中看到,在第3步(Step3)中嵌入初始广告的iFrame会重定向到buster.html文件所在的站点域。然后,buster文件可以访问重定向URL中提供的参数来引用针对特定广告展示的行为。
如上所述,由于iFrameBusters位于特定供应商的。这意味着可能会要求给定的网站托管大量第三方HTML文件以支持可扩展功能。
事实上,截止最近Google还在提供了一个多广告供应商的iFrameBuster套件,可以在DoubleClick的AdExchange文档中下载。
漏洞
谷歌后来宣布建议从发布商网站域名中删除其广告套件中的几个有问题的Busers,笔者决定对还存在的一些Busers以及DoubleClick未使用的更受欢迎的Busers做一下审查。结果发现大多数Busers中都存在基于DOM的XSS跨站脚本攻击漏洞,本文中将会介绍一些特例来说明。
AdformIFrameManager(1.7.48)
我们使用早版本的Adform为例来做介绍。相关源码如下:
如上所示,该buster只接受一个源URL,这个URL将作为外部JavaScript源写入DOM。上面的相关正则表达式测试,用来对将传递的脚本源URL做限制只允许特定域为白名单。
我们对该正则表达式分析,首先可以看到URL以