CVE-2025-55182(React Server Components 漏洞)能在服务器根目录创建 .sh、.gz 或 XMRig 矿工文件吗?
Source: Dev.to
问题
我在使用 React Server Components 的 Next.js 项目中,后端是 Magento 2。
最近服务器被入侵,我在根目录发现了一些可疑文件,包括:
.sh脚本.gz或.tar.gz压缩包- XMRig 挖矿二进制文件
- 自动重启脚本
在调查过程中,我看到了 CVE‑2025‑55182,它影响 React Server Components 并允许泄露某些内部组件的源代码。
我的主要疑问是:
- CVE‑2025‑55182 或其他 React Server Component 漏洞是否可能让攻击者:
- 向服务器文件系统写入文件,
- 上传
.sh或.gz文件, - 执行 shell 脚本,
- 或部署像 XMRig 这样的二进制文件?
或者该漏洞仅限于泄露组件代码,无法导致远程代码执行或文件创建,意味着服务器被攻破的原因必然是其他来源(例如 Magento 漏洞、SSH 被盗、权限配置错误等)?
我想确认 CVE 是否可能导致文件系统层面的更改,还是应该在其他地方寻找根本原因。
回答
简短结论:CVE‑2025‑55182 只会导致 组件源码泄露,它本身 不具备写文件、上传文件、执行脚本或部署二进制文件 的能力。若攻击者利用该漏洞取得了源码,他们仍然需要另外的漏洞或错误配置才能实现远程代码执行(RCE)或文件写入。因此,服务器上出现的 .sh、.gz、XMRig 等文件,极有可能来源于 其他攻击向量(如 Magento 漏洞、SSH 暴力破解、误配置的 CI/CD、第三方依赖的后门等)。
下面从技术层面解释原因:
1. CVE‑2025‑55182 的本质
- 漏洞描述:在 React Server Components(RSC)实现中,服务器端会把组件的 序列化描述(
moduleId、exportName、props等)发送给客户端。若组件内部使用了import.meta.url、__filename、__dirname或者直接把文件内容作为字符串返回,攻击者可以构造请求,使服务器错误地把这些内部路径或源码作为响应返回,从而泄露源码。 - 攻击面:攻击者只能 读取 服务器端的文件内容(主要是组件源码、配置文件等),并不能在服务器上执行写入或执行操作。
2. 为什么它不能直接写文件或执行代码
| 关键点 | 说明 |
|---|---|
| RSC 运行模型 | RSC 只在服务器上执行一次,用来生成 JSON 或 React 元素树,随后把结果序列化返回给客户端。它没有提供直接的文件系统 API(如 fs.writeFile)给组件使用,除非开发者自行在组件内部引入并调用。 |
| 渲染过程的隔离 | Next.js 对 RSC 的渲染过程进行严格的 sandbox(沙箱)处理,默认不允许访问 process.env、process.cwd() 之外的路径,也不允许执行任意子进程。 |
| 漏洞触发方式 | CVE‑2025‑55182 通过 错误的序列化/反序列化 让攻击者看到源码,并不涉及 eval、Function、child_process.exec 等可执行代码的路径。 |
| 文件写入需求 | 要在服务器上创建 .sh、.gz、二进制等文件,需要 调用文件系统写入 API(fs.writeFile、fs.createWriteStream)或 执行系统命令(exec、spawn)。这些 API 在 RSC 中默认不可达。 |
因此,仅凭 CVE‑2025‑55182,攻击者只能窃取信息,而无法直接在服务器上写文件或执行任意代码。
3. 可能的间接风险
虽然 CVE‑2025‑55182 本身不提供 RCE,但泄露的源码可能帮助攻击者:
- 发现其他漏洞:源码中可能包含硬编码的凭证、错误的输入验证、未加密的 API 密钥等,攻击者可以利用这些信息进一步渗透。
- 定位业务逻辑:了解内部实现后,攻击者可以针对特定业务接口发起更精准的攻击(如 SSRF、SQL 注入等)。
- 利用已知的 Next.js/Magento 漏洞:如果项目中还有未打补丁的旧版依赖,泄露的源码可能让攻击者更快找到利用点。
但这些都是二次利用,仍然需要 另一个可执行的漏洞 才能实现文件写入或二进制执行。
4. 为什么你的服务器会出现 XMRig、.sh、.gz 等文件
以下是更常见的导致此类文件出现的原因,建议逐一排查:
-
Magento 2 漏洞
- Magento 过去多次曝出远程代码执行(RCE)漏洞(如 CVE‑2023‑XXXX、CVE‑2024‑XXXXX),攻击者可通过上传恶意 PHP 脚本后执行系统命令。
- 检查 Magento 版本、已安装的插件以及是否已应用官方安全补丁。
-
SSH/凭证泄露
- 弱密码、公开的私钥、或通过暴力破解获取的登录凭证。
- 查看
/var/log/auth.log(或对应系统日志)中是否有异常登录记录。
-
CI/CD 或部署脚本泄露
- 自动化部署工具(GitHub Actions、GitLab CI、Jenkins 等)如果使用了不安全的环境变量或脚本,攻击者可能利用它们写入文件。
- 检查 CI 日志、环境变量以及部署机器的权限。
-
容器/虚拟化逃逸
- 若你在 Docker/Kubernetes 中运行 Next.js,容器逃逸漏洞(如 CVE‑2024‑XXXX)也可能导致宿主机文件写入。
-
第三方依赖后门
- 某些 NPM 包可能包含恶意代码,尤其是未审计的私有包或被篡改的包。
- 使用
npm audit、yarn audit,并对package-lock.json/yarn.lock进行完整性校验。
-
Web 服务器配置错误
- 例如允许任意文件上传且未做文件类型或路径校验,攻击者可以直接上传
.sh、.gz并通过 cron 或 systemd 定时任务执行。
- 例如允许任意文件上传且未做文件类型或路径校验,攻击者可以直接上传
5. 检查与缓解措施
| 步骤 | 具体操作 |
|---|---|
| 确认是否真的受 CVE‑2025‑55182 影响 | 查看项目中使用的 next、react、react-server-dom-webpack 版本。该 CVE 影响的版本范围通常是 React 19.x 之前的某些实现。若已升级到最新的 Next.js(>=13.5)和 React(>=19.0.0),漏洞已被修复。 |
| 审计服务器日志 | - npm/yarn 安装日志- Web 服务器访问日志(nginx/Apache) - Magento 日志( var/log/)- 系统审计日志( /var/log/syslog、/var/log/auth.log) |
| 检查异常文件的创建时间、所有者、权限 | 使用 ls -l --time=ctime 或 stat 查看文件元数据,判断是哪个用户创建的。 |
| 回滚或重新部署干净的代码 | 若无法确认文件来源,建议在干净的机器上重新构建镜像或代码库,确保没有被植入后门。 |
| 强化 SSH 与凭证管理 | - 禁止密码登录,使用强密码的 SSH 密钥 - 启用 2FA、Fail2Ban - 定期更换密钥 |
| 更新所有依赖 | - npm install react@latest react-dom@latest next@latest- composer update(Magento)- npm audit fix --force(审计) |
| 限制文件系统写权限 | - 将 Next.js 运行用户限制为只能写入特定目录(如 /tmp)- Magento 只允许 var/、pub/ 可写 |
| 监控异常进程 | 使用 ps aux, top, htop 检查是否有未知的 xmrig 进程在运行。 |
6. 小结
- CVE‑2025‑55182 本身只能泄露源码,不提供写文件、执行脚本或部署二进制的能力。
- 若攻击者仅利用该漏洞,他们只能获取内部实现细节,仍需 其他漏洞(如 Magento RCE、SSH 失窃、CI/CD 漏洞等)才能实现你所看到的文件写入和 XMRig 部署。
- 因此,应把调查重点放在后端 Magento、服务器登录凭证、部署流水线以及可能的第三方依赖,而不是仅仅关注 React Server Components 的 CVE。
通过上述检查与加固,你可以更准确地定位根本原因,并防止类似的后续入侵。祝排查顺利。