在 purescript 的 npm installer 中发现有安全漏洞的代码

阅读时长 4 分钟读完

在前端开发中,我们经常使用各种工具和库来提高效率和质量。其中,NPM 是最流行的 Node.js 包管理器之一,而 PureScript 则是一种静态类型的函数式编程语言,它的 npm installer 也被广泛用于构建前端应用。

然而,最近有人发现 PureScript 的 npm installer 存在安全漏洞,攻击者可以利用这个漏洞在受害者的计算机上执行恶意代码,从而造成损失。

安全漏洞的原理

PureScript 的 npm installer 在安装依赖包时会执行一个名为 _install-deps.js 的脚本,该脚本实现了一个递归函数来解决依赖关系。然而,该函数中存在一个命令注入漏洞,攻击者可以通过修改依赖包中的 package.json 文件来注入恶意命令,从而在执行 _install-deps.js 脚本时执行该命令。

以下是示例代码:

-- -------------------- ---- -------
-------- -------------------- -
  ----- --- - -------------------------- -----------------
  -- ---
  ----- ------------- - ---- ------- ------------- -----
  --------------------------------- ----- ------- ------- -- -
    -- ----- -
      --------------------- -- ------- ------------ --- ------------- -----
    -
    -- ---
  ---
-

如上所示,depInstallCmd 是通过直接将依赖包列表拼接成字符串的方式生成的,而没有进行任何过滤或转义。这就给了攻击者注入恶意命令的机会,例如在 package.json 文件中添加以下内容:

当 PureScript 的 npm installer 在安装依赖时遇到该恶意依赖包时,就会执行以下命令:

从而在受害者的计算机上执行 touch 命令,创建一个名为 /tmp/hacked 的文件,攻击者就可以利用这个漏洞进一步控制受害者的计算机。

学习和指导意义

这个漏洞的存在说明了在使用第三方库和工具时需要格外谨慎,并且要对其代码进行审查和测试。同时,也提醒我们在编写自己的代码时要注意安全问题,建议采用安全的方式来生成命令行参数,例如使用 shell-quote 库。

以下是示例代码:

-- -------------------- ---- -------
----- ---------- - -----------------------

-------- -------------------- -
  ----- --- - -------------------------- -----------------
  -- ---
  ----- ------------- - ---- ------- ---------------------------
  --------------------------------- ----- ------- ------- -- -
    -- ----- -
      --------------------- -- ------- ------------ --- ------------- -----
    -
    -- ---
  ---
-

使用 shell-quote 库可以将依赖包列表转义为安全的命令行参数,从而避免了命令注入漏洞的风险。

结论

在 PureScript 的 npm installer 中发现安全漏洞的代码可能会给前端开发带来潜在的安全威胁。我们应该更加谨慎地选择和使用第三方库和工具,并且要时刻关注安全问题,以保护自己和用户的利益。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/71034

纠错
反馈