【问题标题】:Cross-site scripting vulnerability because of a CNAME entry由于 CNAME 条目导致的跨站点脚本漏洞
【发布时间】:2023-05-31 09:02:01
【问题描述】:

我管理和开发的网站的一个广告网络请求以下内容:

我们一直致力于提高 XXXX.com 的性能,我们的团队认为,如果我们可以在该域上设置以下 CNAME,将有助于提高速率:

srv.XXXX.com d2xf3n3fltc6dl.XXXX.net

您可以通过您的域名注册商创建此记录吗?我们需要您创建此 CNAME 的原因是为了在我们的 RTB 中保持域透明度。完成此设置后,我将对您的帐户进行一些修改,这应该会产生一些很好的结果。*

这不会让我们的网站面临跨站脚本漏洞吗?难道恶意代码不能伪装成来自我们的站点以绕过浏览器中的同源策略保护吗?我就此向他提问,这是他的回答:

首先让我谈谈好处。我们希望您创建此 CNAME 的原因是为了提高我们 RTB 中的域透明度。很多时候,当广告被触发时,JS 用于抓取 URL 并将其传递给买方。我们发现这种方法效率低下,因为有时域信息无法到达市场。这会导致展示(或点击)显示为“未分类”而不是“XXXX.com”,从而降低费率,因为买方为未分类的广告资源支付的费用最多可减少 80%。通过创建 CNAME,我们确保您的域 100% 的时间显示,我们通常会看到 CPM 和收入增加 15-40%。 我相信您会问自己为什么其他广告网络不这样做。原因是这不是一个非常可扩展的解决方案,因为如您所见,我们必须与每个发布者合作才能获得此设置。与 Adsense 和 Lijit 等大型供应商不同,OURCOMPANY 专注于为少数优质发布商实现收入最大化,而不仅仅是让我们的标签在尽可能多的网站上运行。我们花时间和精力提供这些解决方案,以最大限度地提高各方的收入。 就安全风险而言,它们几乎没有。您只需将 XXXX.com 的子域指向我们的广告创意服务器。我们不能使用它在您的网站上运行脚本,或以任何方式访问您的网站。 添加 CNAME 完全取决于您。无论有没有这种情况,我们仍将尽最大努力获得最优惠的价格。我们刚刚看到其他出版商在这方面取得了很好的成果,所以我想我会联系你,看看你是否感兴趣。

这整个情况向我提出了危险信号,但确实超出了我的安全知识范围。有人可以对此提供任何见解吗?

【问题讨论】:

    标签: security xss cname


    【解决方案1】:

    这将使设置在XXXX.com 级别的cookies 能够被每个站点读取,但它不允许其他Same Origin Policy 操作,除非两个站点都选择加入。两个站点都必须在客户端设置document.domain = 'XXXX.com';允许访问两个域的脚本。

    来自MDN

    Mozilla 将从未设置过的 document.domain 属性与明确设置为与文档 URL 相同的域进行区分,即使该属性在两种情况下都返回相同的值。如果一个文档都将document.domain 设置为相同的值,表明他们的合作意图,或者两者都没有设置document.domain 并且URL 中的域相同(实现),则允许一个文档访问另一个文档。如果不是这个特殊政策,每个站点都会受到来自其子域的 XSS 的影响(例如,https://bugzilla.mozilla.org 可能会受到 https://bug*.bugzilla.mozilla.org 上的错误附件的攻击)。

    【讨论】: