
CVE-2026-9806 is a Stored Cross-Site Scripting (Stored XSS) vulnerability affecting CTI Transmute versions prior to the patched release.
CVE-2026-9806 es una vulnerabilidad de Cross-Site Scripting almacenado (Stored XSS) que afecta a las versiones de CTI Transmute anteriores a la versión parcheada. El fallo existe en el panel de notificaciones, donde los mensajes de notificación que contienen nombres de conversión controlados por el usuario se renderizan en el desplegable de la campana de notificaciones mediante innerHTML sin una sanitización adecuada. Si un atacante puede crear o influir en un nombre de conversión que aparece en una notificación, se puede ejecutar JavaScript arbitrario en el navegador de un usuario autenticado cuando abre el panel de notificaciones.
El panel de notificaciones construye las entradas de notificación mediante innerHTML. Los mensajes de notificación incluyen nombres de conversión, que están controlados por el usuario. Debido a que estos valores se insertan directamente en el DOM sin codificación HTML ni sanitización, cualquier HTML o JavaScript contenido en un nombre de conversión es interpretado por el navegador.
Conceptualmente:
Attacker creates or influences a convert name
│
▼
Convert name stored in notification
│
▼
User opens notification panel
│
▼
Notification rendered using innerHTML
│
▼
Browser parses HTML
│
▼
Embedded JavaScript executes
La vulnerabilidad se debe a que la entrada no confiable se renderiza como HTML en lugar de como texto sin formato.
Attacker
│
▼
Creates or modifies a malicious convert name
│
▼
Notification containing the convert name is generated
│
▼
Victim opens notification panel
│
▼
Notification dropdown inserts message using innerHTML
│
▼
Browser executes malicious JavaScript
│
▼
Actions performed within victim's authenticated session
Supongamos que se crea una conversión con un nombre especialmente diseñado que contiene HTML.
Más tarde, otro usuario autenticado recibe una notificación que hace referencia a esa conversión. Cuando el usuario hace clic en la campana de notificaciones, la aplicación inserta el mensaje de notificación en la página mediante innerHTML.
En lugar de mostrar el nombre de conversión como texto, el navegador lo interpreta como HTML y ejecuta el JavaScript incrustado, lo que permite al atacante realizar acciones dentro de la sesión del navegador de la víctima.
Un usuario legítimo crea una conversión llamada:
Monthly Sales Report
La aplicación la almacena en la base de datos.
Un atacante, en cambio, introduce un nombre que contiene HTML:
Quarterly Report <b>Important</b>
La aplicación almacena:
Quarterly Report <b>Important</b>
Más tarde, otro usuario recibe una notificación como la siguiente:
Convert "Quarterly Report <b>Important</b>" completed successfully.
Si la aplicación hace lo siguiente:
notification.innerHTML = response.message;
el navegador renderiza:
Conversión Quarterly Report Important completada correctamente.
porque se interpreta como HTML.
Si la aplicación, en cambio, utiliza:
notification.textContent = response.message;
el navegador muestra el texto literal:
Convert "Quarterly Report <b>Important</b>" completed successfully.
No se interpreta ningún HTML.
Una explotación exitosa podría permitir a un atacante:
| Métrica | Puntuación |
|---|
| CVSS v4.0 (CNA) | 6.3 (Media) |
El NVD aún no ha asignado su propia evaluación CVSS.
Nota: El proveedor no ha publicado el código fuente vulnerable exacto. Lo siguiente demuestra el patrón vulnerable.
// User-controlled convert name
const message = response.notificationMessage;
// Unsafe rendering
notificationDropdown.innerHTML += `
<div class="notification">
${message}
</div>
`;
innerHTML trata el mensaje de notificación como HTML. Si el mensaje contiene HTML o JavaScript proveniente de un nombre de conversión malicioso, el navegador lo analiza y lo ejecuta.
const notification = document.createElement("div");
notification.className = "notification";
// Safe rendering
notification.textContent = response.notificationMessage;
notificationDropdown.appendChild(notification);
El uso de textContent garantiza que el mensaje de notificación se renderice como texto sin formato en lugar de como HTML. Como se indica en la corrección publicada, el problema se solucionó construyendo los elementos de notificación mediante métodos del DOM y asignando el contenido a través de textContent en lugar de innerHTML, lo que impide la ejecución de scripts incrustados.