新型npm恶意软件通过隐写QR码窃取浏览器密码
Socket威胁研究团队发现一个名为fezbox的新型npm软件包,它通过嵌入QR码的方式窃取浏览器cookie中的用户名和密码凭证。该软件包使用npm别名janedu(注册邮箱janedu0216@gmail[.]com)发布,表面上是无害的JavaScript/TypeScript工具库,实则会悄悄获取并执行托管在Cloudinary上的隐写QR码图像中的混淆代码。
截至发文时,fezbox仍在npm上存活。Socket已提请npm安全团队删除该软件包并封禁威胁行为者账户。
软件包分析
Socket AI扫描器立即将fezbox标记为已知恶意软件,分析显示其采用多层混淆技术以规避静态分析工具和人工审查。
经检查,压缩后的CommonJS分发文件暴露了一系列工具导出(从AES解密到cookie和localStorage辅助函数),同时包含一个自执行函数,可将恶意负载的执行延迟两分钟。代码首先通过检查开发标志和使用2/3概率防护确保运行在生产环境中(非开发或虚拟沙箱)。
等待120秒后,实例化QRCodeScriptLoader并获取QR码图像,其URL字符串被反转存储以逃避检测:
|
|
反转后解析为:
|
|
加载器从图像中解析QR码并执行嵌入的JavaScript有效负载。
混淆技术
威胁行为者采用三层不同的混淆技术来隐藏凭证窃取行为:
- 反转字符串:关键字符串(包括Cloudinary URL和反转的cookie名称"drowssap")被反向存储以规避简单静态扫描
- 隐写QR码:实际恶意脚本隐藏在来自可信CDN的标准外观QR码图像中
- 压缩编码负载:QR码负载进一步使用Unicode转义序列和内联字符串连接对cookie访问函数和网络请求进行编码
去混淆后,负载显示为:
|
|
该脚本会收集存在的用户名和密码cookie,通过HTTPS POST发送到攻击者的服务器,然后静默退出。
防护建议
现代Web应用程序很少在cookie中存储明文密码,这限制了该特定攻击的实际影响。然而,隐写QR码的创新使用凸显了威胁行为者将持续创新以绕过安全工具和逃避检测。
开发者和安全团队应强制执行以下最佳实践:
- 自动化依赖扫描:将Socket GitHub应用或CLI工具集成到CI/CD流水线中,在可疑软件包进入生产环境前进行拦截
- 浏览器扩展警报:安装基于浏览器的扫描器,在安装时标记已知恶意软件和仿冒信号
- 零信任假设:将所有第三方依赖项视为不可信,特别是包含QR码解析器等不常用模块的依赖项
- 运行时监控:部署端点保护,检测客户端代码中的异常网络请求或延迟执行模式
通过采用结合静态检查、动态分析和运行时监控的分层安全方法,组织可以领先于日益复杂的供应链攻击,保护用户凭证免受隐蔽的混淆威胁。