Jak obce repozytorium może przejąć Claude Code: 7 zasad ochrony
MarkdownCztery udokumentowane ścieżki pośredniego wstrzyknięcia przez repozytoria, GitHub, Sentry i metadane MCP, z badaniami pierwotnymi i granicami ochrony.
Przeczytaj cały artykuł
Najważniejsze informacje
Opublikowane badania ilustrują cztery ścieżki pośredniego wstrzyknięcia: instrukcje uruchomienia, treść GitHub, telemetrię i metadane narzędzi MCP. Raporty powstały w różnych terminach i dotyczą różnych klientów oraz uprawnień. Poniżej źródła pierwotne i praktyczne ograniczanie skutków; żaden plik ustawień nie gwarantuje odporności.
Dokumentacja Ailoot: API, klucze i konfiguracja.
Cztery udokumentowane ścieżki od niezaufanego tekstu do działań agenta
Najważniejsze informacje
Przykłady dotyczą różnych okresów badań i konfiguracji klientów, a nie czterech odkryć w dwa tygodnie. Ilustrują wpływ niezaufanego materiału na narzędzia agenta; wynik zależy od błędów implementacji, dostępnych poświadczeń i uprawnień wykonania.
Formalnie nazywa się to pośrednim wstrzyknięciem promptu: złośliwe polecenie nie pochodzi bezpośrednio od ciebie, lecz z danych przetwarzanych przez agenta podczas wykonywania zadania — obcego pliku README, komunikatu o błędzie, komentarza na GitHubie lub odpowiedzi zewnętrznej usługi. Po przeczytaniu tego akapitu możesz zapomnieć o tym terminie; dalej będę używać prostego języka.
Cztery omawiane przykłady badawcze:
- Pozornie nieszkodliwe repozytorium może zamienić się w powłokę zwrotną.
- Tytuł Pull Requesta może przejąć kontrolę nad trzema różnymi agentami AI.
- Agent może otrzymać fałszywy raport o błędzie z Sentry zamiast prawdziwego.
- Opis narzędzia MCP może wpływać na działania agenta zależnie od modelu i konfiguracji.
Jak README pozornie nieszkodliwego repozytorium zmienia się w powłokę zwrotną?
Najważniejsze informacje
Klonujesz zwyczajnie wyglądające repozytorium i prosisz Claude Code o jego uruchomienie — agent posłusznie wykonuje instrukcje instalacji. Błąd przy pierwszym uruchomieniu sugeruje polecenie „naprawcze”, które w rzeczywistości rozwiązuje rekord DNS napastnika i uruchamia powłokę zwrotną. Cytowane źródło demonstruje technikę; nie ustala częstotliwości jej użycia w rzeczywistych incydentach.
Dowód koncepcji 0DIN z 25 czerwca 2026 pokazuje następujący mechanizm:
- Klonujesz zwyczajnie wyglądające repozytorium i prosisz Claude Code o jego uruchomienie.
- Repozytorium pobiera pakiet Python, który został zaprojektowany tak, by zawieść przy pierwszym użyciu.
- Komunikat o błędzie uprzejmie sugeruje polecenie „naprawcze”:
python3 -m axiom init. - Polecenie
inituruchamiasetup.sh. - Skrypt odpytuje rekord DNS TXT (zwykle używany do przechowywania informacji związanych z domeną, ale pole to przyjmuje dowolny tekst). Napastnik umieszcza tam polecenie zakodowane w base64 (sposób zamiany dowolnych danych na zwykły tekst bez spacji i znaków specjalnych), a następnie przekazuje je prosto do bash.
- Wartość rekordu DNS można zmienić w dowolnym momencie — daje to napastnikowi interaktywną powłokę zwrotną z uprawnieniami użytkownika i dostępem do wszystkich sekretów na komputerze.
Demonstrowany ładunek pobierano z DNS podczas działania, więc skan samych bajtów repozytorium nie ujawniał końcowego ładunku. Nie dowodzi to bezradności każdego skanera i kontroli wykonania: inspekcja pobranej treści, monitoring procesów i ograniczenia sieci mogą ujawnić lub przerwać łańcuch. Źródło jest demonstracją, nie pomiarem rozpowszechnienia rzeczywistych incydentów.
Jak tytuł Pull Requesta przejął kontrolę nad trzema różnymi agentami AI?
Najważniejsze informacje
Raport badawczy Comment and Control, opublikowany 15 kwietnia 2026 i zaktualizowany 4 maja, dokumentuje osobne ścieżki wstrzyknięcia treści GitHub w Claude Code Security Review, Gemini CLI Action i Copilot Agent. Obniżenie oceny nie dowodzi naprawienia całej klasy; raport opisuje reakcje dostawców i konkretne ograniczenie narzędzia Claude.
Badacz opisuje te ścieżki i reakcje; to historyczny raport, nie weryfikacja każdej obecnej wersji produktu:
| Agent | Sposób przeprowadzenia ataku | Co wyciekło | Obecny status |
|---|---|---|---|
| Claude Code Security Review | Tytuł PR wstawiono bezpośrednio do promptu systemowego bez oczyszczania | ANTHROPIC_API_KEY, GITHUB_TOKEN | Badacz zgłasza ograniczenie ps i zmiany dokumentacji; 20 kwietnia 2026 ocenę zmieniono na None |
| Gemini CLI Action | Fałszywa sekcja „Trusted Content” w komentarzu ominęła instrukcje bezpieczeństwa | GEMINI_API_KEY | Google dodało osobne prompty zabezpieczające do promptu systemowego |
| GitHub Copilot Agent | Ładunek ukryto w niewidocznym komentarzu HTML w Markdown | GITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCE | GitHub uznaje to za ograniczenie architektury, a nie błąd |
Między pierwszym a ostatnim raportem w tym cyklu ujawniania minęło prawie pięć miesięcy (pierwszy raport o Claude Code pochodził z 17 października 2025 roku, a ostatnią poprawkę błędu GitHub Copilot opublikowano 9 marca 2026 roku). Zmiana oceny i ograniczenia raportu nie dowodzą pełnego zamknięcia wszystkich ładunków. Repozytorium PoC badacza dokumentuje zademonstrowaną ścieżkę Claude; nie uruchamiaj atakującego ładunku przeciw rzeczywistym systemom. Wartością dla ciebie jest sam wzorzec ataku: niezweryfikowane dane z GitHuba trafiają do agenta, agent wykonuje polecenia, a sekrety wyciekają przez tego samego GitHuba — napastnik nie potrzebuje zewnętrznego serwera.
Opisane analizy wskazują powtarzalny wzorzec, ale nie ustalają dwutygodniowej częstotliwości odkryć ani niemożliwości napraw. Jawne zapisanie zasad bezpieczeństwa w CLAUDE.md i settings.json zamiast trzymania ich w pamięci to element inżynierii kontekstu: ustaw je raz, a będą działać automatycznie w każdej nowej sesji Claude Code, bez przypominania. Współdziałają trzy filary: klon AI + Drugi Mózg + Inżynieria Kontekstu — to połączenie zmienia Claude Code z wykonawcy, który ufa wszystkiemu, w agenta przestrzegającego jawnych zasad.
Czy fałszywy raport o błędzie z Sentry może przejąć twojego agenta?
Najważniejsze informacje
Napastnik wysyła fałszywe zdarzenie błędu do Sentry; agent pobiera przez MCP listę zgłoszeń, otrzymuje złośliwe zdarzenie pośród prawdziwych i wykonuje zawarte w nim polecenie jako „krok naprawczy”.
Do ataku wystarczy klucz DSN Sentry — publiczny identyfikator, który wiele projektów umieszcza bezpośrednio w kodzie po stronie klienta:
Mechanizm jest prosty: programista prosi agenta o sprawdzenie otwartych błędów Sentry; agent pobiera je przez serwer MCP, otrzymuje złośliwe zdarzenie zmieszane z prawdziwymi i odczytuje zawarte w nim polecenie jako zaufaną instrukcję naprawy błędu — bo formalnie właśnie o to go poproszono.
Tenet zgłasza brak alertów istniejących kontroli w testowanych środowiskach. Nie dowodzi to braku śladów wszędzie: logi agenta i narzędzi, telemetria urządzenia i zapisy sieci mogą rejestrować dalsze działania. Atak zaczyna się od zewnętrznie przesłanej telemetrii, potem zależy od faktycznych narzędzi i uprawnień agenta.
Dlaczego opis narzędzia MCP jest równie niebezpieczny jak prompt systemowy?
Najważniejsze informacje
Metadane narzędzia mogą przenosić instrukcje wpływające na model, ale nie są automatycznie równoważne autorytetowi promptu systemowego. MCPTox, zgłoszony 19 sierpnia 2025, ocenia zatruwanie realistycznych narzędzi MCP i opisuje podatność zależną od modelu i konfiguracji. Obserwacja większej podatności mocniejszych modeli dotyczy tego benchmarku, nie uniwersalnego prawa.
Sformułowanie Microsoftu jest najtrafniejsze, jakie znalazłem na ten temat:
Ta technika, zwana zatruwaniem narzędzi, polega na ukryciu instrukcji w opisie niewinnego narzędzia, co skłania agenta do działania zgodnie z nią.
Wnioski MCPTox dotyczą badanych modeli, narzędzi i konfiguracji. Nie traktuj pojedynczego wyniku odporności ani obserwacji związku ze zdolnościami jako przewidywania dla każdej instalacji; sprawdzaj rzeczywisty zakres dostępu i wykonania.
Co łączy te ataki i co może przeoczyć wykrywanie?
Najważniejsze informacje
Każde z czterech ustaleń wykorzystuje ten sam martwy punkt: agent nie odróżnia „danych do analizy” od „instrukcji do wykonania”. Skan samego repozytorium może przeoczyć późniejsze ładunki z narzędzi lub sieci. Wykrywanie pozostaje przydatne, ale musi uwzględniać całą ścieżkę wykonania. Łącz je z ograniczeniami plików, poświadczeń, narzędzi i sieci zamiast polegać na rozpoznaniu instrukcji przez agenta.
Wniosek dotyczy wszystkich czterech ustaleń: nie można ufać, że „kod wygląda normalnie” — każdy pojedynczy krok ataku jest naprawdę nieszkodliwy. Ogranicz faktyczne możliwości agenta i sprawdzaj proponowane działania; wykrywanie i ograniczanie skutków dotyczą różnych części ataku.
Jakie zabezpieczenia ma już Claude Code i dlaczego nie wystarczają?
Najważniejsze informacje
Claude Code ma wbudowane zabezpieczenia: analizuje cały prompt pod kątem podejrzanych instrukcji, używa odizolowanych okien kontekstu dla treści internetowych, sprawdza zaufanie przy pierwszym uruchomieniu w nowym folderze oraz podczas łączenia z serwerami MCP. Jednak flaga --dangerously-skip-permissions, której wiele osób używa, by wyłączyć irytujące pytania o uprawnienia, wyłącza wszystkie te zabezpieczenia naraz.
Anthropic otwarcie przyznaje się do problemu w swojej dokumentacji, zamiast go ukrywać:
Prompt injection to technika, w której napastnik próbuje zastąpić lub zmienić instrukcje asystenta AI przez wstawienie złośliwego tekstu. Claude Code zawiera kilka zabezpieczeń przed takimi atakami.
Zgodnie z dokumentacją agent analizuje cały prompt pod kątem podejrzanych instrukcji, nie zatwierdza automatycznie curl i wget, przechowuje treści internetowe w oddzielnym oknie kontekstu, by nie mieszały się z głównym, oraz wymaga potwierdzenia zaufania przy pierwszym uruchomieniu w nowej bazie kodu lub połączeniu z nowym serwerem MCP.
Jest jednak istotne zastrzeżenie, które Anthropic przedstawia bez ogródek:
Tryb bypassPermissions nie zapewnia ochrony przed prompt injection ani niezamierzonymi działaniami.
Jeśli kiedykolwiek uruchomiłeś Claude Code z --dangerously-skip-permissions, zirytowany, że „ciągle zadaje pytania”, wyłączyłeś wtedy wszystkie mechanizmy, które mogłyby zatrzymać dokładnie cztery omówione wyżej ataki. Celowo nie używam tej flagi, nawet gdy Claude Code pyta po raz dziesiąty w trakcie sesji — to irytujące, ale te pytania wyznaczają granicę między „agent przeczytał podejrzany tekst” a „agent go wykonał”. Rozsądna konfiguracja dla osoby niebędącej programistą to standardowy tryb uprawnień (default lub acceptEdits) z włączoną piaskownicą: zwykłe zmiany plików odbywają się bez dodatkowych pytań, a polecenia terminala fizycznie nie mogą wyjść poza piaskownicę, nawet jeśli agent został oszukany.
Jak włączyć tryb piaskownicy i zamknąć pozostawioną domyślnie lukę?
Najważniejsze informacje
Polecenie /sandbox w sesji Claude Code ogranicza miejsca, w których agent może zapisywać dane, oraz domeny, z którymi może się łączyć. Na macOS działa od razu; Linux i WSL2 wymagają pakietów bubblewrap i socat. Ważny szczegół: domyślnie piaskownica nie blokuje odczytu plików takich jak ~/.ssh — trzeba to włączyć osobno.
Aby włączyć ją na stałe we wszystkich projektach, zmień jedną rzecz w ~/.claude/settings.json:
{
"sandbox": { "enabled": true }
}
Domyślnie polecenia uruchomione w piaskownicy mogą zapisywać dane tylko w katalogu roboczym projektu i tymczasowym katalogu sesji. Dostęp do sieci odbywa się przez proxy — żadna domena nie jest wcześniej dozwolona, a Claude Code poprosi o potwierdzenie przy pierwszym połączeniu z nową domeną. Anthropic podaje, że znacznie ogranicza to liczbę pytań o uprawnienia — o 84% według wewnętrznych pomiarów firmy — ponieważ część bezpiecznych przypadków obsługuje sama piaskownica, zamiast za każdym razem pytać użytkownika.
Luka pozostawiona przez standardowe ustawienia: piaskownica domyślnie ogranicza zapis, ale nie blokuje odczytu plików takich jak ~/.aws/credentials i ~/.ssh. To właśnie te pliki i zmienne środowiskowe były celem opisanych wyżej analiz. Zamknij tę lukę, dodając osobny blok w tym samym pliku:
{
"sandbox": {
"enabled": true,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" },
{ "name": "NPM_TOKEN", "mode": "deny" }
]
}
}
}
Chodzi o to, że nawet jeśli powłoka zwrotna z pierwszej analizy otworzy się wewnątrz piaskownicy, te zmienne i pliki zostaną fizycznie usunięte ze środowiska procesu przed jego uruchomieniem — nie będzie już czego ukraść.
Jakie reguły permissions.deny dodać już dziś?
Najważniejsze informacje
permissions.deny w settings.json blokuje konkretne działania na poziomie reguł zamiast analizować intencje — Anthropic wyraźnie gwarantuje, że reguła deny zawsze ma pierwszeństwo przed regułą allow. Reguły deny ograniczają dopasowane działania narzędzi, lecz nie są granicą dostępu systemu operacyjnego; pośrednie polecenia i inne narzędzia wymagają własnych kontroli.
Minimalny zestaw dla osoby niebędącej programistą, obejmujący główne cele wszystkich czterech ataków:
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/credentials)",
"Read(.env)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(sudo *)"
]
}
}
Zgodnie z dokumentacją Claude Code reguły deny zawsze mają pierwszeństwo przed regułami allow. Nawet jeśli ty (lub sam agent) przypadkowo zezwolisz gdzie indziej na szerszy dostęp, konkretna reguła deny nadal zadziała jako pierwsza. Pierwszeństwo reguł dotyczy dopasowanych żądań narzędzi. Nie dowodzi nieosiągalności sekretu przez każdego potomka i narzędzie; stosuj także egzekwowane ograniczenia plików i środowiska.
Claude Code ma też tryb auto, w którym osobny model klasyfikujący sprawdza działania przed ich wykonaniem — nie jest to ten sam model, który z tobą rozmawia. Domyślnie blokuje między innymi dokładnie taki wzorzec, jak „pobierz kod i natychmiast go wykonaj” (curl | bash), na którym kończy się opisany wyżej atak. Anthropic wyraźnie ostrzega, że jest to tryb badawczy, który ogranicza liczbę monitów, ale sam nie gwarantuje bezpieczeństwa — traktuj go jako dodatkową warstwę, a nie zastępstwo piaskownicy i permissions.deny.
Jak sprawdzić repozytorium i serwer MCP, zanim zaufasz im w pracy z agentem?
Najważniejsze informacje
Zanim poprosisz Claude Code o uruchomienie obcego repozytorium, sprawdź jego wiek, historię commitów i źródło linku. Przed instalacją serwera MCP korzystaj wyłącznie ze źródeł, którym ufasz, i pamiętaj, że sam Anthropic nie sprawdza bezpieczeństwa serwerów firm trzecich. Każda z tych list kontrolnych zajmuje kilka minut i obejmuje dokładnie te punkty wejścia, których użyto we wszystkich czterech omówionych atakach.
Przed przekazaniem repozytorium agentowi skorzystaj z krótkiej listy kontrolnej:
- Nie instaluj od razu z linku w wiadomości e-mail, poście lub recenzji pochodzących z nieznanego źródła.
- Jeśli podczas instalacji wystąpi błąd z instrukcją „uruchom polecenie X, aby go naprawić”, przed zezwoleniem Claude Code sprawdź, co dokładnie robi X. Instrukcja w analizowanym wyżej przypadku wyglądała zupełnie rutynowo — na tym polegał podstęp.
- Sprawdź wiek repozytorium i historię commitów, a nie tylko liczbę gwiazdek — nowym repozytoriom łatwo sztucznie nabić gwiazdki specjalnie na potrzeby takich ataków.
- Jeśli repozytorium jest nieznane, uruchom instalację na maszynie wirtualnej, a nie na komputerze służbowym z prawdziwymi kluczami. To bezpośrednie zalecenie Anthropic dotyczące pracy z usługami zewnętrznymi.
Stanowisko Anthropic w sprawie serwerów MCP jest jawne:
Zalecamy pisanie własnych serwerów MCP lub korzystanie z serwerów dostawców, którym ufasz. Anthropic sprawdza integracje pod kątem kryteriów umieszczenia w katalogu, ale nie przeprowadza audytów bezpieczeństwa ani nie obsługuje żadnego serwera MCP.
Oznacza to, że za sprawdzenie serwerów MCP firm trzecich odpowiadasz ty, a nie platforma, na której je zainstalowano. Niektóre zespoły — głównie startupy z branży bezpieczeństwa — już tworzą takie narzędzia: skanery konfiguracji MCP wyszukujące zatrute opisy oraz „przypinanie” narzędzi, które zapisuje skrót opisu przy pierwszej instalacji i sygnalizuje późniejsze zmiany. Te technologie są nowe, więc za wcześnie, by polegać na nich jako jedynej ochronie — warto je jednak obserwować, zwłaszcza jeśli łączysz serwery MCP ze środowiskiem produkcyjnym. W takich połączeniach możesz przypiąć wersję każdego pakietu i zapisać odcisk opisów narzędzi w dzienniku audytowym.
7 zasad ochrony: dzisiejsza lista kontrolna
Najważniejsze informacje
Cały ten przewodnik sprowadza się do siedmiu konkretnych działań: trzech zmian w jednym pliku settings.json (sandbox, credentials, permissions.deny) oraz czterech nawyków dotyczących pracy z cudzym kodem, błędami i serwerami MCP. Żadne nie wymaga specjalistycznej wiedzy — cała lista zajmuje mniej niż 20 minut.
- Włącz tryb piaskownicy (
/sandboxlub"sandbox": {"enabled": true}w~/.claude/settings.json) i dodaj blokcredentials, który uniemożliwi odczyt~/.sshi~/.aws/credentials. - Dodaj reguły
permissions.denyblokujące odczyt plików z sekretami oraz niebezpieczne polecenia bash (curl,wget,sudo) — deny zawsze ma pierwszeństwo przed allow. - Nigdy nie uruchamiaj
--dangerously-skip-permissionsdla cudzego ani niezweryfikowanego kodu — wyłącza wszystkie zabezpieczenia naraz, w tym te, które mogłyby powstrzymać dokładnie takie ataki. - Nie pozwalaj Claude Code automatycznie wykonywać poleceń „naprawczych” z komunikatów o błędach — najpierw sprawdź, co faktycznie robią.
- Instaluj serwery MCP tylko z zaufanych źródeł i pamiętaj, że Anthropic nie sprawdza ich bezpieczeństwa w twoim imieniu.
- Rozdziel sesje według uprawnień: jedna pracuje z twoimi danymi osobistymi i nie widzi danych zewnętrznych; druga analizuje cudze e-maile, repozytoria i zgłoszenia, ale nie ma dostępu do sekretów; trzecia publikuje na zewnątrz — i tylko to, co osobiście zatwierdzisz. W swoich projektach ściśle tego przestrzegam: sesja mająca dostęp do kluczy płatniczych nigdy nie czyta dowolnych zewnętrznych zgłoszeń ani repozytoriów, a sesja analizująca cudzy kod w ogóle nie widzi sekretów. Nie mieszaj tych ról w jednym czacie.
- Aktualizuj Claude Code i połączone skrypty automatyzujące — większość omówionych luk została już załatana w chwili publikacji tego przewodnika, a nowe są naprawiane w podobny sposób.
Co dalej
Żadna z tych warstw nie daje gwarancji — sam Anthropic uczciwie przyznaje, że żadne zabezpieczenie nie zapewnia pełnej odporności. Nie oczekuję, że Claude Code sam rozpozna podstęp w komunikacie o błędzie lub komentarzu do zgłoszenia. Piaskownica i permissions.deny są dla mnie częścią zarządzania kontekstem projektu: tym, co agent widzi, czemu domyślnie ufa i co się dzieje, gdy popełni błąd.
Źródła
- 0DIN: Clone This Repo and I Own Your Machine, 25 czerwca 2026
- Raport Comment and Control, 15 kwietnia 2026; aktualizacja 4 maja
- Tenet Threat Labs: Agentjacking, aktualizacja 17 czerwca 2026
- MCPTox: pierwotny benchmark zatruwania narzędzi
- Claude Code Docs - Permission Modes
- Anthropic Engineering - Claude Code Sandboxing
- Claude Code Docs - Permissions
- Claude Code Docs - Security Best Practices
- Claude Code Docs - Model Context Protocol (MCP)
- Analiza powiązanej podatności w Claude Code GitHub Action
- Jak skonfigurować Claude Code, by nie zepsuł projektu przez noc
- Serwery MCP Claude Code: 7 gotowych konfiguracji i instalacja krok po kroku
- Bezpieczeństwo vibe codingu: jak zapobiec włamaniu do aplikacji zbudowanej przez AI
Jeśli potrzebujesz dostępu do sieci neuronowych przez Ailoot, zajrzyj na Ailoot.
Więcej szczegółów
Pytania i odpowiedzi
Czy podane 85% powodzenia przewiduje ryzyko mojej obecnej konfiguracji?
Nie. To zbiorcza obserwacja Tenet z kontrolowanych prób bez pełnej publicznej listy modeli, odtwarzalnego programu i dokładnego mianownika. Możliwe działania określają narzędzia, zgody, poświadczenia i sieć Twojego agenta.
Dlaczego skan sklonowanego repozytorium nie wystarcza?
Końcowy ładunek może dotrzeć później przez raport błędu, metadane narzędzia lub DNS. Sprawdzaj całą ścieżkę wykonania i ogranicz poświadczenia, pliki, narzędzia i sieć; same skanery i deny nie dowodzą pełnego ograniczenia skutków.