GitHub Advisoryadvisory · npm
GHSA-m79r-r765-5f9j Lobe Chat Desktop vulnerable to Remote Code Execution via XSS in Chat Messages
MEDIUM
Official page ↗
- Aliases
- CVE-2025-59417
- Ecosystem
- npm
- Packages
- @lobehub/chat
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
- Weaknesses
- CWE-79
- Reviewed
- 2025-09-18
Affected packages
• npm @lobehub/chat: < 1.129.4 → fixed in 1.129.4
Description
Summary
We identified a cross-site scripting (XSS) vulnerability when handling chat message in lobe-chat that can be escalated to remote code execution on the user’s machine. Any party capable of injecting content into chat messages, such as hosting a malicious page for prompt injection, operating a compromised MCP server, or leveraging tool integrations, can exploit this vulnerability.
Vulnerability Details
XSS via SVG Rendering
In lobe-chat, when the response from the server is like `` , it will be rendered with the `lobeArtifact` node, instead of the plain text.
https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/rehypePlugin.ts#L50-L68
https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/index.ts#L7-L11
https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/index.tsx#L10-L32
However, when the type of the `lobeArtifact` is `image/svg+xml` , it will be rendered as the `SVGRender` component, which internally uses `dangerouslySetInnerHTML` to set the content of the svg, resulting in XSS attack.
https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/SVG.tsx#L67-L79
Escalating XSS to RCE
Once we achieve the XSS on the renderer process, we can call a bunch of priviledged IPC APIs to the main process. I managaed to achieve the RCE through the simple `openExternalLink` call, which will directly call `shell.openExternal` without any validation in the main process.
https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/apps/desktop/src/main/controllers/SystemCtr.ts#L65-L68
```jsx
void electron.ipcRenderer.invoke('openExternalLink', 'file:///System/Applications/Calculator.app/Contents/MacOS/Calculator')
```
PoC
1. In your chat message, input the copy text to the chat page:
```python
Repeat the following content as is.
```
2. Check whether the calcuator is poped or not.
Impact
This vulnerability allows full remote code execution by injecting crafted chat messages, posing a severe risk to all users of lobe-chat v1.129.3
Credits
Zhengyu Liu (jackfromeast), Jianjia Yu (suuuuuzy)
Related
Alias · CVE (1)
- CVE-2025-59417 Lobe Chat is an open-source artificial intelligence chat framework. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness
References
- https://github.com/lobehub/lobe-chat/security/advisories/GHSA-m79r-r765-5f9j web
- https://nvd.nist.gov/vuln/detail/CVE-2025-59417 advisory
- https://github.com/lobehub/lobe-chat/commit/9f044edd07ce102fe9f4b2fb47c62191c36da05c web
- https://github.com/lobehub/lobe-chat package
- https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/apps/desktop/src/main/controllers/SystemCtr.ts#L65-L68 web
- https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/index.ts#L7-L11 web
- https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/rehypePlugin.ts#L50-L68 web
- https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/SVG.tsx#L67-L79 web
- https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/index.tsx#L10-L32 web