UFO-Vuln 💥
未经身份验证的移动端 MCP 访问可能暴露 Android 屏幕数据,并通过 ADB 提供远程 UI 控制能力。
本仓库仅用于授权的安全研究、漏洞验证、防御性测试以及受控实验室环境。
所包含的检测工具旨在执行非破坏性的身份验证边界检查。
它不会:
CVE: CVE-2026-73296
产品: Microsoft UFO
组件: 移动端 MCP HTTP 服务器
严重性: 严重
CVSS v3.1: 9.4
受影响版本: <= v3.0.7
官方已修补版本: 截至本文档编写时,Microsoft UFO 公告中未列出任何已修补版本。
CWE:
该漏洞影响 UFO 的移动端 MCP 数据收集和操作服务器,当它们通过网络暴露且未进行适当身份验证时即会受到影响。
官方公告将易受攻击的实现标识为:```text ufo/client/mcp/http_servers/mobile_mcp_server.py
受影响的服务暴露了可交互式HTTP MCP接口,这些接口能够与通过ADB连接的Android设备进行交互。
如果这些服务可远程访问且未强制实施身份验证,则未经身份验证的网络客户端可能能够访问敏感的设备信息,并调用Android UI控制功能。
---
# 🎯 执行摘要
Microsoft UFO是一个AI智能体框架,专为智能自动化和多设备编排而设计。
其Mobile MCP功能提供了用于通过ADB与Android设备交互的MCP服务器。
易受攻击的配置暴露了两个重要的网络服务:
| 服务 | 端口 | 功能 |
| -------------------------- | -----: | --------------------------------- |
| 移动数据采集MCP | `8020` | Android信息和屏幕数据 |
| 移动操作MCP | `8021` | Android交互与控制 |
在受影响版本中,Mobile MCP服务器可能在未配置身份验证提供程序或请求级授权检查的情况下被创建。
因此:```text
Remote Client
│
│ HTTP / MCP
▼
┌──────────────────────┐
│ Mobile MCP Server │
│ │
│ Authentication: │
└──────────┬───────────┘
│
▼
ADB Interface
│
▼
Android Device
远程网络客户端与基于ADB的功能之间的安全边界因此保护不足。
9.4 CRITICAL
向量:
向量:```py
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
该漏洞之所以特别严重,是因为利用它本身并不需要:
官方公告指出,能够访问暴露服务的网络客户端可以初始化 MCP 会话并调用其工具,而无需出示任何凭据。
根据微软官方 UFO 安全公告:```py Affected: <= v3.0.7
Patched: None listed
官方仓库目前将 `3.0.7` 列为发布版本。
> **重要提示:** 除非微软发布了相关信息,否则不要声称 `3.0.8` 是官方修复版本。官方安全公告目前未列出任何已修复版本。
---
# 🏗️ 易受攻击的架构
易受攻击的功能实现于:```py
ufo/client/mcp/http_servers/mobile_mcp_server.py
官方公告中识别出的重要功能包括:
create_mobile_data_collection_server capture_screenshot get_ui_tree get_device_info get_mobile_app_target_info get_app_window_controls_target_info
### 移动端操作```py
create_mobile_action_server
tap
swipe
type_text
launch_app
press_key
click_control
两个HTTP服务与以下内容相关联:```py TCP/8020 TCP/8021
该公告特别将这些服务标识为移动数据收集和操作 MCP 服务器。
---
# 🔬 根本原因
根本的安全问题在于:```py
Powerful functionality
+
Network exposure
+
Missing authentication
=
Unauthorized access
在受影响的实现中,Mobile MCP FastMCP 服务器在构建时未配置认证提供程序或等效的请求级授权强制机制。
概念上:```python mcp = FastMCP( "Mobile MCP Server", host=host, port=port, )
问题不仅仅在于MCP的存在。
问题在于,一个可网络访问的接口暴露了安全敏感的操作,却未要求调用方建立经过认证的身份。
---
# 🔗 攻击流程
简化的攻击链如下所示:```py
┌───────────────────┐
│ Unauthenticated │
│ Network Client │
└─────────┬─────────┘
│
│ HTTP
▼
┌─────────────────────────┐
│ Mobile MCP :8020/:8021 │
│ │
│ Authentication missing │
└───────────┬─────────────┘
│
│ MCP Tool
▼
┌─────────────────────────┐
│ Mobile MCP Tool │
└───────────┬─────────────┘
│
│ ADB operation
▼
┌─────────────────────────┐
│ Android Device / ADB │
└─────────────────────────┘
The important security transition is:
重要的安全过渡是:```py Unauthenticated network request ↓ MCP functionality ↓ ADB-backed action ↓ Android device
---
# 📡 暴露的服务
## 端口 8020 — 数据收集
数据收集服务器可以暴露与以下内容相关的功能:```py
capture_screenshot
get_ui_tree
get_device_info
get_mobile_app_target_info
get_app_window_controls_target_info
可能暴露的信息包括:
这会造成严重的机密性风险。
操作服务器暴露与以下内容相关的功能:```text tap swipe type_text launch_app press_key click_control
这些操作可以为远程调用者提供Android UI交互能力。
根据设备状态和可访问的应用程序,这可能允许:```text
Remote input
↓
UI navigation
↓
Application interaction
↓
Device-state modification
官方公告特别将这些能力描述为可远程注入的 Android UI 操作。
未经授权访问屏幕和 UI 信息可能潜在地暴露:
具体影响取决于通过所连接的 ADB 环境可访问的 Android 设备和应用程序。
未经授权的移动操作可能允许攻击者:```text Tap Swipe Type text Press keys Launch applications Click UI controls
这可能潜在地修改应用状态或与设备上运行的工作流进行交互。
---
# 💥 可用性影响
重复的自动化操作可能导致:
* 中断自动化
* 切换应用程序
* 导航离开工作流
* 触发意外的UI操作
* 干扰测试环境
* 中断Android自动化会话
CVSS评估将**可用性影响**评为**低**,而机密性和完整性被评为**高**。
---
# 🧪 安全检测
此仓库包含:```text
cve-2026-73296.py
该检查器被有意设计为一种非破坏性安全评估工具。
它检查:```text TCP reachability ↓ HTTP response ↓ Authentication boundary ↓ SAFE / VULNERABLE / UNKNOWN
它**不会**调用 Mobile MCP 工具。
---
# 🟢 安全
`SAFE` 结果表示被测试的 HTTP 端点返回了身份验证/授权屏障,例如:```text
HTTP 401
HTTP 403
示例:
# 使用默认设置运行
python3 tool.py
# 指定目标
python3 tool.py --target example.com
``````text
[SAFE] Port 8020: authentication/authorization
barrier detected
VULNERABLE 结果表示被测试的 HTTP 端点成功响应,且未呈现身份验证挑战。
示例:```text [VULNERABLE] Port 8021: HTTP endpoint responded without an authentication challenge
此结果应视为**需要确认的潜在暴露**。
---
# 🟡 未知
`UNKNOWN`(未知)结果表示检查器无法可靠地确定认证状态。
示例:```text
TCP unreachable
TLS error
HTTP timeout
Unexpected HTTP response
Redirect
UNKNOWN 不应被解释为安全或易受攻击。
此检查器有意不声称能够证明可利用性。
绿色结果意味着:
在测试的 HTTP 边界上观察到了身份验证保护。
它并不在数学上证明整个 UFO 部署是安全的。
同样,红色结果表示:
测试的端点响应时未要求身份验证。
它应与以下内容相关联:
克隆仓库:```bash git clone https://github.com/0xBlackash/CVE-2026-73296.git cd CVE-2026-73296
安装依赖:```bash
python3 -m pip install requests
语法检查:```bash python3 -m py_compile cve-2026-73296.py
对已授权的测试系统运行:```bash
python3 cve-2026-73296.py 127.0.0.1
示例实验室目标:```bash python3 cve-2026-73296.py 192.168.56.10
对于使用实验室/自签名证书的HTTPS:```bash
python3 cve-2026-73296.py https://192.168.56.10 --no-verify-tls
════════════════════════════════════════════════════════ SECURITY ASSESSMENT ────────────────────────────────────────────────────────
SAFE : 2 VULNERABLE : 0 UNKNOWN : 0
✓ AUTHENTICATION CHECK PASSED
### 潜在暴露风险```py
════════════════════════════════════════════════════════
SECURITY ASSESSMENT
────────────────────────────────────────────────────────
SAFE : 0
VULNERABLE : 2
UNKNOWN : 0
⚠ POTENTIAL CVE-2026-73296 EXPOSURE
→ TCP/8020 responded without an authentication challenge.
→ TCP/8021 responded without an authentication challenge.
该漏洞可以理解为一种源到汇的安全失败:```py SOURCE │ │ Unauthenticated network request ▼ MCP HTTP Server │ │ Missing authentication/authorization ▼ MCP Tool │ ▼ ADB-backed operation │ ▼ ANDROID DEVICE
预期的安全边界应为:```py
Network Request
│
▼
Authentication
│
├──── INVALID ────► REJECT
│
▼
Authorization
│
├──── DENIED ─────► REJECT
│
▼
MCP Tool
│
▼
ADB
主要修复措施是在 Mobile MCP HTTP 传输边界强制实施身份验证。
推荐的安全架构:```py
┌──────────────────┐
│ Authorized MCP │
│ Client │
└────────┬─────────┘
│
Bearer Token
│
▼
┌──────────────────┐
│ Authentication │
│ Middleware │
└────────┬─────────┘
│
Authorized?
/
NO YES
│ │
▼ ▼
REJECT MCP Tool
│
▼
ADB
# 🔑 API 密钥保护
官方公告建议采用基于以下方式设计的身份验证方案:```py
UFO_MCP_API_KEY
安全模型应确保:
避免暴露:```py 0.0.0.0:8020 0.0.0.0:8021
直接连接到不受信任的网络。
建议改为:```py
127.0.0.1
仅限本地部署。
对于合法的远程访问,请考虑:```py Client │ ▼ TLS / Private Tunnel │ ▼ Authenticated Reverse Proxy │ ▼ UFO MCP │ ▼ ADB
可能的安全控制措施包括:
* TLS
* 经过身份验证的反向代理
* VPN
* 私有网络
* SSH 隧道
* 网络 ACL
* 防火墙限制
* 强 API 凭据
---
# 🧪 回归测试
一套完善的安全回归测试套件应验证:
### 测试 1 — 无凭据```py
Request
↓
No Authorization header
↓
REJECT
↓
ADB not reached
pip install pycryptodome
git clone https://github.com/Legrandin/pycryptodome.git
cd pycryptodome
python setup.py install
conda install -c conda-forge pycryptodome
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(data)
from Crypto.Cipher import AES
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
完整的文档可在 pycryptodome.readthedocs.io 获取。
python -m unittest discover -s tests
PyCryptodome 在 BSD 许可证下分发。有关详细信息,请参阅 LICENSE.rst 文件。```py PASS
### 测试 2 — 无效凭据```py
Bearer: invalid-token
↓
REJECT
↓
ADB not reached
# 克隆仓库
git clone https://github.com/yourusername/yourproject.git
# 进入项目目录
cd yourproject
# 安装依赖
pip install -r requirements.txt
python main.py --help
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。```py PASS
### 测试 3 — 有效凭据```py
Bearer: valid-token
↓
ACCEPT
↓
MCP Tool
↓
ADB
pip install pywhisker
git clone https://github.com/ShutdownRepo/pywhisker.git
cd pywhisker
python setup.py install
pywhisker.py [-h] [-v] -t TARGET -u USERNAME [-p PASSWORD] [-d DOMAIN]
[-l LDAPS] [--dc-ip DC_IP] [-k] [-o OPERATION] [-n NEW_PWD]
[-s TARGET_SAM] [-a ADD_ATTRIBUTE] [-r REMOVE_ATTRIBUTE]
[--use-ldaps] [--no-pass]
pywhisker.py -t 192.168.1.10 -u john -p 'P@ssw0rd' -d corp.local -o list
pywhisker.py -t 192.168.1.10 -u john -p 'P@ssw0rd' -d corp.local -o add -n 'NewP@ssw0rd'
pywhisker.py -t 192.168.1.10 -u john -p 'P@ssw0rd' -d corp.local -o remove -r 'msDS-KeyCredentialLink'
pywhisker.py -t 192.168.1.10 -u john -p 'P@ssw0rd' -d corp.local -o clear
该工具利用 Active Directory 中的 msDS-KeyCredentialLink 属性,该属性存储与用户或计算机账户关联的密钥凭据。通过向该属性添加恶意密钥凭据,攻击者可以模拟目标账户并获取其权限。
该技术被称为 Shadow Credentials,已在多个安全研究论文中记录,并已被多个攻击工具采用。
此工具仅用于教育目的和安全测试。未经授权使用此工具可能违反法律。使用者需自行承担使用风险,并对因使用此工具造成的任何损害负责。```py PASS
### 测试 4 — 缺少服务器密钥```py
UFO_MCP_API_KEY = missing
预期输出:```py Server fails closed
### 测试 5 — 凭据占位符
未解析的环境变量不应意外成为身份验证凭据。
预期:```py
Client initialization fails
仅靠身份验证不应被视为足够。
建议的控制措施:
---```py Internet │ X │ Firewall/VPN │ ▼ TLS / Proxy │ ▼ API Authentication │ ▼ Authorization │ ▼ MCP Server │ ▼ ADB │ ▼ Android Device
---
# 🔎 检测与监控
安全团队应监控以下异常访问:```text
TCP/8020
TCP/8021
查找以下内容:
有用的网络遥测数据:```text source_ip destination_ip destination_port timestamp HTTP_method HTTP_status user_agent authorization_present request_frequency
---
# 📋 事件响应检查清单
如果发现暴露的易受攻击实例:
### 1. 限制网络访问
立即限制对以下内容的访问:```text
8020
8021
如果不需要该服务,请断开关联的 ADB 设备。
查找以下内容:```text Unknown source IPs Unexpected MCP sessions Unexpected device interactions Unexpected application launches
### 4. 轮换凭据
如果认证密钥可能已泄露:```text
Generate a new high-entropy API key
检查:
遵循最新的 Microsoft UFO 安全公告和发布信息。
在修复后再次运行安全检查器。
本项目遵循防御性漏洞验证方法论:```py
---
# 📂 仓库结构
推荐的项目结构:```py
CVE-2026-73296/
│
├── README.md
│
├── poc/
│ └── cve-2026-73296.py
│
├── docs/
│ ├── technical-analysis.md
│ ├── remediation.md
│ └── detection.md
│
├── screenshots/
│ ├── safe.png
│ └── vulnerable.png
│
├── tests/
│ └── README.md
│
├── LICENSE
└── .gitignore
当 MCP 服务器通过网络暴露强大操作时,不应将其视为无害的本地工具。
连接到 ADB 的 MCP 端点可能成为以下两者之间的桥梁:```text Network ↓ Agent protocol ↓ ADB ↓ Android
安全要求因此需要覆盖整个链条。
---
## 3. 本地主机默认值很重要
绑定到以下地址的服务:```text
127.0.0.1
具有根本不同的暴露特征:```text 0.0.0.0
网络绑定因此应被视为一种安全配置。
---
## 4. 认证必须发生在数据接收端之前
关键不变式为:```text
UNTRUSTED REQUEST
↓
AUTHENTICATION
↓
AUTHORIZATION
↓
MCP TOOL
↓
ADB
绝不:```text UNTRUSTED REQUEST ↓ MCP TOOL ↓ ADB
---
# 📊 漏洞摘要
| 属性 | 值 |
| ------------------------ | ---------------------- |
| CVE | CVE-2026-73296 |
| 产品 | Microsoft UFO |
| 组件 | Mobile MCP |
| 严重性 | 严重 |
| CVSS | 9.4 |
| 攻击向量 | 网络 |
| 复杂度 | 低 |
| 权限要求 | 无 |
| 用户交互 | 无 |
| 机密性影响 | 高 |
| 完整性影响 | 高 |
| 可用性影响 | 低 |
| CWE-306 | 缺少身份验证 |
| CWE-862 | 缺少授权 |
| Data MCP | TCP/8020 |
| Action MCP | TCP/8021 |
| 受影响版本 | ≤ v3.0.7 |
| 官方补丁版本 | 无 |
---
# 🏁 结论
CVE-2026-73296 展示了当强大的代理自动化接口在没有适当身份验证和授权边界的情况下暴露于网络时所产生的安全风险。
易受攻击的 Mobile MCP 架构创建了一条从以下位置出发的攻击路径:```text
Unauthenticated Network Client
↓
MCP Server
↓
MCP Tools
↓
ADB
↓
Android Device
由此产生的影响可能包括机密性损失(通过屏幕/UI/设备信息泄露)和完整性影响(通过远程 Android UI 交互)。
最重要的防御性控制措施包括:```text Authentication Authorization TLS Network isolation Least privilege Secure defaults Continuous monitoring Regression testing
---
# 📚 参考资料
* Microsoft UFO 安全公告 — CVE-2026-73296 / GHSA-24fq-m9rr-g3mm
* Microsoft UFO 仓库
* Microsoft UFO 发布历史
* CWE-306 — 关键功能缺少身份验证
* CWE-862 — 缺少授权
* CVSS v3.1
Microsoft UFO 官方仓库:
https://github.com/microsoft/UFO
官方安全公告:
https://github.com/microsoft/UFO/security/advisories/GHSA-24fq-m9rr-g3mm
---
# ⚖️ 负责任使用
本项目仅供以下用途:
* 经授权的渗透测试
* 安全研究
* CTF 环境
* 漏洞验证
* 防御性工程
* 安全教育
* 检测开发
未经明确授权,请勿对系统或设备进行测试。
安全检查器有意避免针对真实 Android 设备执行存在漏洞的 Mobile MCP 功能。
---
<p align="center">
**CVE-2026-73296 • Microsoft UFO • Mobile MCP 安全研究**
</p>
| 指标 | 值 |
|---|
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 无 |
| 用户交互 | 无 |
| 影响范围 | 不变 |
| 机密性 | 高 |
| 完整性 | 高 |
| 可用性 | 低 |
| 参数 | 描述 |
|---|
-t TARGET, --target TARGET | 目标计算机(IP 或主机名) |
-u USERNAME, --username USERNAME | 用于认证的用户名 |
-p PASSWORD, --password PASSWORD | 用于认证的密码 |
-d DOMAIN, --domain DOMAIN | 目标域 |
-l LDAPS, --ldaps LDAPS | 使用 LDAPS(默认:False) |
--dc-ip DC_IP | 域控制器的 IP 地址 |
-k, --kerberos | 使用 Kerberos 认证 |
-o OPERATION, --operation OPERATION | 要执行的操作(add、remove、list、clear) |
-n NEW_PWD, --new-pwd NEW_PWD | 新密码(用于 add 操作) |
-s TARGET_SAM, --target-sam TARGET_SAM | 目标 SAM 账户名 |
-a ADD_ATTRIBUTE, --add-attribute ADD_ATTRIBUTE | 要添加的属性 |
-r REMOVE_ATTRIBUTE, --remove-attribute REMOVE_ATTRIBUTE | 要移除的属性 |
--use-ldaps | 使用 LDAPS 协议 |
--no-pass | 不提示输入密码 |