bshare分享插件投毒事件分析:废弃组件引发的恶意跳转风险
字数 2260 2025-10-01 14:05:45
bshare分享插件投毒事件:分析与应对策略
1. 事件概述
bshare分享插件投毒事件是一起典型的“废弃组件供应链攻击”。攻击者利用已注销公司遗留在大量网站中的第三方资源引用,通过控制该资源域名,注入恶意代码,从而对继续引用此资源的网站实施攻击。
- 攻击类型:供应链攻击、水坑攻击
- 核心原因:网站引用了已被他人恶意抢注的第三方域名下的JavaScript文件。
- 主要影响:在特定条件下,访问受影响网站的用户会被强制跳转到恶意网址(主要为色情网站)。
- 曝光时间:该事件于2025年2月被安全研究人员发现并预警。
2. 背景知识:什么是bshare?
- 功能:bshare是一款曾经在国内非常流行的网站社交分享工具/插件。它提供了一键将网页内容分享到微博、微信、QQ空间、豆瓣等数十个国内主流社交平台的功能。
- 公司背景:bshare是擘擘纳(上海)信息科技有限公司旗下的产品。
- 关键信息:该公司已于2018年2月18日正式注销。
- 风险根源:公司注销后,其官方域名
bshare.cn因未续费而被他人抢注。无数网站仍然在页面代码中引用bshare.cn域名下的JavaScript文件,这赋予了域名当前控制者控制这些网站行为的能力。
3. 攻击技术细节分析
3.1 恶意JS文件
通过对大量样本的分析,确认被投毒的主要JS文件为:
http://static.bshare.cn/b/buttonLite.jshttp://static.bshare.cn/b/bshareC0.js
注:攻击者可能不断更换具体的二级域名(如 static 可能变为其他名称),但主域名始终为 bshare.cn。
3.2 恶意代码功能逻辑
被注入的恶意代码实现了条件触发式跳转,逻辑清晰且具有规避检测的特性:
- 设备检测:判断用户是否使用移动设备(手机/平板)访问。
- 时间检测:判断当前时间是否处于夜间时段(晚上8点至次日早上6点)。
- Cookie检测:检查用户本地是否存在特定的Cookie标记,以此判断该用户是否在最近24小时内已经执行过跳转。此机制确保对同一用户不会频繁跳转,降低被发现的风险。
- 强制跳转:当以上三个条件同时满足时,脚本会执行强制页面跳转。
3.3 跳转目标
跳转的目标地址使用ASCII码加密进行混淆,以增加分析难度。
解密后的实际跳转地址均为色情网站。
重要特点:跳转目标域名频繁更换(可能每天不同),但内容性质不变。因此,不能仅通过拦截特定URL来防御,而需从根本上解决问题。
4. 影响范围与自查方案
4.1 影响范围
由于bshare插件曾极度流行,尽管其自2024年10月20日后已不可用,但直至事件发生时(2025年),仍有大量网站未清理相关代码,导致中招。涵盖各类政府、企业、高校网站等。
4.2 自查方法
方法一:代码审查(推荐)
直接检查网站前端页面的HTML源代码。
- 搜索关键词:在源代码中全局搜索
bshare.cn。 - 查找代码行:通常会找到类似以下的引用代码:
或<script type="text/javascript" src="http://static.bshare.cn/b/buttonLite.js"></script><script type="text/javascript" src="http://static.bshare.cn/b/bshareC0.js"></script> - 结论:只要发现任何来自
bshare.cn域的JS文件引用,即可判定存在风险。
方法二:使用测绘平台
- 使用如Hunter(鹰图)、FoFa、ZoomEye等网络空间测绘引擎。
- 搜索语法:使用
body="bshare.cn"或icon_hash="xxx"(如果已知网站icon)等语法进行批量资产检索,快速定位受影响的资产。
方法三:批量检测脚本
可以编写简单的脚本进行批量检测。以下提供一个基于Python和requests库的思路:
import requests
# 待检测的URL列表
urls_to_check = [
"http://example1.com",
"http://example2.com",
# ... 更多网址
]
for url in urls_to_check:
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
# 检查响应内容中是否包含bshare.cn的JS引用
if 'bshare.cn' in response.text:
# 更精确的检查可以使用正则表达式匹配<script src="...bshare.cn...">
print(f"[!] 风险链接: {url}")
else:
print(f"[+] 安全链接: {url}")
except requests.RequestException as e:
print(f"[x] 检查失败 {url}: {e}")
5. 修复与整改建议
立即采取以下措施进行修复:
-
彻底移除(首选方案):
- 完全删除网站页面中所有对
bshare.cn域下资源的引用(主要是JS文件)。 - 评估是否仍需社交分享功能。如果不需要,直接移除相关代码和按钮。
- 完全删除网站页面中所有对
-
替换插件(如需保留功能):
- 如果需要保留分享功能,应替换为其他活跃维护、信誉良好的分享插件,例如:
- JiaThis(加网)
- 百度分享(需确认其是否仍在维护)
- 或使用主流社交媒体官方提供的SDK自行集成。
- 如果需要保留分享功能,应替换为其他活跃维护、信誉良好的分享插件,例如:
-
本地化托管(折中方案):
- (不推荐,仅作记录) 如果极度依赖bshare的某些特定功能且无法替代,可将最后一份官方发布的、干净的JS文件下载到自己的服务器或CDN上,并修改页面引用路径为自家域名下的路径。
- 风险:此方案只是消除了域名被控的风险,但插件功能可能已失效或存在其他未公开漏洞。
6. 事件总结与安全启示
- 软件资产清单的重要性:企业应建立并持续维护第三方组件/依赖库的资产清单,清晰掌握每个组件的来源、版本和用途。
- 生命周期管理:对所有第三方组件实施生命周期管理,及时清理、替换或移除已废弃(EOL)、不再维护的组件。
- 内容安全策略(CSP):部署严格的CSP策略,可以有效阻止此类恶意JS文件的加载和执行,即使页面中存在引用代码,浏览器也会拒绝加载不在白名单中的资源。
- 持续监控与审计:定期对网站进行安全扫描和代码审计,尤其关注外部资源的引入。
- 最小化依赖:尽量避免对不可控的第三方资源的直接引用,特别是来自个人或已停止运营的公司的资源。
根本教训:永远不要在你的生产环境中引用你无法控制的第三方域名下的代码资源。 一旦域名的控制权发生变化,你的网站安全也将随之沦陷。