pnpm vs npm 的漏洞利用本仓库展示了如何利用 npm 和 pnpm 从 tarball 安装时的差异进行攻击。
该漏洞已记录在 CVE-2023-37478 中。
这里构建的 JavaScript 包宣称会向用户打印一条友好的消息。当使用 npm 安装时,确实如此。然而,同样的包用 pnpm 安装时,会打印一条不友好的消息。可以想象这可能会被更恶意地利用。
你可以在此处找到一个旧版且存在漏洞的 pnpm 版本,该版本可与此漏洞配合使用:旧版 pnpm v8.6.7。 该漏洞已在 新版 pnpm 中修复,修复内容可 在此查看。
exploitative_package_src 包含了 definitely_benign_package 包的源码。
bad_version(V0.1)文件夹包含恶意代码,good_version(V0.2)文件夹包含良性代码。
make_tar.sh 用于构建 tar 包,使得恶意版本被添加到 tarball 中,且早于良性版本。
如需演示,将编译好的 definitely_benign_package.tgz 移动或克隆到 /use_demonstration/ 目录,然后通过 npm 或 pnpm 安装。可以使用 make pnpm/npm 快捷操作(完成后也可用 make clean)。安装完毕后,运行 node words_of_affirmation.js 来执行肯定语句脚本。