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

Via*_*bel 6 security reactjs create-react-app

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

[Error: ENOENT: no such file or directory, stat '/initrd.img'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '/initrd.img'
}
Run Code Online (Sandbox Code Playgroud)

有时,会出现一些其他消息,取而代之的是“/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)的依赖树中确实存在恶意脚本,则应紧急调查。

环境:

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

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

小智 8

我遇到了同样的错误,并为此苦苦挣扎了两天。一切在我的 Mac 上运行良好,但当我克隆 GitHub 存储库并尝试在 Linux 系统以及 AWS-Amplify 上运行我的 React 应用程序时,它向我显示了同样的错误:

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

但在检查构建错误日志后,我发现这是从react-bootstrap导入的问题。问题是我正在导入的组件的“情况” 。就我而言,我导入了 bootstrap Container 并使用了container而不是Container。我只是纠正了这一点,一切都解决了。

就我而言: 错误:从“react-bootstrap/container”导入容器正确“react-bootstrap/container”导入容器


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

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

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


Via*_*bel 5

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

这是合理且令人放心的。不涉及恶意脚本。

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


小智 5

就我而言,这是我的反应应用程序中静态 CSS 文件的错误导入语句。

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

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