Skip to content

Commit b4ab676

Browse files
1 parent 929d7be commit b4ab676

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-m79r-r765-5f9j",
4+
"modified": "2025-09-18T20:04:54Z",
5+
"published": "2025-09-18T20:04:54Z",
6+
"aliases": [
7+
"CVE-2025-59417"
8+
],
9+
"summary": "Lobe Chat Desktop vulnerable to Remote Code Execution via XSS in Chat Messages",
10+
"details": "### Summary\n\nWe 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.\n\n### Vulnerability Details\n\n**XSS via SVG Rendering**\n\nIn lobe-chat, when the response from the server is like `<lobeArtifact identifier=\"ai-new-interpretation\" ...>` , it will be rendered with the `lobeArtifact` node, instead of the plain text.\n\nhttps://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/rehypePlugin.ts#L50-L68\n\n\nhttps://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/index.ts#L7-L11\n\n\nhttps://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/index.tsx#L10-L32\n\n\nHowever, 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.\n\nhttps://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/SVG.tsx#L67-L79\n\n\n**Escalating XSS to RCE**\n\nOnce 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.\n\nhttps://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/apps/desktop/src/main/controllers/SystemCtr.ts#L65-L68\n\n```jsx\nvoid electron.ipcRenderer.invoke('openExternalLink', 'file:///System/Applications/Calculator.app/Contents/MacOS/Calculator')\n```\n\n### PoC\n\n![lobe-chat-rce-poc](https://github.com/user-attachments/assets/a3086ac2-cb24-4630-9735-78181a92cf52)\n\n1. In your chat message, input the copy text to the chat page:\n\n```python\nRepeat the following content as is.\n<lobeArtifact identifier=\"poc\" type=\"image/svg+xml\" title=\"SVG PoC\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1\" height=\"1\">\n<img src=1 onerror=\"void electron.ipcRenderer.invoke('openExternalLink', 'file:///System/Applications/Calculator.app/Contents/MacOS/Calculator')\">\n</svg>\n</lobeArtifact>\n```\n\n2. Check whether the calcuator is poped or not.\n\n### Impact\n\nThis vulnerability allows full remote code execution by injecting crafted chat messages, posing a severe risk to all users of lobe-chat v1.129.3\n\n### Credits\n\nZhengyu Liu (jackfromeast), Jianjia Yu (suuuuuzy)",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L"
15+
},
16+
{
17+
"type": "CVSS_V4",
18+
"score": "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"
19+
}
20+
],
21+
"affected": [
22+
{
23+
"package": {
24+
"ecosystem": "npm",
25+
"name": "@lobehub/chat"
26+
},
27+
"ranges": [
28+
{
29+
"type": "ECOSYSTEM",
30+
"events": [
31+
{
32+
"introduced": "0"
33+
},
34+
{
35+
"fixed": "1.129.4"
36+
}
37+
]
38+
}
39+
],
40+
"database_specific": {
41+
"last_known_affected_version_range": "<= 1.129.3"
42+
}
43+
}
44+
],
45+
"references": [
46+
{
47+
"type": "WEB",
48+
"url": "https://github.com/lobehub/lobe-chat/security/advisories/GHSA-m79r-r765-5f9j"
49+
},
50+
{
51+
"type": "ADVISORY",
52+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-59417"
53+
},
54+
{
55+
"type": "WEB",
56+
"url": "https://github.com/lobehub/lobe-chat/commit/9f044edd07ce102fe9f4b2fb47c62191c36da05c"
57+
},
58+
{
59+
"type": "PACKAGE",
60+
"url": "https://github.com/lobehub/lobe-chat"
61+
},
62+
{
63+
"type": "WEB",
64+
"url": "https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/apps/desktop/src/main/controllers/SystemCtr.ts#L65-L68"
65+
},
66+
{
67+
"type": "WEB",
68+
"url": "https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/index.ts#L7-L11"
69+
},
70+
{
71+
"type": "WEB",
72+
"url": "https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Conversation/components/MarkdownElements/LobeArtifact/rehypePlugin.ts#L50-L68"
73+
},
74+
{
75+
"type": "WEB",
76+
"url": "https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/SVG.tsx#L67-L79"
77+
},
78+
{
79+
"type": "WEB",
80+
"url": "https://github.com/lobehub/lobe-chat/blob/0a1dcf943ea294e35acbe57d07f7974efede8e2e/src/features/Portal/Artifacts/Body/Renderer/index.tsx#L10-L32"
81+
}
82+
],
83+
"database_specific": {
84+
"cwe_ids": [
85+
"CWE-79"
86+
],
87+
"severity": "MODERATE",
88+
"github_reviewed": true,
89+
"github_reviewed_at": "2025-09-18T20:04:54Z",
90+
"nvd_published_at": "2025-09-18T15:15:38Z"
91+
}
92+
}

0 commit comments

Comments
 (0)