Baja

ckan-mcp-server: el recurso DataStore Table UI no valida el origen de postMessage (in) y publica en targetOrigin "*" (out)

  • Publicada: 16.10.2026
  • Actualizado: 20.10.2026 08:36

Resumen

El recurso de interfaz de usuario de MCP Apps (una tabla interactiva de DataStore renderizada en el webview/iframe del host) se comunica con su elemento principal a través de postMessage. Su listener de entrada message no realiza ninguna validación de event.origin, y sus mensajes salientes se envían con el origen de destino '*'. Cualquier ventana o marco capaz de acceder al documento puede inyectar datos en la tabla e interferir con el handshake de la interfaz de usuario de MCP, y los mensajes JSON-RPC propios de la interfaz se difunden sin restricción de origen.

Código afectado

src/resources/datastore-table-ui.ts (HTML en línea):

js
window.addEventListener('message', function (event) {
  var msg = event.data;                    // no check of event.origin
  if (!msg || typeof msg !== 'object') return;
  if (msg.id !== undefined && _pending[msg.id]) { ... resolve/reject pending MCP request ... }
  ...
  if (data && (data.fields || data.records)) initTable(data);   // renders attacker-supplied data
});

// outbound:
window.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params || {} }, '*');
mcpNot: window.parent.postMessage({ jsonrpc:'2.0', method:method, params:params||{} }, '*');

No existe una lista de permitidos para orígenes entrantes ni un origen de destino fijo para mensajes salientes.

Impacto

  • Suplantación de contenido (Content spoofing). Un marco que pueda enviar mensajes mediante postMessage a la interfaz puede suministrar fields/records arbitrarios, provocando que la tabla renderice filas y enlaces falsificados (por ejemplo, un __link_url de phishing) que aparentan provenir del portal consultado. (Los valores se escapan en HTML, por lo que se trata de suplantación visual y no de inyección de scripts; no hay XSS).
  • Interferencia con el handshake/UX. Dado que los mensajes entrantes que coinciden con un id pendiente resuelven o rechazan las solicitudes MCP de la interfaz, un marco atacante puede falsificar respuestas al handshake ui/initialize o interrumpir el panel.
  • Fuga de datos salientes. El envío a '*' implica que los mensajes JSON-RPC de la interfaz se entregan a cualquier origen del elemento principal; si el recurso llega a incrustarse en un contexto distinto al host de confianza, esos mensajes se filtran hacia este.

La posibilidad de explotación depende del modelo de incrustación del host (en un host correcto de MCP Apps, el principal es el host de confianza, lo que restringe quién puede enviar mensajes al marco). Por tanto, se trata de una cuestión de endurecimiento o defensa en profundidad y no de una vulnerabilidad directamente activable de forma remota, motivo por el cual es de severidad Baja.

Prueba de concepto

  • poc/verify-no-origin-check.mjs: confirmación estática de que el listener no realiza verificación de origen y de que las comunicaciones salientes usan '*':

    [x] validates event.origin             : NO
    [x] outgoing postMessage targetOrigin  : '*' (any)
    RESULT: VULNERABLE
  • poc/parent-spoof-poc.html: una página que incrusta la interfaz e inyecta filas falsificadas de forma cruzada entre orígenes sin handshake; la interfaz las renderiza.

Qué hacer

  • Valide event.origin frente al origen esperado del host en cada mensaje entrante; descarte los mensajes de otros orígenes.
  • Envíe postMessage salientes con un origen de destino explícito (el origen del host establecido al inicializar) en lugar de '*'.
  • Opcionalmente, vincule la comunicación a un nonce o canal establecido durante ui/initialize para que solo el host negociado pueda controlar el panel.
  • Actualice a la versión 0.4.112 o posterior.

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Paquete de npm @aborruso/ckan-mcp-server < 0.4.112 0.4.112

Referencias

Puntuación CVSS 3.1/10
Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N
Debilidad (CWE)
CWE-345, CWE-940
Plataforma
npm
Paquete
@aborruso/ckan-mcp-server
Publicada
16.10.2026
Actualizado
20.10.2026 08:36

Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.

OSV / GitHub Advisory Database - GHSA-vqff-r82h-9crc - CC BY 4.0

Historial de vulnerabilidades: @aborruso/ckan-mcp-server

Todas las vulnerabilidades publicadas de este paquete (Paquete de npm), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Entradas en total
7
Primera → última
03.2026 10.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Media 5
  • Baja 2

Divulgaciones por año

  1. 2026: 7
  1. ckan-mcp-server: el recurso DataStore Table UI no valida el origen de postMessage (in) y publica en targetOrigin "*" (out) esta entrada
    Baja · 3.1 CVE-2026-76894 < 0.4.112 0.4.112
  2. Baja · 3.7 CVE-2026-73844 < 0.4.112 0.4.112

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.