Badanie Apiiro ujawniło poważny problem z narzędziem Claude Code od Anthropic. Funkcja „nie pytaj ponownie” zapisuje pełne polecenia wraz z hasłami do pliku, który trafia do publicznych repozytoriów.

Jak funkcja „nie pytaj ponownie” powoduje wyciek

Claude Code prosi użytkownika o zgodę przed wykonaniem polecenia w powłoce (shell). Po wybraniu opcji „Tak i nie pytaj ponownie” agent zapisuje całą komendę wraz z wpisanymi danymi do pliku .claude/settings.local.json. Polecenie z hasłem staje się regułą uprawnień i pozostaje w folderze projektu. Plik ten nie jest oznaczany jako prywatny, więc przy kolejnym zatwierdzeniu zmian (commit) trafia do repozytorium. Wiele osób nie zdaje sobie sprawy, że zaakceptowana komenda zawiera produkcyjne dane dostępowe.

Skala problemu na GitHubie

Apiiro przeanalizowało ponad sto tysięcy kopii pliku settings.local.json. W 1122 przypadkach znaleziono rzeczywiste dane uwierzytelniające, w tym 379 haseł do baz danych i 122 klucze Supabase. 104 185 kopii pliku jest dostępnych publicznie, a 1160 kolejnych kluczy ukryto w historii systemu Git. Niektóre pliki zawierają nawet hasła roota SSH do serwerów produkcyjnych. Liczba ta rośnie, ponieważ agenci kodujący stają się coraz popularniejsi wśród programistów.

Które organizacje ucierpiały najbardziej

Wśród 63 dotkniętych firm znalazł się producent baz danych, startup B2B oraz agencja programistyczna. Jeden z przypadków dotyczył hasła właściciela medycznej bazy danych. Produkcyjny token Square oraz klucz Azure Postgres trafiły do publicznych repozytoriów przez zwykłe użycie narzędzia. Większość firm nie planowała publikacji kluczy – po prostu zaakceptowały polecenie zaproponowane przez agenta.

Dlaczego globalny gitignore nie chroni projektu

Claude Code dodaje plik do globalnej listy ignorowanych plików użytkownika. Rozwiązanie to działa tylko na jednej maszynie i nie przenosi się na inne urządzenia ani na kopie (klony) repozytorium. Brak wpisu w .gitignore projektu oznacza, że każde rozwidlenie (fork) i każdy nowy klon zawiera plik z zatwierdzonymi poleceniami. W 539 przypadkach sam agent Claude dokonał zatwierdzenia zmian zawierającego plik z poufnymi danymi.

Porównanie z tradycyjnymi skanerami danych uwierzytelniających

Popularne narzędzia, takie jak gitleaks i TruffleHog, nie wykryły jednej piątej znalezionych kluczy. Powodem jest format – hasła wpisane bezpośrednio w polecenie sshpass lub ciąg połączenia (connection string) nie pasują do znanych wzorców. 643 pliki oznaczone przez robaka Shai-Hulud potwierdziły, że problem jest realny i już wykorzystywany przez złośliwe oprogramowanie. Programiści potrzebują nowych metod detekcji dostosowanych do agentów AI.

Co powinni zrobić użytkownicy Claude Code

Najpierw należy przeszukać zasoby organizacji na GitHubie pod kątem plików .claude/settings.local.json. Następnie trzeba sprawdzić historię systemu Git nawet w repozytoriach, z których plik został już usunięty. Rotacja kluczy musi nastąpić przed czyszczeniem repozytorium. Warto też rozważyć wyłączenie funkcji „nie pytaj ponownie” w środowiskach, w których repozytorium może stać się publiczne.

Szersze konsekwencje dla agentów kodujących

Problem nie dotyczy tylko firmy Anthropic. Podobne mechanizmy autoryzacji stosują inni dostawcy agentów AI. Testy izolacji agentów pokazały już wcześniej, że oddzielenie kontekstu użytkownika od środowiska wykonawczego jest trudne. Kolejne badanie dotyczące wycieków w narzędziach Google potwierdza, że kwestia bezpieczeństwa agentów wymaga pilnych zmian w projektowaniu.

Źródła:

Apiiro blog, Hacker News, The Verge, Ars Technica, Wired