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, 命令注入, 暗色界面, 漏洞报告, 编程工具, 网络安全研究, 远程代码执行