MCP to nowy npm: 30 zainstalowanych pluginów to 30 nowych wektorów ataku
W marcu 2024 tylne drzwi w bibliotece xz-utils, zainstalowanej na milionach serwerów Linux, zostały wykryte przez przypadek — jeden inżynier zauważył dziwne opóźnienie w procesie SSH i zaczął drążyć. Atak był przygotowywany przez dwa lata, sprawca spędził ponad rok budując zaufanie w projekcie open source zanim wprowadził złośliwy kod. Gdyby nie przypadkowa obserwacja, backdoor mógłby trafić do dystrybucji produkcyjnych na dużą skalę.
Model Context Protocol (MCP) buduje ekosystem wtyczek dla agentów AI w tempie, które sprawia, że problem zaufania w łańcuchu dostaw jest znacznie poważniejszy niż przy xz.
Co to jest MCP i dlaczego to ważne
MCP to protokół open source ogłoszony przez Anthropic w 2024, który standaryzuje sposób w jaki modele AI komunikują się z zewnętrznymi systemami. Zamiast każdej firmy budować własne integracje (API do bazy danych, do kalendarza, do GitHub, do Slacka, do każdego innego systemu), MCP oferuje wspólną warstwę komunikacji.
Analogia z npm jest trafna: npm zmienił JavaScript ecosystem, bo każdy mógł napisać paczkę i każdy mógł ją zainstalować bez weryfikacji. Efekt: w 2023 npm miał ponad 2 miliony pakietów. Większość nikomu nie znana, znaczna część aktywnie złośliwa lub porzucona i podatna.
MCP ecosystem rośnie szybko. Claude Desktop, Cursor, Cline, OpenAI Agents — wszystkie obsługują MCP. Rejestr pluginów społecznościowych rośnie. Użytkownicy instalują pluginy jednym poleceniem.
Co MCP plugin może zrobić
To jest sedno problemu. MCP plugin działa z uprawnieniami agenta AI, który go używa. A agent AI zazwyczaj ma szerokie uprawnienia.
Typowy zestaw uprawnień agenta z MCP plugins:
- Dostęp do plików i systemu plików (filesystem MCP)
- Wykonywanie poleceń shell (terminal/bash MCP)
- Dostęp do bazy danych (Postgres, SQLite MCP)
- Dostęp do zewnętrznych API (GitHub, Slack, email MCP)
- Przeglądanie internetu (browser/fetch MCP)
Złośliwy MCP plugin z dostępem do kilku z tych możliwości może: eksfiltrować pliki, wykonywać kod, modyfikować dane, wysyłać komunikaty jako użytkownik, zbierać credentials z plików konfiguracyjnych.
Konkretny scenariusz ataku
Napastnik publikuje MCP plugin “enhanced-file-manager” na GitHub. Plugin oferuje użyteczne funkcje: podgląd drzewa katalogów, wyszukiwanie plików, rename w batch. Readme jest schludne, kilka gwiazdek od botów, kod wygląda czysto.
W kodzie, głęboko zagnieżdżone w obsłudze błędów, jest kilka linii, które przy każdym uruchomieniu skanują katalogi ~/.ssh, ~/.aws, ~/.config, szukając credentials. Znalezione dane są przesyłane do zewnętrznego endpointu przez kanał pozornie wyglądający jak telemetria.
Użytkownik instaluje plugin przez jedno polecenie. Daje mu uprawnienia do filesystem (bo po to go zainstalował). Od tej chwili każde uruchomienie agenta AI eksfiltruje credentials.
Dlaczego to trudniejsze do wykrycia niż tradycyjny malware
Tradycyjny malware ma charakterystyki behawioralne — nawiązuje połączenia sieciowe, modyfikuje pliki systemowe, ukrywa procesy. Security tools są na to uczulone.
Złośliwy MCP plugin:
- Działa jako legalny kod zainstalowany przez użytkownika
- Wykonuje operacje przez uprawniony interfejs agenta
- Jego ruch sieciowy wygląda jak normalny ruch aplikacji AI
- Sandbox’owanie jest trudne, bo pluginy muszą mieć dostęp do zasobów by działać
Antywirus nie wykryje kodu, który jest po prostu Python/JavaScript z podejrzaną logiką. EDR nie zaalarmuje na eksfiltrację credentials przez HTTPS do “zewnętrznego API”.
Porównanie z npm: gdzie jest różnica
Ekosystem npm po dekadzie incydentów ma dziś mechanizmy obrony: npm audit, automatyczne skanowanie w GitHub Actions, Snyk, Socket.dev. Mimo to co kilka miesięcy jest nowy supply chain attack.
MCP ecosystem jest kilkunastomiesięczny. Nie ma odpowiednika npm audit. Nie ma standardowego formatu opisu uprawnień wymaganych przez plugin. Nie ma organizacji dbającej o bezpieczeństwo rejestru. Nie ma procesu weryfikacji autorów.
Jedyna “weryfikacja” to liczba gwiazdek na GitHub i opis w README.
Co zrobić teraz
Dla organizacji używających MCP:
- Allowlist zamiast installlist — określ które pluginy MCP są zatwierdzone; odmawiaj wszystkich innych
- Przejrzyj kod pluginów przed instalacją — szczególnie wszystko co ma dostęp do filesystem, shell, sieci; to nie jest trudne dla 200-linijkowego skryptu
- Principle of least privilege — agent nie musi mieć filesystem access jeśli wykonuje zadania webowe; ogranicz uprawnienia pluginów do minimum
- Monitoring sieciowy dla agentów — loguj wszystkie połączenia wychodzące z procesów agentów AI; anomalie powinny być widoczne
- Izolacja środowiska — uruchamiaj agentów AI z pluginami w kontenerach lub VM bez dostępu do systemów produkcyjnych
Dla twórców narzędzi AI: ekosystem potrzebuje analogu npm audit dla MCP. To nie przyjdzie samo — ktoś musi to zbudować, najlepiej zanim pojawi się pierwszy głośny incident.
Historia npm, PyPI i RubyGems jest jednoznaczna: im szybciej ekosystem rośnie bez mechanizmów bezpieczeństwa, tym większy będzie crash gdy te mechanizmy zabraknie.