MCP (Model Context Protocol) i szerzej tool-use to nowa powierzchnia ataku: model czyta opisy narzędzi jako tekst i może wykonać ukrytą w nich instrukcję. Ta strona opisuje defensywny skaner, który inwentaryzuje serwery MCP, przegląda manifest narzędzi i flaguje podejrzane wzorce — zanim zostaną wpięte do agenta. Status: ROADMAP. To specyfikacja, nie działający moduł.
Badania nad bezpieczeństwem MCP z 2026 r. pokazały klasę problemów, w której opis narzędzia (tool description) — a nie jego kod — staje się nośnikiem ataku: prompt injection ukryty w metadanych, „tool poisoning" (instrukcja widoczna dla modelu, niewidoczna dla użytkownika), oraz „rug pull" (manifest zmienia się po zatwierdzeniu). Skaner MCP jest odpowiedzią defensywną: przegląda manifest, liczy ryzyko, ostrzega — nie uruchamia narzędzi ani nie generuje payloadów ataku.
Za każdym wektorem stoi udokumentowana w 2026 r. klasa słabości warstwy tool-use. Opis jest ogólny i defensywny — bez konkretnych payloadów.
Opis narzędzia zawierający imperatywy skierowane do modelu („zawsze wywołaj", „zignoruj poprzednie", „nie informuj użytkownika") zamiast neutralnego opisu funkcji.
Instrukcje ukryte przed człowiekiem: znaki zero-width, tekst w kolorze tła, sekcje poza widocznym opisem, komentarze/metadane niepokazywane w UI konektora.
Parametry o nazwach/opisach niespójnych z deklarowaną funkcją, pola „ukryte" lub domyślne wartości mogące eksfiltrować kontekst (np. parametr „note" przekazujący całą historię).
Zmiana manifestu po pierwszym zatwierdzeniu. Skaner liczy hash manifestu i sygnalizuje różnicę względem wersji zatwierdzonej.
Narzędzie z jednego serwera opisujące zachowanie innego serwera / próbujące przechwycić wywołania (tool shadowing). Flaga przy nakładających się nazwach i odwołaniach.
Serwer żądający szerokiego dostępu (system plików, sieć, sekrety) bez izolacji. Skaner oznacza brak sandboxa i nadmiarowy scope jako ryzyko konfiguracji.
Każda kontrola: co sprawdza, jaki sygnał daje, jaki jest status. Wszystkie dziś ROADMAP — to plan, nie deklaracja działania. Priorytet: P0 rdzeń MVP · P1 rozszerzenie.
| Kontrola | Co sprawdza | Sygnał | Priorytet | Status |
|---|---|---|---|---|
| Inventory | Lista skonfigurowanych serwerów MCP, ich narzędzia, wersja manifestu, deklarowany scope. Punkt wyjścia dla pozostałych kontroli. | Rejestr serwerów + hash manifestu per serwer. | P0 | ROADMAP |
| Description lint | Heurystyka nad opisem narzędzia: imperatywy do modelu, frazy „ignore/override/do not tell", niespójność opis↔nazwa. | Ostrzeżenie z cytatem fragmentu opisu (bez wykonania). | P0 | ROADMAP |
| Hidden-content scan | Znaki zero-width, non-print, homoglify, tekst poza widocznym polem opisu/metadanych. | Flaga „ukryta treść" + pozycja znaku. | P0 | ROADMAP |
| Parameter audit | Schemat parametrów: pola nieoczywiste dla funkcji, wartości domyślne mogące nieść kontekst, brak walidacji typu. | Lista parametrów podwyższonego ryzyka. | P1 | ROADMAP |
| Manifest diff | Porównanie bieżącego manifestu z wersją zatwierdzoną (approve-on-first-use). Wykrywa rug pull / cichą zmianę. | Diff + alert „manifest zmieniony po zatwierdzeniu". | P1 | ROADMAP |
| Scope / sandbox check | Deklarowany dostęp (fs/net/secrets) vs izolacja procesu. Nadmiarowy scope bez sandboxa. | Ostrzeżenie konfiguracyjne z rekomendacją izolacji. | P1 | ROADMAP |
| Audit logging | Trwały log każdego skanu: który serwer, jaki wynik, kto zatwierdził, hash manifestu, znacznik czasu. | Append-only rekord dowodowy (chain-of-custody). | P0 | ROADMAP |
Poniżej ilustracyjny kształt raportu. Wartości są syntetyczne, serwer fikcyjny — nie jest to wynik żadnego realnego skanu.
{
"scan_id": "mcp-scan-SYNTH-0001",
"generated_at": "2026-07-05T00:00:00Z",
"server": "example-notes-mcp (SYNTETYCZNY)",
"manifest_sha256": "<hash>",
"tools_reviewed": 4,
"findings": [
{ "tool": "save_note", "control": "description-lint",
"severity": "warn",
"note": "opis zawiera imperatyw skierowany do modelu" },
{ "tool": "save_note", "control": "parameter-audit",
"severity": "info",
"note": "parametr 'context' o szerokim domyslnym zakresie" }
],
"sandbox": "brak izolacji — scope: fs+net (ostrzezenie)",
"verdict": "REVIEW_REQUIRED",
"disposition": "wymaga akceptacji operatora przed wpieciem do agenta"
}
Powiązane: warstwa bezpieczeństwa agentów → /agent-security · rejestr konektorów i źródeł → /connectors · uczciwy rejestr braków → /known-limitations.