j0xh-sec/CVE-2026-49009
GitHub: j0xh-sec/CVE-2026-49009
CVE-2026-49009 的概念验证代码,演示 Mender Server 中认证路径遍历升级为远程代码执行的完整利用链。
Stars: 0 | Forks: 0
```
▄█████ ██ ██ ██████ ████▄ ▄██▄ ████▄ ▄██▀▀▀ ██ ██ ▄█▀▀█▄ ▄██▄ ▄██▄ ▄█▀▀█▄
██ ██▄▄██ ██▄▄ ▄▄▄ ▄██▀ ██ ██ ▄██▀ ██▄▄▄ ▄▄▄ ▀█████ ▀▀▀██ ██ ██ ██ ██ ▀▀▀██
▀█████ ▀██▀ ██▄▄▄▄ ███▄▄ ▀██▀ ███▄▄ ▀█▄▄█▀ ██ ▄▄██▀ ▀██▀ ▀██▀ ▄▄██▀
░█▄█░█▀▀░█▀█░█▀▄░█▀▀░█▀▄░░░█▀▀░█▀▀░█▀▄░█░█░█▀▀░█▀▄░░░█▀▄░█▀▀░█▀▀░
░█░█░█▀▀░█░█░█░█░█▀▀░█▀▄░░░▀▀█░█▀▀░█▀▄░▀▄▀░█▀▀░█▀▄░░░█▀▄░█░░░█▀▀░
░▀░▀░▀▀▀░▀░▀░▀▀░░▀▀▀░▀░▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░░░▀░▀░▀▀▀░▀▀▀░
```
## Mender Server 认证路径遍历导致远程代码执行 !
我发现并负责任地报告了 Mender Server 单文件 artifact 生成工作流中的一个严重漏洞。该问题最初只是用户可控的 `args.filename` 字段中的输入清理和路径遍历 bug,但我证明了该 bug 并未止步于任意文件写入。通过将目标对准 artifact 生成容器内由 worker 拥有的可执行文件,我将该问题升级为可靠的远程代码执行。
在实际操作中,拥有 artifact 生成权限的已认证攻击者可以覆盖 `create-artifact-worker` 内部的 `/usr/bin/mender-artifact`。随后,工作流在正常的 artifact 生成过程中调用了该二进制文件,从而导致攻击者可控的 payload 被执行。
这将一个路径遍历 / 任意覆盖 bug 转变成了 artifact 工作流中的后端代码执行问题。
- 本仓库仅用于教育和防御性安全研究。
- 请勿在您不拥有或未获得明确测试许可的系统上运行此内容。
## 受影响版本
- **存在漏洞:** Mender Server **v4.1.0**, **v4.0.1 及以下版本**
- **已修复:** Mender Server **v4.1.1** 和 **v4.0.2**
## 漏洞是什么?
该存在漏洞的工作流在单文件 artifact 生成流程中接受攻击者可控的输入,并且没有充分限制上传内容的写入位置。
我发现我可以控制 `args.filename` 并利用路径遍历将文件写到预期目标之外。我没有写入正常的 artifact 输入文件,而是将写入目标指向了 worker 容器内的 `/usr/bin/mender-artifact`。因为在存在漏洞的设置中,该二进制文件由 runtime 用户拥有,所以写入操作成功了。
随后,工作流在 artifact 构建过程中调用了 `mender-artifact`。由于我已经将该可执行文件替换为自己的 payload,worker 执行了攻击者可控的代码。
## 攻击者前置条件
攻击者需要:
- 有效的已认证 Mender 账户
- 访问 **单文件** artifact 生成工作流的权限
## 利用路径
从宏观层面来看,利用链的工作原理如下:
1. 我以普通租户用户身份进行认证。
2. 提交单文件 artifact 生成请求。
3. 提供一个遍历出预期路径并指向 `/usr/bin/mender-artifact` 的恶意值。
4. 以上传 payload 替代预期的文件内容。
5. worker 将我的 payload 写入目标路径。
6. 工作流随后在 artifact 生成期间调用 `mender-artifact`。
7. worker 执行了我的 payload,使我获得了在后端 worker 内部执行命令的能力。
这很重要,因为存在漏洞的写入目标不仅仅是任意文件。它是工作流立即信任并执行的一个二进制文件。
## 攻击者可以实现什么
成功的攻击者可以在共享的 artifact 生成 worker 内部执行任意命令。
由此产生的影响将扩展到单个请求之外:
- **持续性的 worker 损害:** 一次成功的覆盖可能会影响同一 worker 处理的后续作业
- **artifact pipeline 滥用:** 攻击者可以篡改 artifact 生成行为
- **机密信息暴露:** 攻击者可以访问敏感的工作流上下文,例如由后端作业处理的 token 或预签名 URL
- **内部服务暴露:** 一旦进入 worker 环境,攻击者就获得了在后端信任区内部的立足点
- **共享部署中的跨租户风险:** 如果 worker 基础设施和工作流消息传递在租户之间共享,一个租户被攻破可能会影响其他租户的 artifact 生成作业
简而言之,这不仅仅是一个文件写入 bug。它是位于软件交付路径中敏感后端组件内的一个代码执行 bug。
HackerOne 最终将该报告评估为 **严重** 并颁发了 **3,000 美元** 的赏金,这与验证期间所展示的实际影响相符。
## 技术根本原因
根本原因是单文件 artifact 生成路径中的信任边界失效。
工作流过度信任攻击者可控的路径输入,并将其传递到了后端处理链的深处。它允许受用户影响的文件名脱离其预期位置并触及敏感的文件系统目标。随后,worker 环境放大了这一失误,因为它暴露了可由 runtime 用户写入、且稍后会被工作流自身执行的可执行路径。
这种组合创建了一条干净的利用链:
**用户可控的路径输入 → 任意文件覆盖 → 覆盖受信任的可执行文件 → 后端 RCE**
## 参考
- [供应商安全公告:CVE-2026-49009 – Mender Server 输入清理不当](https://mender.io/blog/cve-2026-49009-cve-2026-33552-input-sanitization-and-access-control-issues-in-mender-server)
- [CVE.org 上的 CVE-2026-49009](https://www.cve.org/CVERecord?id=CVE-2026-49009)
- [Patch commit 484cc2a](https://github.com/mendersoftware/mender-server/commit/484cc2a13ad44d93cdf0f3c2ea9155b9bac4a969)
## 结论
CVE-2026-49009 表明,当受信任的工作流将攻击者可控的数据写入可执行路径时,看似狭窄的输入清理问题是如何演变成完整的 RCE 链的。
在存在漏洞的版本中,已认证的攻击者可以将单文件 artifact 生成功能转化为路径遍历、任意覆盖和远程代码执行链。已修复的版本阻止了该路径,并将工作流恢复到其预期的行为。
标签:Cutter, 请求拦截, 逆向工具