- Zatrucie — serwer był złośliwy od pierwszego dnia. Jego manifest wyglądał łagodnie; niebezpieczne zachowanie było w implementacji narzędzia, nie w deklarowanych zakresach.
- Rug-pull — zaufałeś mu, a potem się zmienił. Pojawiło się nowe narzędzie, które operator serwera dodał po cichu, lub wpis w rejestrze społeczności został przejęty i zaktualizowany, aby dzwonił do domu.
1. Jak zatrucie narzędzi MCP dociera do twoich agentów
Każdetools/call, które twój agent wydaje, podróżuje przez zadeklarowany
zestaw narzędzi serwera MCP. Zatrute lub podlegające rug-pullowi serwery
wykorzystują to zaufanie na kilka sposobów:
| Wektor | Co się dzieje |
|---|---|
| Niezadeklarowane narzędzie | Nowe narzędzie pojawia się w tools/list, które manifest serwera nigdy nie deklarował. Twój agent je znajduje i wywołuje. |
| Przejęty wpis w rejestrze | Listing w rejestrze społeczności jest przejmowany; endpoint teraz wskazuje na serwer kontrolowany przez atakującego. |
| Zbieranie poświadczeń | Implementacja narzędzia serwera wysyła zebrane wejścia do zewnętrznego hosta. |
| Prompt injection przez wynik narzędzia | Narzędzie zwraca tekst kontrolowany przez atakującego, który przekierowuje następną akcję agenta. |
2. Obrony OrcaRouter
2.1 Każde tools/call jest ewaluowane przez firewall przed uruchomieniem
Serwery MCP łączą się z twoimi agentami przez bramę Firewall MCP pod adresem
/api/v1/firewall/mcp. Brama nie przekazuje wywołania narzędzia, dopóki
silnik firewalla nie ewaluuje go wobec twojej polityki.
Oznacza to, że twoja lista dozwolonych jest źródłem prawdy — nie manifest
narzędzi serwera. Jeśli rug-pull doda shell.exec, a twoja polityka nie ma
reguły zezwalającej na to, werdykt to deny i wywołanie nigdy nie opuszcza
bramy. Model otrzymuje błąd narzędzia (firewall deny: …) i może zareagować;
narzędzie dodane przez atakującego jest martwe od razu.
Werdykty, które silnik może zwrócić:
| Werdykt | Efekt |
|---|---|
allow / audit | Wywołanie przekazane; audit dodatkowo loguje argumenty. |
sanitize | Argumenty przepisane przed przekazaniem. |
deny | Wywołanie zablokowane; model otrzymuje błąd narzędzia. |
pending_approval | Wywołanie wstrzymane; człowiek musi zatwierdzić przed kontynuowaniem. |
cap_cost | Pułap kosztu egzekwowany; wywołanie zablokowane, jeśli przekroczyłoby go. |
2.2 Auto-wykryte zdolności są poddawane kwarantannie do czasu przeglądu
Gdy agent samodzielnie instaluje zdolność — lub rug-pull dodaje nowe narzędzia, których nie było, gdy zarejestrowałeś serwer — Firewall auto-wykrywa nową zdolność poza gorącą ścieżką, syntezuje manifest, skanuje go i przypisuje pasmo ryzyka i tryb egzekwowania. Co kluczowe, auto-wykryte zdolności są zawsze poddawane kwarantannie niezależnie od wyniku skanu: są wstrzymane wpending_approval do czasu, gdy człowiek je przejrzy.
Tak właśnie rug-pulle są zawarte. Operator nie może po cichu dodać nowego
narzędzia i sprawić, że twoje agenty zaczną go używać — te wywołania są
wstrzymane do czasu, gdy sprawdzisz i zatwierdzisz nową zdolność.
2.3 Skanowanie skilli przypisuje pasmo ryzyka i tryb egzekwowania
Każda installowalna zdolność — czy zarejestrowałeś ją, czy Firewall ją auto-wykrył — jest przepuszczana przez skaner skilli. Skaner uruchamia deterministyczne przejścia nad manifestem i deklarowanymi zakresami:- prompt_injection — tekst manifestu próbujący przejąć instrukcje.
- tool_creep — narzędzia, które manifest używa, ale nigdy nie deklarował.
- network_egress — hosty HTTP(S) poza zatwierdzonymi zakresami sieciowymi.
- fs_write_unsafe — dostęp do systemu plików w trybie zapisu poza
/tmp.
low / medium / high / critical)
i trybu egzekwowania:
| Tryb | Co się dzieje w czasie wykonywania |
|---|---|
allow | Skill sam w sobie nic nie narzuca; reguły twojej polityki decydują. |
quarantine | Każdy werdykt inny niż deny eskaluje do pending_approval. Człowiek musi zatwierdzić każde wywołanie narzędzia. |
block | Wymusz deny dla wszystkich narzędzi tego skilla, niezależnie od reguł polityki. |
high jest automatycznie poddawany kwarantannie; critical
jest blokowany. Jedno znalezisko error (np. tool_creep dla niezadeklarowanego
shell.exec) wystarczy, aby zablokować skill nawet gdy jego wynik numeryczny
wygląda nisko. Tryb tylko się zaostrza — zatwierdzenie skilla nigdy nie łagodzi
blokady ustawionej przez świeży skan.
2.4 Poświadczenia są przechowywane zaszyfrowane
Sekrety auth serwera są szyfrowane w spoczynku za pomocą klucza sekretów przestrzeni roboczej i wstrzykiwane przez bramę w czasie dyspozycji. Nigdy nie docierają do modelu, agenta ani argumentów wywołania. Skompromitowany serwer nie może eksfiltrować twoich kluczy API czytając swój własnyauth_json.
Lista kontrolna weryfikacji serwera MCP strony trzeciejPrzed rejestracją zewnętrznego serwera MCP:
- Zweryfikuj tożsamość wydawcy — kto kontroluje URL endpointu?
- Przeczytaj źródło lub changelog; szukaj nowych narzędzi dodanych po początkowym wydaniu.
- Sprawdź, czy skan skilla zwraca jakiekolwiek wyniki
tool_creeplubprompt_injectionprzy rejestracji. - Ogranicz regułę firewalla z
tool_name_glob: <server>.*doauditlubpending_approvaldo czasu, gdy masz historię wywołań. - Przejrzyj wyniki
network_egress: czy manifest twierdzi, że potrzebuje tylko jednej domeny, ale opisy narzędzi wspominają inne? - Ponownie sonduj serwer po każdym bumpe wersji nadrzędnej (
POST /api/workspace/firewall/mcp_servers/:id/probe), aby wychwycić nowe narzędzia.
3. Co zrobić po podejrzanym rug-pullu
- Natychmiast wyłącz serwer — wyłączony serwer jest usuwany z rejestru
runtime, a jego poświadczenia nigdy nie są odszyfrowywane. Użyj
PUT /api/workspace/firewall/mcp_serversz"enabled": false. - Ponownie sonduj, aby wychwycić zmiany —
POST /api/workspace/firewall/mcp_servers/:id/probeuruchamiatools/listi zwraca wszystkie nowe narzędzia, które pojawiły się od ostatniego sondowania. - Ponownie skanuj rekord skilla —
POST /api/workspace/firewall/skills/:id/rescanponownie uruchamia skaner wobec zaktualizowanego manifestu. Jeśli werdykt degraduje się doflaggedlubblocked, Firewall emituje zdarzenie w twoim strumieniu. - Przejrzyj kolejkę
pending_approval— wszystkie wywołania wstrzymane od czasu rug-pullu są w kolejce. Sprawdź i odmów je zamiast masowo zatwierdzać. - Audytuj log wywołań — sprawdź ślad zdarzeń Firewalla dla wywołań, które przeszły przed wykryciem zmiany.
4. Parowanie skanowania skilli z regułami firewalla
Skanowanie skilli i reguły firewalla są uzupełniające się i komponują:- Reguła z
tool_name_glob: community.*ustawiona napending_approvalzapewnia, że przejrzysz każde wywołanie z serwera ze źródeł społeczności, niezależnie od pasma ryzyka. - Poddany kwarantannie skill nadpisuje regułę
allow— nawet jeśli twoja polityka zezwala nahttp.fetchszeroko, poddany kwarantannie skill, który go posiada, nadal wstrzymuje wywołanie. - Używaj
skill_name_globw regule do ograniczania bardziej rygorystycznych polityk do niezaufanych serwerów bez wpływu na twoje integracje first-party.
5. Powiązane zagrożenia
- Niebezpieczne wywołania narzędzi — reguły blokujące destrukcyjne lub nieodwracalne akcje narzędzi niezależnie od źródła.
- Eksfiltracja danych — reguły egress ograniczające, dokąd wywołania narzędzi mogą wysyłać dane.
- Model zagrożeń — pełna powierzchnia ataku, którą OrcaRouter jest zaprojektowany bronić.
Firewall: Serwery MCP
Rejestruj serwery MCP za bramą, sonduj ich narzędzia i stosuj werdykty
per wywołanie, zanim jakiekolwiek wywołanie dotrze do rzeczywistego serwera.
Firewall: Skille
Skanuj i oceniaj ryzyko każdej installowalnej zdolności. Poddawaj
kwarantannie lub blokuj ryzykowne skille, zanim ich narzędzia będą
mogły działać.
