在全新的 create-react-app 安装(脚本访问“/initrd.img”、“/vmlinuz”等)的构建错误中检测到潜在的安全威胁

IT技术 reactjs security create-react-app
2021-05-09 10:12:21

在我使用 create-react-app 或 Razzle 创建了一个新应用程序后,在构建时会出现错误消息,这在安全方面非常令人担忧:

[Error: ENOENT: no such file or directory, stat '/initrd.img'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '/initrd.img'
}

有时,会出现一些其他消息,取而代之的是“/vmlinuz”、“/initrd.img.old”、“/vmlinuz.old”和“.steampath”。

这些消息会在出现构建错误(我生成的任何构建错误)时出现。

这与vue-CLI 输出非常相关的错误(安全问题)中描述的问题基本相同(但我被告知要问一个新问题)。在该线程中有三个人的证词具有相同的错误消息。

我认为 React 构建脚本没有任何正当理由来统计 Linux 内核和 Steam 目录,因此这里可能存在恶意软件包。

这只发生在 npm 上,而不是 yarn 上。(如果你的应用是由 CRA 用 yarn 创建的,你应该这样做rm -rf node_modules && rm -rf yarn.lock && npm install);

在尝试隔离罪魁祸首时,我可以实现的最小设置是:

  • 使用 create-react-app 创建一个全新的应用程序 npx create-react-app app1
  • 然后在 中生成任意构建错误index.js,添加如下内容:import "nonexistent";

当我这样做时,我看到了stat '/initrd.img'上面提到错误。

我想知道在执行完全相同的步骤后您是否没有看到错误。这可能意味着它不是来自安装的软件包,而是来自我系统中的其他地方。

但它不能来自我的 Node.js 设置,因为我在重做以下步骤之前删除了我的 $HOME/.nvm、$HOME/.npm、$HOME/node_modules、$HOME/.yarn 和 $HOME/.config/yarn。

显然,网络上关于此的类似推荐并不多。虽然“/.steampath”多一点。

我向 security@npmjs.com 报告了这个问题。他们还没有回复。

如果react-create-app(和Razzle)的依赖树中确实存在恶意脚本,则应紧急调查。

环境:

  • 节点 14.14 安装了 nvm 0.36.0
  • npm 6.14.8
  • 创建react应用程序 3.4.1
  • 库本图 20.04

编辑:我还在https://github.com/facebook/create-react-app/issues/9855 上发布了一个问题我认为这足够严重和紧急,现在应该通知 CRA 维护者。

4个回答

我遇到了同样的错误并为此苦苦挣扎了 2 天。一切都在我的 Mac 上运行良好,但是一旦我克隆了 GitHub 存储库并尝试在 Linux 系统和 AWS-Amplify 上运行我的 react 应用程序,它就显示了同样的错误:

[错误:ENOENT:没有那个文件或目录,stat '/initrd.img']。

但是在检查构建错误日志后,我发现这是从react-bootstrap导入的问题问题是我正在导入的组件的“案例”在我来说,我是进口自举集装箱和二手ç ontainer而不是Ç ontainer。我只是纠正了这一点,一切都解决了。

在我的情况: WRONG:导入容器从“react的自举/ ç ontainer” RIGHT:导入容器从“react的自举/ Ç ontainer”。


我的提示:像这样的小错误也会给你这个错误。检查不正确的导入并查看库的文档以检查案例。

如果您的应用程序很小,并且您的开发还没有走得太远,那么您可以创建一个新的 React 应用程序并一个一个复制组件文件并运行它们以查看实际上是哪个组件造成了问题。这不是最好的主意,但它在我第一次遇到此错误时对我有用。

PS:感谢阅读。这是我对 Stack Overflow 的第一个回答。耶!

似乎有一个简单的答案:这些消息可能只是来自 Node 在node_modules项目父目录中一直搜索到文件系统根目录。(请参阅https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)。它也可能会尝试跟踪符号链接,以防它们指向node_modules目录,并在每次遇到损坏的符号链接时发出错误。

这很合理,也很让人放心。不涉及恶意脚本。

我删除了 initrd.img、/initrd.img.old、/vmlinuz 和 /vmlinuz.old,它们确实是损坏的符号链接。所以我不应该再收到这些错误了。

就我而言,这是我的 react-app 中静态 CSS 文件的错误导入语句。

当尝试const classes = useStyles();使用 Material UI makeStyles 方法声明时,VS Code 由于某种原因自动从某个随机路径导入了一个“类”对象

因此,请检查您是否有任何不正确的文件导入语句。

在我的情况下,当我安装@mui/material没有@emotion/react @emotion/styled补充的ui lib时出现消息

缺少的库名称写在控制台的错误消息中,但我不得不用PrtSc捕获它,因为上面提到的消息几乎立即替换了它。