AIDive

Pakiet do filmu

Serwery MCP jako najsłabsze ogniwo: liczby GhostSplice, ścieżki wycieku, checklista

11 min czytania

TL;DR

  • Serwer MCP to nie wtyczka, tylko posiadacz poświadczeń, który rozmawia z twoim agentem przy każdym wywołaniu: opisy jego narzędzi i wyniki narzędzi trafiają do kontekstu modelu z taką samą wagą jak twoje własne instrukcje.
  • GhostSplice pokazuje, że alignment modelu nie jest obroną: polecenie kradzieży podane w jednym bloku GPT-4o, Gemini 2.0 Flash i Llama 3.3 odrzucają w 100%; to samo polecenie rozbite na opis narzędzia i wynik narzędzia jest wykonywane w 100%.
  • Klient liczy się tak samo jak model: Claude Haiku 4.5 odrzuca wszystko przez API, a w teście z trzema fragmentami uruchomionym w Cursorze ulega w 100%.
  • Łańcuch dostaw to już żywy przewód: CVE-2025-6514 dotknęło mcp-remote, proxy OAuth pobrane ponad 400,000 razy, z command injection wywoływanym przez złośliwy serwer.
  • Wykrywanie na poziomie protokołu w Cloudflare i WriteGuard to pierwsze prawdziwe mechanizmy kontroli dla firm, ale wymagają Zero Trust z inspekcją TLS, a lokalny serwer stdio nigdy się w nich nie pojawia.
  • Dla samotnego programisty lub małego zespołu obrona jest ręczna: inwentarz, pochodzenie, tokeny o wąskim zakresie, ludzka bramka przy każdym zapisie i traktowanie wyjścia narzędzi jak danych.

Co mówią źródła

Serwer MCP łączy twojego agenta z zewnętrzną usługą, więc przechowuje w twoim imieniu to, czego potrzebuje do połączenia: tokeny, klucze API, poświadczenia kont usługowych. Analiza wycieków opublikowana 17 sierpnia zaczyna od bezpośredniej obserwacji: tokeny są wklejane wprost do ciągów konfiguracji i pozostają czytelne na dysku, o jeden pospieszny commit od repozytorium Git s2. Ta sama analiza wymienia nadmiar uprawnień jako drugą dziurę: szerokie prawa nadane podczas developmentu trafiają na produkcję bez zmian, więc jedno włamanie ujawnia znacznie więcej, niż uzasadniało realne użycie s2. Czwarta dziura to prompt injection: agent czyta wszystko, co zwracają jego narzędzia, stronę WWW, ticket, wewnętrzny dokument, a ukryta w tej treści instrukcja jest wykonywana tak, jakby pochodziła od ciebie, przy użyciu legalnych narzędzi do ujawnienia tego, co miały chronić s2.

Trzecia dziura to łańcuch dostaw. CVE-2025-6514 dotknęło mcp-remote, proxy OAuth pobrane ponad 400,000 razy: złośliwy serwer mógł wywołać command injection na maszynie programisty, uruchomić kod i wyjść z poświadczeniami. Jeden popularny pakiet npm, zainstalowany jedną linią, i drzwi były otwarte s3.

Ekosystem urósł szybciej niż jego zabezpieczenia. Oficjalny rejestr przekracza 9,600 opublikowanych serwerów, wdrożenia serwerów zdalnych wzrosły pięciokrotnie od maja 2025, każdy może publikować i nie ma centralnej walidacji; twój agent traktuje przypadkowy wpis z takim samym zaufaniem jak oficjalne narzędzie s4. NSA opublikowała w maju osobny przewodnik bezpieczeństwa MCP, stwierdzając, że adopcja protokołu wyprzedziła budowę jego zabezpieczeń s5.

GhostSplice, nazwany przez grupę badawczą ASSET, sprawia, że to agent sam przeprowadza eksfiltrację. Zamiast pisać pełne polecenie kradzieży, złośliwy serwer je dzieli: jeden fragment w opisie narzędzia, drugi w wyniku, który to narzędzie zwraca. Każdy kawałek osobno wygląda niewinnie; agent składa wszystko, co trafia do jego kontekstu, i w dobrej wierze wykonuje całą instrukcję s1. Liczby są sednem. Przy instrukcji podanej w jednym bloku GPT-4o, Gemini 2.0 Flash i Llama 3.3 odrzucają w 100%. Przy instrukcji rozbitej wszystkie trzy wykonują ją w 100% s1. Modele Claude opierają się lepiej na powierzchni, ale Claude Haiku 4.5 odrzuca wszystko przez API, a w teście z trzema fragmentami uruchomionym w Cursorze ulega w 100%: ten sam model odmawia w jednym kliencie i eksfiltruje w innym, zależnie od zabezpieczeń, które klient dodaje lub nie s1. Testy wykradły: klucze SSH, sekrety środowiskowe, kod źródłowy, dane klientów, na izolowanych projektach z fałszywymi kluczami, opublikowaną i powtarzalną metodą s1. To samo laboratorium opublikowało w czerwcu Ghostcommit, który ukrywał instrukcje w plikach PNG wskazanych przez konwencje projektu, a potem kodował wykradzione sekrety w kodzie źródłowym jako liczby całkowite; fragmentacja instrukcji to rodzina ataków, nie jednorazowy przypadek s1. Obowiązują dwa warunki wstępne: złośliwy serwer musi być już podłączony do twojego agenta, a agent musi mieć prawo czytać atakowane pliki s1.

Po stronie firm Cloudflare nazywa "shadow MCP" niezatwierdzone serwery, które programiści podpinają do swoich agentów. Od aktualizacji specyfikacji każdy zgodny klient MCP wysyła nagłówek MCP-Protocol-Version, a Gateway sprawdza ten nagłówek w całym analizowanym ruchu TLS, dając zespołowi bezpieczeństwa panel z unikalnymi serwerami, użytkownikami i wolumenem żądań s6. Najnowsza wersja specyfikacji dodaje nagłówki Mcp-Method i Mcp-Name, które ujawniają żądaną operację i nazwę narzędzia bez otwierania treści żądania, więc sieć odróżni agenta czytającego ticket od agenta usuwającego pięćdziesiąt. Reguły Cloudflare obejmują dwa przypadki: czysty shadow MCP (serwer nigdy niezatwierdzony) i obejście portalu (serwer zatwierdzony, ale używany bezpośrednio), a oba są blokowane tą samą regułą bazową s6.

WriteGuard, otwarty w prywatnej becie, klasyfikuje każde narzędzie każdego serwera MCP do poziomu ryzyka i stosuje inną politykę dla każdego poziomu: odczyt przechodzi bez tarcia; ograniczony zapis, jak dodanie komentarza, przechodzi, ale jest podpisany jako wykonany przez agenta w imieniu nazwanego człowieka, ze zdarzeniem audytu wysłanym do centralnego logu; akcja krytyczna, jak merge kodu, wdrożenie na produkcję czy masowe usuwanie, jest blokowana, zanim serwer ją przetworzy s7. Przykład GitLab z wpisu: odczyt merge requesta przechodzi, komentarz przechodzi z atrybucją, merge jest odrzucany, dopóki nie zrobi go człowiek. Agent zachowuje uprawnienia pracownika, któremu służy, ale każdy zapis niesie dwa podpisy: osoby i sesji agenta. Cloudflare opisuje własne użycie wewnętrzne: jego portal łączy 27 serwerów MCP, wobec 13 w kwietniu s7.

Ograniczenia są realne. WriteGuard to prywatna beta na zapisy, a wykrywanie w Gateway wymaga wdrożenia Cloudflare Zero Trust z włączoną inspekcją TLS s7. Wykrywanie widzi tylko ruch sieciowy, który odszyfruje: lokalny serwer MCP działający przez stdio jako zwykły proces na twojej maszynie pozostaje niewidoczny dla Gateway, a tak działa większość serwerów instalowanych przez programistów s6. Żadne z tych narzędzi nie naprawia mechanizmu, który ujawnia GhostSplice. Badacze ASSET mówią, że naprawą jest traktowanie wyjścia narzędzi jak danych, nigdy jak instrukcji, a takiego rozdziału agenci jeszcze natywnie nie mają. Ich trzy rekomendacje: nie pozwalać, by wartość zwrócona przez jedno narzędzie zasilała bez kontroli argumenty innego narzędzia, zachować możliwość ręcznego odrzucenia każdego wywołania narzędzia i domyślnie traktować jako wrogą każdą adnotację z niezweryfikowanego serwera s1.

Werdykt: co cię chroni, a co nie

Mechanizm Dla kogo Werdykt
Odmowy modelu Wszyscy Pomiń jako obronę: 100% odmów w jednym bloku, 100% zgody przy fragmentacji [s1]
Zabezpieczenia po stronie klienta Wszyscy Zachowaj: ten sam model odmówił w API i uległ w Cursorze [s1]
Inwentarz i pochodzenie serwerów Solo i zespoły Zachowaj: GhostSplice wymaga już podłączonego serwera [s1]
Dedykowane tokeny o wąskim zakresie, rotowane Solo i zespoły Zachowaj: tokeny jawnym tekstem i nadmiar uprawnień to dwie pierwsze ścieżki wycieku [s2]
Przypinanie i audyt zależności MCP Solo i zespoły Zachowaj: mcp-remote dostarczyło command injection przy 400,000+ pobrań [s3]
Wykrywanie po nagłówkach Gateway (MCP-Protocol-Version, Mcp-Method, Mcp-Name) Firmy na Zero Trust Wypróbuj, jeśli już masz inspekcję TLS; ślepe na serwery stdio [s6]
Poziomy ryzyka WriteGuard Firmy Wypróbuj z listy oczekujących; tylko prywatna beta [s7]
Ludzka bramka przy każdym zapisie, merge i usunięciu Wszyscy Zachowaj: ręczna wersja tego, co WriteGuard industrializuje [s7]

Do zrobienia w poniedziałek

  • Wypisz serwery MCP faktycznie podłączone do każdego z twoich agentów i usuń każdy, którego nie użyłeś w ostatnim miesiącu.
  • Dla każdego pozostałego serwera zapisz, kto go publikuje, i przeczytaj, co robi z twoimi danymi, zanim go zostawisz; porzuć każdy serwer, który trafił do ciebie z wątku zamiast od dostawcy.
  • Zastąp każde współdzielone lub główne poświadczenie w konfiguracji MCP dedykowanym tokenem o minimalnym zakresie potrzebnym temu serwerowi i ustaw datę rotacji.
  • Sprawdź, że żaden z twoich plików konfiguracyjnych MCP nie jest śledzony w Git, i dodaj je do .gitignore tam, gdzie nie są.
  • Przypnij wersję każdego instalowanego pakietu MCP i sprawdź w lockfile wersje mcp-remote objęte CVE-2025-6514.
  • Włącz ręczne zatwierdzanie dla każdego narzędzia, które zapisuje, merguje, wdraża lub usuwa, i trzymaj je włączone w każdym używanym kliencie.
  • Raz przejrzyj opisy narzędzi każdego serwera zewnętrznego, szukając instrukcji skierowanych do modelu, a nie do ciebie.
  • Jeśli używasz Cloudflare Zero Trust, włącz inspekcję TLS i zbuduj panel shadow MCP z nagłówka MCP-Protocol-Version.

Czytaj dalej

  • Przeczytaj pełny opis GhostSplice, by zobaczyć macierz testów dla każdego modelu i klienta oraz trzy środki zaradcze proponowane przez badaczy s1.
  • Sprawdź Ghostcommit, czerwcowy atak tego samego laboratorium, by zobaczyć, jak instrukcje ukrywano w plikach PNG, a wykradzione sekrety kodowano jako liczby całkowite w kodzie źródłowym s1.
  • Przejdź cztery ścieżki wycieku z analizy z 17 sierpnia na własnych konfiguracjach: przechowywanie jawnym tekstem, nadmiar uprawnień, łańcuch dostaw, prompt injection s2.
  • Przeczytaj wpis NVD dla CVE-2025-6514 i sprawdź, które wersje mcp-remote są dotknięte, zanim zaufasz jakiemukolwiek proxy OAuth w swoim stosie s3.
  • Przeczytaj wytyczne projektowe NSA dla MCP: to jedyna neutralna wobec dostawców lista kontrolna napisana dla zespołów wdrażających automatyzację agentów s5.
  • Przestudiuj nagłówki MCP-Protocol-Version, Mcp-Method i Mcp-Name we wpisie Cloudflare, nawet jeśli nie używasz Cloudflare: każde proxy, które kontrolujesz, może je logować s6.
  • Pożycz cztery poziomy ryzyka WriteGuard (read-only, minimal impact, contained write, critical) jako siatkę przeglądu narzędzi wystawianych przez twoje własne serwery s7.
  • Przejrzyj README oficjalnego rejestru, by zrozumieć, czego wymaga publikacja, a czego nie sprawdza s4.

Źródła

FAQ

Czy użycie bezpieczniejszego modelu chroni mnie przed GhostSplice?

Nie. Atak nigdy nie prosi o nic zakazanego w jednym kawałku, więc trening odmów się nie uruchamia. Ten sam Claude Haiku 4.5 odrzucił wszystko przez API i uległ w 100% w Cursorze; o wyniku zdecydowały zabezpieczenia klienta, nie model.

Jestem samotnym programistą, czy jakiekolwiek narzędzia Cloudflare są dla mnie?

Dziś nie. Wykrywanie w Gateway wymaga wdrożenia Zero Trust z inspekcją TLS, WriteGuard to prywatna beta, a oba są ślepe na lokalne serwery stdio. Lista kontrolna powyżej to wersja tych samych mechanizmów dla samotnego programisty.

Czy serwer z oficjalnego rejestru jest bezpieczny?

Wpis na liście to nie walidacja. Rejestr przekracza 9,600 serwerów bez centralnego przeglądu, a twój agent ufa wpisowi w rejestrze tak samo jak narzędziu dostawcy. Oceniaj pochodzenie i czytaj kod, nie listę.

Jaka jest pojedyncza zmiana o najwyższej wartości?

Dedykowane tokeny o minimalnym zakresie dla każdego serwera, rotowane jak sekrety produkcyjne. Główne poświadczenia jawnym tekstem w plikach konfiguracji to pierwsza ścieżka wycieku i sprawiają, że każda inna awaria, od CVE-2025-6514 po prompt injection, jest znacznie droższa.