ckan-mcp-server: zasób DataStore Table UI nie sprawdza pochodzenia postMessage (in) i wysyła dane do targetOrigin "*" (out)
Podsumowanie
Zasób interfejsu użytkownika MCP Apps (interaktywna tabela DataStore renderowana w widoku webview/iframe hosta) komunikuje się ze swoim rodzicem za pośrednictwem postMessage. Odbiornik przychodzący message nie przeprowadza weryfikacji event.origin, a wiadomości wychodzące są wysyłane z docelowym pochodzeniem '*'. Dowolne okno lub ramka mogąca dotrzeć do dokumentu może wstrzyknąć dane do tabeli i zakłócić uzgadnianie (handshake) interfejsu MCP, a własne komunikaty JSON-RPC interfejsu są rozgłaszane bez ograniczeń dotyczących pochodzenia.
Kod podatny na zagrożenie
src/resources/datastore-table-ui.ts (wbudowany HTML):
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||{} }, '*');
Brak listy dozwolonych pochodzeń dla wiadomości przychodzących oraz brak zdefiniowanego docelowego pochodzenia dla wiadomości wychodzących.
Wpływ
- Podszywanie się pod treść (Content spoofing). Ramka, która może wysłać
postMessagedo interfejsu, może przekazać dowolnefields/records, powodując wyrenderowanie w tabeli sfabrykowanych wierszy i linków (np. phishingowego__link_url), które wydają się pochodzić z odpytywanego portalu. (Wartości są traktowane funkcją escape dla formatu HTML, więc jest to podszywanie się pod treść wyświetlaną, a nie wstrzykiwanie skryptu — brak XSS). - Zakłócenia uzgadniania/interfejsu użytkownika. Ponieważ wiadomości przychodzące pasujące do oczekującego
idzatwierdzają bądź odrzucają żądania MCP interfejsu, atakująca ramka może sfałszować odpowiedzi na uzgadnianieui/initializelub w inny sposób zakłócić działanie panelu. - Wyciek wychodzący. Wysyłanie do
'*'oznacza, że komunikaty JSON-RPC interfejsu trafiają do dowolnego pochodzenia nadrzędnego; jeśli zasób zostanie osadzony w kontekście innym niż zaufany host, komunikaty te wyciekną do tego kontekstu.
Podatność na wykorzystanie zależy od modelu osadzania u hosta (w poprawnym hoście MCP Apps elementem nadrzędnym jest zaufany host, co ogranicza grono podmiotów mogących przesyłać wiadomości do ramki). Z tego względu jest to kwestia utwardzania zabezpieczeń i ochrony wielowarstwowej (defense-in-depth), a nie wada możliwa do bezpośredniego zdalnego wywołania — stąd niska ważność (Low).
Dowód koncepcji (PoC)
-
poc/verify-no-origin-check.mjs— statyczne potwierdzenie, że odbiornik nie sprawdza pochodzenia, a operacje wychodzące korzystają z'*':[x] validates event.origin : NO [x] outgoing postMessage targetOrigin : '*' (any) RESULT: VULNERABLE -
poc/parent-spoof-poc.html— strona, która osadza interfejs i wstrzykuje sfabrykowane wiersze z innego pochodzenia bez procesu handshake; interfejs je renderuje.
Co trzeba zrobić
- Weryfikuj
event.originpod kątem oczekiwanego pochodzenia hosta przy każdej wiadomości przychodzącej; odrzucaj wiadomości z innych źródeł. - Wysyłaj wychodzące
postMessageze sprecyzowanym docelowym pochodzeniem (pochodzenie hosta ustalone podczas inicjalizacji) zamiast'*'. - Opcjonalnie powiąż komunikację z wartością nonce lub kanałem ustanowionym podczas
ui/initialize, aby panelem mógł sterować wyłącznie wynegocjowany host. - Zaktualizuj pakiet do wersji 0.4.112 lub nowszej.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Paczka npm | @aborruso/ckan-mcp-server | < 0.4.112 | 0.4.112 |
Odnośniki
- Wektor CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N- Słabość (CWE)
CWE-345, CWE-940- Platforma
- npm
- Paczka
@aborruso/ckan-mcp-server- Ujawniono
- 16.10.2026
- Aktualizacja
- 20.10.2026 08:36
Źródła i licencje · Redakcja lub tłumaczenie: DockRay. Zachowano prawa źródeł i obowiązujące licencje.
OSV / GitHub Advisory Database - GHSA-vqff-r82h-9crc - CC BY 4.0
Historia podatności: @aborruso/ckan-mcp-server
Wszystkie opisane podatności tej paczki (Paczka npm), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 7
- Pierwsza → ostatnia
- 03.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Średnia 5
- Niska 2
Ujawnienia w latach
- 2026: 7
-
ckan-mcp-server: zasób DataStore Table UI nie sprawdza pochodzenia postMessage (in) i wysyła dane do targetOrigin "*" (out) ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.