文章总结: CherryStudio客户端存在CVE-2025-61929命令执行漏洞,攻击者可通过构造cherrystudio伪协议URL,利用mcp/install路径传入base64编码的恶意JSON数据,当用户点击链接且isActive字段为true时触发命令执行。漏洞源于应用对伪协议参数处理不当,通过IPC通道最终调用StdioClientTransport实例执行命令。建议用户避免点击可疑链接,开发者应加强对伪协议参数的验证和过滤。 综合评分: 89 文章分类: 漏洞分析,漏洞POC,渗透测试,WEB安全,应用安全
漏洞复现 | 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)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论