漏洞复现|cherrystudio客户端Oneclick命令执行漏洞(CVE-2025-61929)

admin 2025-12-22 03:47:46 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CherryStudio客户端存在CVE-2025-61929命令执行漏洞,攻击者可通过构造cherrystudio伪协议URL,利用mcp/install路径传入base64编码的恶意JSON数据,当用户点击链接且isActive字段为true时触发命令执行。漏洞源于应用对伪协议参数处理不当,通过IPC通道最终调用StdioClientTransport实例执行命令。建议用户避免点击可疑链接,开发者应加强对伪协议参数的验证和过滤。 综合评分: 89 文章分类: 漏洞分析,漏洞POC,渗透测试,WEB安全,应用安全


cover_image

漏洞复现 | cherry studio客户端One click命令执行漏洞(CVE-2025-61929)

原创

俺不是鸡哥

渗透结束-非常安全

2025年10月17日 19:59 北京

前言

这里简单记录一下Electron客户端One click导致命令执行漏洞复现过程,如有写的不正确的地方欢迎各位师傅指正。

参考

提交人:h3rrr

CVE编号:CVE-2025-61929

项目star量:34.3k

开发框架:Electron(跨平台桌面应用开发框架)

参考地址:

https://github.com/CherryHQ/cherry-studio/security/advisories/GHSA-hh6w-rmjc-26f6

由于cherry-studio应用允许通过伪协议的方式传入恶意参数,来远程安装mcp导致。

复现

查看文章POC可知

伪协议:cherrystudio

路径:/mcp/install

参数:servers

参数内容:base64编码的json数据

cherrystudio://mcp/install?servers=eyAgCiAgImlkIjogIjY2NiIsICAKICAibmFtZSI6ICJqaWdlNjY2IiwgIAogICJ0eXBlIjogInN0ZGlvIiwgIAogICJpc0FjdGl2ZSI6IHRydWUsICAKICAiY29tbWFuZCI6ICJjYWxjLmV4ZSIsICAKICAiYXJncyI6IFtdLCAgCiAgInByb3ZpZGVyIjogImppZ2U2NjYiICAKfQ==

使用浏览器启动应用即可触发

流程

下载源码到本地,根据文章描述可知

src/main/services/ProtocolClient.ts

src/main/services/urlschema/mcp-install.ts

查看ProtocolClient.ts文件,首先定义常量也就是cherrystudio名称的伪协议,并通过registerProtocolClient函数注册协议

handleProtocolUrl函数用于当协议被请求时处理URL链接,传入不同的名称会被分发到不同的函数处理

主要功能则是自定义cherrystudio协议,可使得外部通过该协议启动应用,比如上面复现时使用浏览器启动应用触发漏洞

当传入mcp时会进handleMcpProtocolUrl函数,也就是mcp-install.ts文件的handleMcpProtocolUrl函数

该函数主要处理/install路径的请求,获取servers字段的内容

存在内容则对传入的内容进行base64解码,然后判断条件调用installMCPServers或installMCPServer函数

查看installMCPServers函数,本质上还是循环调用installMCPServer函数

查看installMCPServer函数,获取应用的主窗口,若窗口存在且未被销毁,通过IPC通道IpcChannel.Mcp_AddServer向渲染进程发送信息。

IpcChannel.ts文件

全局搜索Mcp_AddServer后,锁定useMCPServers.ts文件,这里会将信息存储到全局状态中,来达到全应用的组件都可以获取的效果,最后添加导航服务

怎么查看全局状态呢?

搜索后发现index.ts文件将store挂载出来了

利用快捷键打开调试工具输入命令,查看全局状态下mcp配置的内容

快捷键:Ctrl+Shift+i

命令:window.store.getState().mcp.servers;

那么命令是怎么执行的呢?

通过操作界面,发现当isActive字段为真时,也就是这个按钮必须是打开的情况下才会调用命令执行

通过搜索发现McpSettings.tsx的onToggleActive方法,也就是详情页

McpServersList.tsx的handleToggleActive方法,也就是列表页

都会调用updateMCPServer更新本地缓存的服务器信息

再利用window.api.mcp通过Electron IPC通信向主进程发送IPC事件

接着主进程会调用MCPService.ts文件中对应的方法,并调用initClient初始化客户端

…省略

跳过上面的内容,直接来到重点,其中transportOptions也就传入的命令+参数+环境变量,然后创建StdioClientTransport实例并返回执行内容

通过搜索发现StdioClientTransport是由MCP SDK提供

@modelcontextprotocol/sdk/client/stdio.js

查询后得知用于通过标准输入输出流(stdin/stdout)与MCP服务器进行通信,参数command和args则是要执行的命令和参数

参考:https://article.juejin.cn/post/7479050041422250011

示例:

完事

最后


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:渗透结束-非常安全 俺不是鸡哥《漏洞复现 | cherry studio客户端One click命令执行漏洞(CVE-2025-61929)》

评论:0   参与:  4