Summary
In the packages/stage-ui/src/components/MarkdownRenderer.vue path, the Markdown content is processed using the useMarkdown composable, and the processed HTML is rendered directly into the DOM using v-html.
apps/stage-web/src/pages/settings/airi-card/components/CardDetailDialog.vue
An attacker creates a card file containing malicious HTML/JavaScript, then simply processes it using the highlightTagToHtml function (which simply replaces template tags without HTML escaping), and then directly renders it using v-html, leading to XSS.
The project also exposes the Tauri API, which can be called from the frontend.
The MCP plugin exposes a command execution interface function in crates/tauri-plugin-mcp/src/lib.rs.
This allows arbitrary command execution. connect_server directly passes the user-supplied command and args parameters to Command::new(command).args(args) without any input validation or whitelisting.
Thus, the previous XSS exploit could achieve command execution through this interface.
Details
The content of PoC is:
<iframe src="javascript:window.__TAURI_INTERNALS__.invoke('plugin:mcp|connect_server', {command: 'calc.exe', args: []})"></iframe>
You can trigger this command by uploading a card or directly creating a character card.
Once the character card is created, click it to execute the command.

Impact
Causes command execution
Summary
In the
packages/stage-ui/src/components/MarkdownRenderer.vuepath, the Markdown content is processed using the useMarkdown composable, and the processed HTML is rendered directly into the DOM using v-html.apps/stage-web/src/pages/settings/airi-card/components/CardDetailDialog.vueAn attacker creates a card file containing malicious HTML/JavaScript, then simply processes it using the highlightTagToHtml function (which simply replaces template tags without HTML escaping), and then directly renders it using v-html, leading to XSS.
The project also exposes the Tauri API, which can be called from the frontend.
The MCP plugin exposes a command execution interface function in
crates/tauri-plugin-mcp/src/lib.rs.This allows arbitrary command execution.
connect_serverdirectly passes the user-suppliedcommandandargsparameters toCommand::new(command).args(args)without any input validation or whitelisting.Thus, the previous XSS exploit could achieve command execution through this interface.
Details
The content of PoC is:
You can trigger this command by uploading a card or directly creating a character card.
Once the character card is created, click it to execute the command.

Impact
Causes command execution