【早阅】防止针对 JavaScript 生态系统的供应链攻击

科技   2024-10-28 08:01   福建  

作者:@Doğa Armangil
原文:https://dev.to/arma/preventing-supply-chain-attacks-to-the-javascript-ecosystem-ide

背景

在 JavaScript 生态系统中,供应链攻击已成为一个严重的问题。最近的研究表明,JavaScript 模块的权限继承机制是导致这些攻击的主要原因之一。具体来说,模块会继承调用它们的应用程序或模块的权限,这不仅在浏览器环境中存在问题,也在非浏览器环境中(如 Deno)存在。这种权限继承机制使得恶意模块能够利用调用者的权限进行恶意操作,如网络请求、文件操作等。

要点

作者提出了一种新的解决方案,即 “按模块权限系统”(Per-module permissions system),以防止 JavaScript 生态系统中的供应链攻击。该系统通过在每个模块和应用程序的配置文件中声明权限,来限制模块的权限范围,从而减少恶意模块的潜在危害。

【第2784期】从cdnjs 的漏洞来看前端的供应链攻击与防御

分析

当前的解决方案主要依赖于安全团队对已发布模块的漏洞扫描,但这存在几个明显的缺点:

  1. 资源密集:扫描所有已发布的模块版本需要大量的计算资源。

  2. 覆盖不全:无法保证所有在野模块都经过扫描。

相比之下,作者提出的 “每模块权限系统” 具有以下优势:

  1. 轻量级:不需要对已发布的模块进行扫描。

  2. 全面性:权限在运行时强制执行,即使是不知名的模块也无法绕过权限限制。

该系统通过在 deno.json 或 package.json 文件中声明权限配置来实现。权限配置分为两部分:

  • permissions.self:声明模块自身及其依赖所需的权限。

  • permissions.imports:声明模块同意分配给其依赖的权限。

例如,一个权限配置可能如下所示:

 {
"self": {
"read": {"allow": [], "deny": []},
"write": {"allow": [], "deny": []},
"net": {"allow": [], "deny": []},
"env": {"allow": [], "deny": []},
"run": {"allow": [], "deny": []}
},
"imports": {
"jsr:@org/module@1.0.0": {
"read": {"allow": [], "deny": []},
"write": {"allow": [], "deny": []},
"net": {"allow": [], "deny": []},
"env": {"allow": [], "deny": []},
"run": {"allow": [], "deny": []}
},
"[default]": {
"read": {"allow": [], "deny": []},
"write": {"allow": [], "deny": []},
"net": {"allow": [], "deny": []},
"env": {"allow": [], "deny": []},
"run": {"allow": [], "deny": []}
}
}
}

影响

该解决方案对 JavaScript 生态系统的影响将是深远的:

  1. 提高安全性:通过限制模块的权限,可以显著减少供应链攻击的风险。

  2. 促进模块化开发:开发者可以更放心地使用第三方模块,而不必担心权限滥用。

  3. 推动标准化:该系统可能会成为 JavaScript 运行时环境的标准配置,推动整个生态系统的安全性提升。

结论

作者提出的 “每模块权限系统” 是一个简单而有效的解决方案,能够显著提高 JavaScript 生态系统的安全性。随着该系统的推广和实施,预计供应链攻击的数量将大幅减少,开发者可以更加专注于创新和功能开发,而不必担心安全问题。未来,该系统可能会成为 JavaScript 开发的标准实践,进一步巩固 JavaScript 在现代软件开发中的地位。

【PPT】供应链攻击与 Secure ECMAScript

AI 阅:了解技术资讯的一种方式。

🚀可直接查看原文了解详细内容。


前端早读课
探索前端技术,体验产品的情感, 项目思考的指引,塑造独立开发者的未来。
 最新文章