ckan-mcp-server: el recurso DataStore Table UI no valida el origen de postMessage (in) y publica en targetOrigin "*" (out)
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):
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
postMessagea la interfaz puede suministrarfields/recordsarbitrarios, provocando que la tabla renderice filas y enlaces falsificados (por ejemplo, un__link_urlde 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
idpendiente resuelven o rechazan las solicitudes MCP de la interfaz, un marco atacante puede falsificar respuestas al handshakeui/initializeo 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.originfrente al origen esperado del host en cada mensaje entrante; descarte los mensajes de otros orígenes. - Envíe
postMessagesalientes 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/initializepara 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.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de npm | @aborruso/ckan-mcp-server | < 0.4.112 | 0.4.112 |
Referencias
- 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
- 2026: 7
-
ckan-mcp-server: el recurso DataStore Table UI no valida el origen de postMessage (in) y publica en targetOrigin "*" (out) esta entrada
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.