Audyt bezpieczeństwa z Claude Code
Audyt bezpieczeństwa z Claude Code łączy skanery deterministyczne (Gitleaks, TruffleHog, npm audit) z trzema recenzentami Claude: wbudowaną komendą /security-review dla diffu gałęzi, pluginem Claude Security do zweryfikowanego skanu całego repozytorium z plikami łatek oraz pluginem security-guidance działającym w trakcie pisania kodu. Każde przyjęte znalezisko potwierdza nieprzechodzący test exploita.
Dostajesz raport z pentestu: 18 znalezisk, sześć krytycznych. SQL injection w API panelu administracyjnego, sekret JWT zacommitowany dwa lata temu i zależność z opublikowanym advisory o zdalnym wykonaniu kodu. Za miesiąc przegląd zgodności, a zespół wypuszcza większość kodu przez agentów. Musisz ustalić, co jest realne, naprawić to bez psucia zachowania aplikacji i nie dopuścić, żeby te same klasy błędów wróciły. Ta strona jest dla dewelopera, który prowadzi audyt, i dla tech leada, który potem odpowiada za bramki.
Co wyniesiesz z audytu bezpieczeństwa z Claude Code
Dział zatytułowany „Co wyniesiesz z audytu bezpieczeństwa z Claude Code”- Sześciokrokową kolejność audytu, którą uruchomisz na dowolnym repozytorium w tym tygodniu: od odcięcia sekretów po bramki w CI.
- Prompty do skopiowania: ocena osiągalności podatnych zależności, przegląd sekretów w całej historii git i poprawki zaczynające się od testu exploita.
- Regułę przyjmowania znalezisk, która nie wymaga czytania całego diffu: nie ma nieprzechodzącego testu exploita, nie ma poprawki.
- Blok bezpieczeństwa do
CLAUDE.md, plik politykiclaude-security-guidance.mdi job GitHub Actions do zacommitowania bez zmian.
Które narzędzie bezpieczeństwa Claude Code do którego zadania?
Dział zatytułowany „Które narzędzie bezpieczeństwa Claude Code do którego zadania?”Claude Code ma kilka funkcji bezpieczeństwa i łatwo je pomylić. Różnią się zakresem, kosztem i tym, czy znalezisko ktoś niezależnie sprawdził. Stan na Claude Code 2.1.283 (kanał latest) i README pluginów, sprawdzone 2026-09-26.
| Narzędzie | Co skanuje | Kiedy go użyć | Co dostajesz |
|---|---|---|---|
/security-review (wbudowane) | Diff między twoją gałęzią a origin/HEAD | Przed każdym PR, który dotyka uwierzytelniania, obsługi wejścia lub dostępu do danych | Znaleziska w sesji: injection, problemy z uwierzytelnianiem, ekspozycja danych |
Plugin Claude Security (/claude-security) | Całe repozytorium, wybrany fragment, diff gałęzi, pull request albo jeden commit | Pierwszy audyt, potem cyklicznie | Raport CLAUDE-SECURITY-<timestamp>/ w Markdown, JSONL i SARIF 2.1.0 oraz opcjonalne pliki łatek |
| Plugin security-guidance | Każdą edycję, każdą zakończoną turę oraz każdy git commit i git push | Stale włączony w zespołach, w których agenci piszą większość kodu | Znaleziska wracają do Claude, zanim zobaczysz jego odpowiedź |
GitHub Action anthropics/claude-code-security-review | Każdy pull request | CI, tylko dla zaufanych PR | Komentarze inline w PR i artefakt z wynikami |
Gitleaks, TruffleHog, npm audit, Semgrep | Sekrety, pakiety ze znanymi podatnościami, wzorce oparte na regułach | Każdy commit i każde uruchomienie CI | Deterministyczne, powtarzalne wyniki |
/code-review sprawdza poprawność, a nie bezpieczeństwo; opisuje go przewodnik po automatycznym code review razem z Ultrareview i zarządzanym Code Review. Semgrep, Snyk, SonarQube i inne skanery, którymi otoczysz agenta, porównuje strona bramki bezpieczeństwa dla kodu pisanego przez agentów.
Jak przeprowadzić audyt bezpieczeństwa z Claude Code krok po kroku
Dział zatytułowany „Jak przeprowadzić audyt bezpieczeństwa z Claude Code krok po kroku”Kolejność ma znaczenie. Odcięcie sekretów idzie przed wykrywaniem, bo wyciekły klucz jest wykorzystywany, gdy ty czytasz raport. Skanery deterministyczne idą przed modelem, bo ich wynik to twarde dane, na których model może rozumować zamiast zgadywać.
-
Trzymaj sekrety poza sesją. Zanim Claude przeczyta repozytorium, zablokuj mu pliki z żywymi poświadczeniami. Dodaj to do
.claude/settings.json(ustawienia projektu):{"permissions": {"deny": ["Read(./.env)", "Read(./.env.*)", "Read(./secrets/**)"]}}Jeśli audytujesz repozytorium, któremu nie ufasz, na przykład zewnętrzną zależność, uruchom całą sesję wewnątrz sandbox-runtime od Anthropic. Plugin Claude Security nie dodaje własnej izolacji: hooki z
.claude/iCLAUDE.mdrepozytorium działają jak w każdej innej sesji. -
Uruchom skanery deterministyczne i zachowaj ich wynik. W terminalu, w katalogu głównym repozytorium:
Okno terminala gitleaks git --report-path gitleaks-report.json # sekrety w całej historii gittrufflehog git file://. --results=verified,unknown # sprawdza sekrety u wystawcynpm audit --omit=dev --json > npm-audit.json # advisory w zależnościach produkcyjnychsemgrep scan --config auto --json -o semgrep.json # wzorce oparte na regułach; auto wysyła URL projektu do Semgrep RegistryKażdy sekret, który TruffleHog oznaczy jako
verified, jest aktywny. Unieważnij go i wygeneruj nowy teraz, zanim zrobisz cokolwiek innego z tej strony. -
Zainstaluj plugin Claude Security i przeskanuj kod. W prompcie Claude Code:
/plugin install claude-security@claude-plugins-official/reload-plugins/claude-securityMenu oferuje Scan codebase, Scan changes i Suggest patches. Możesz je pominąć zwykłą prośbą, na przykład
run a quick Claude Security scan on the whole repo. Skan podaje swój czas i koszt w tokenach i raz prosi o potwierdzenie. Wymaga Pythona 3.9 lub nowszego wPATH. README pluginu zaleca Claude Opus 5.5 albo Claude Fable 5.1 (zobacz przegląd modeli) i ostrzega, że zabezpieczenia cybernetyczne mogą przełączyć część skanu na Opus 4.8.Każde kandydujące znalezisko trafia do agentów weryfikujących, których zadaniem jest je obalić; do
CLAUDE-SECURITY-RESULTS.mdtrafia tylko to, co przetrwa. Każdy katalog najwyższego poziomu jest albo skanowany, albo odłożony z podanym powodem, a sekcja Coverage raportu wymienia wszystko, co pominięto, i dlaczego, więc czysty wynik mówi ci, co faktycznie sprawdzono. -
Oceń advisory zależności pod kątem osiągalności.
npm auditraportuje to, co jest zainstalowane, a nie to, co wywołuje twój kod. Przekaż Claude zapisany raport i poproś o analizę ekspozycji (prompt niżej). Advisory w kodzie, do którego aplikacja nigdy nie dociera, trafiają do śledzonego backlogu, a nie do pracy na ten tydzień. -
Naprawiaj, zaczynając od testu exploita. Dla każdego przyjętego znaleziska Claude pisze test, który wykonuje exploit i nie przechodzi na obecnym kodzie, potem poprawkę, a potem pokazuje przechodzący test. Zadanie Suggest patches w Claude Security zapisuje jeden
F<n>.patchna znalezisko wCLAUDE-SECURITY-<timestamp>/patches/i niczego samo nie aplikuje. Przeczytaj notatkę obok każdej łatki i zastosuj ją poleceniemgit apply CLAUDE-SECURITY-<timestamp>/patches/F1.patch. -
Postaw bramki, żeby te same klasy błędów nie wracały. Dodaj reguły do
CLAUDE.mdi plugin security-guidance opisane niżej, wpisz/security-revieww rutynę przed każdym PR, a Gitleaks i Action z przeglądem bezpieczeństwa wstaw do CI.
Prompty do audytu bezpieczeństwa do skopiowania
Dział zatytułowany „Prompty do audytu bezpieczeństwa do skopiowania”Pierwszego promptu użyj, gdy nie możesz zainstalować pluginu, na przykład w zablokowanej instalacji firmowej. Wymaga tych samych dowodów co plugin: ścieżki exploita, a nie dopasowania wzorca.
Jak zweryfikować poprawki bezpieczeństwa bez czytania każdej linii?
Dział zatytułowany „Jak zweryfikować poprawki bezpieczeństwa bez czytania każdej linii?”Audyt ma wartość tylko wtedy, gdy jego wynik możesz przyjąć na podstawie dowodów. Te kontrole zastępują czytanie każdej poprawki linia po linii:
| Dowód | Co udowadnia | Kto zatwierdza |
|---|---|---|
| Test exploita, który nie przechodził przed poprawką i przechodzi po niej | Znalezisko było prawdziwe i jest zamknięte | Deweloper odpowiedzialny za moduł |
| Cały zestaw testów na zielono | Poprawka nie zmieniła poprawnego zachowania | CI |
Czysty Gitleaks i npm audit --audit-level=high w CI | Brak nowych sekretów i advisory o wysokiej wadze | CI, jako wymagany check |
| SARIF wgrany do GitHub code scanning | Znaleziska są śledzone między skanami; stabilny claudeSecurityPluginFindingId odróżnia nowe od znanych | Tech lead przegląda otwartą listę co tydzień |
CLAUDE-SECURITY-REVISION-<sha12>.json | Który commit przeskanowano, z jakim wysiłkiem i jak dokładnie zweryfikowano wyniki | Dołączony do dokumentacji audytu |
| Wyciszenie z pisemnym uzasadnieniem | Fałszywy alarm został oceniony, a nie zignorowany | Tech lead albo osoba odpowiedzialna za bezpieczeństwo |
Skan Claude Security działa na twojej maszynie, więc nic nie wgra jego SARIF za ciebie. Zacommituj katalog raportu na gałąź audytu i dodaj do workflow krok z github/codeql-action/upload-sarif oraz sarif_file: CLAUDE-SECURITY-<timestamp>/CLAUDE-SECURITY-RESULTS.sarif; bez code scanning zarchiwizuj SARIF razem z dokumentacją audytu.
Człowiek nadal czyta dwie rzeczy: test exploita (czy atakuje to, co opisuje znalezisko?) i każde wyciszenie. Obie są krótkie. Samą poprawkę ocenia test, zestaw testów i ponowny skan.
Zapisz reguły bezpieczeństwa tak, żeby obowiązywały przy każdej zmianie
Dział zatytułowany „Zapisz reguły bezpieczeństwa tak, żeby obowiązywały przy każdej zmianie”CLAUDE.md kształtuje to, co Claude pisze; plugin security-guidance sprawdza to, co napisał. Używaj obu. Zacznij od takiego bloku w projektowym CLAUDE.md (gdzie się ładuje, opisuje przewodnik po systemie pamięci):
## Security requirements
- Database access goes through the ORM or parameterized queries. Never build SQL with string concatenation or template literals.- Every route requires the auth middleware except this list: /health, /ready, /api/auth/login, /api/auth/register.- Passwords are hashed with argon2id or bcrypt (cost 12). Never MD5 or SHA-family hashes for passwords.- All request bodies, query parameters and path parameters are validated with Zod schemas before use.- Secrets come from environment variables. Never commit a credential, including in tests or fixtures.- Outbound HTTP to a user-supplied URL goes through src/lib/net/safe-fetch.ts (SSRF allowlist).- A security fix ships with a test that performs the exploit.Następnie zainstaluj plugin security-guidance, który działa jako hooki i nie zajmuje stale kontekstu:
claude plugin install security-guidance@claude-plugins-officialMa trzy warstwy: ostrzeżenia regex dla około 25 niebezpiecznych wzorców przy każdym Edit/Write, przegląd diffu przez LLM, gdy Claude kończy turę, oraz agentowego recenzenta przy git commit i git push, który śledzi przepływ danych między plikami. Wymaga Claude Code 2.1.144 lub nowszego i Pythona 3.8 lub nowszego. Przegląd diffu domyślnie używa claude-opus-4-7; zmienisz to zmienną SECURITY_REVIEW_MODEL (a recenzenta przy commicie zmienną SG_AGENTIC_MODEL), podając na Bedrocku lub Google Cloud identyfikator modelu właściwy dla dostawcy. Reguły specyficzne dla twojego kodu umieść w .claude/claude-security-guidance.md i zacommituj razem z repozytorium:
# Payments API security rules
- Reads from the customers and orders tables use db.replica, never db.primary.- Background jobs never use a user's auth token; they call jobs.getServiceAccount().- Any fetch() with a user-controlled URL must use safeFetch() from src/lib/net/safe-fetch.ts.Plik ma budżet 8 KB i trafia do modelu przy każdym przeglądzie, więc nie trzymaj w nim sekretów. Recenzent uruchamiany przy commicie jeszcze go nie czyta (README pluginu, 2026-09-26).
Dodaj bramkę przeglądu bezpieczeństwa do CI
Dział zatytułowany „Dodaj bramkę przeglądu bezpieczeństwa do CI”Skaner deterministyczny niech będzie wymaganym checkiem, a recenzent Claude doradcą przy każdym PR. Tylko job z przeglądem może pisać komentarze w PR. Zapisz to jako .github/workflows/security.yml:
name: Securityon: pull_request:permissions: contents: readjobs: secrets: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: persist-credentials: false fetch-depth: 0 - uses: gitleaks/gitleaks-action@v3 # v2 działała na Node 20, którego runnery GitHuba już nie mają env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }} # darmowy klucz; wymagany dla repozytoriów organizacji claude-review: runs-on: ubuntu-latest permissions: contents: read pull-requests: write # tylko ten job komentuje PR steps: - uses: actions/checkout@v7 with: persist-credentials: false ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 2 # Przed poleganiem na tym jobie przypnij Action do pełnego SHA commita zamiast @main - uses: anthropics/claude-code-security-review@main with: comment-pr: true claude-api-key: ${{ secrets.CLAUDE_API_KEY }} claude-model: claude-opus-5-5 # domyślny model Action to claude-opus-4-1-20250805, wycofany z Claude APIDwie linie w tym pliku nie są opcjonalne. Domyślny model samej Action to claude-opus-4-1-20250805, a Claude Opus 4.1 został wycofany z Claude API, więc workflow skopiowany z quick startu Action bez claude-model nie ma na czym działać (aktualne identyfikatory modeli znajdziesz w przeglądzie modeli). Z kolei gitleaks-action@v2 działała na Node 20; jej README (sprawdzone 2026-09-26) przechodzi na @v3 z actions/checkout@v6, bo GitHub we wrześniu 2026 usuwa Node 20 ze swoich runnerów. Ta strona przypina actions/checkout@v7, aktualną wersję główną (v7.0.1, sprawdzone 2026-10-03). Klucz claude-api-key musi mieć włączony dostęp zarówno do Claude API, jak i do Claude Code.
README tej Action mówi wprost, że nie jest odporna na prompt injection. W repozytorium publicznym włącz Require approval for all external contributors, żeby job ruszał dopiero wtedy, gdy maintainer obejrzy PR. Przewodnik po pipeline CI/CD opisuje sekrety i przypinanie wersji, a cykliczne skany bezpieczeństwa — uruchamianie skanu tylko do odczytu według harmonogramu, z zachowanymi dowodami.
Gdy audyt bezpieczeństwa z Claude Code idzie nie tak
Dział zatytułowany „Gdy audyt bezpieczeństwa z Claude Code idzie nie tak”/security-review kończy się błędem fatal: ambiguous argument 'origin/HEAD...'. Komenda porównuje z origin/HEAD, którego często brakuje w klonach jednogałęziowych i w CI. Uruchom git fetch origin i git remote set-head origin --auto albo podaj gałąź wprost: git remote set-head origin main, i spróbuj ponownie.
Job z przeglądem bezpieczeństwa pada, zanim cokolwiek skomentuje. Najpierw poszukaj w logu błędu modelu: bez claude-model Action prosi o claude-opus-4-1-20250805, którego Claude API już nie obsługuje. Ustaw claude-model jak w workflow powyżej. Jeśli log pokazuje za to błąd środowiska Node w kroku Gitleaks, przejdź na gitleaks/gitleaks-action@v3.
Dwa skany zwracają różne znaleziska. Skany oparte na modelu są niedeterministyczne. Śledź znaleziska po claudeSecurityPluginFindingId w code scanning zamiast porównywać raporty na oko i planuj skany cyklicznie, żeby pokrycie rosło z czasem.
Claude zgłasza jako nieuwierzytelnioną trasę, która z założenia jest publiczna. Dopisz ją do listy tras publicznych w CLAUDE.md. Plugin security-guidance traktuje komentarz inline wyjaśniający, dlaczego linia jest bezpieczna, jako wyłączenie. W Action wskaż w false-positive-filtering-instructions plik tekstowy z zaakceptowanymi wzorcami.
Łatka zamyka znalezisko, ale psuje poprawne żądania. Przegląd łatek w Claude Security traktuje zmianę akceptowanych danych wejściowych jako zmianę zachowania i informuje, gdy żaden test projektu nie wykonał łatanego kodu. Traktuj taką notatkę jako brakujący test: przed zastosowaniem łatki napisz test dla poprawnego przypadku.
Aktualizacja zależności psuje build. Poproś o analizę changelogu z promptu o osiągalności przed aktualizacją i podnoś jedną wersję główną na commit, żeby czerwony zestaw testów wskazywał jeden pakiet.
Restrykcyjny Content-Security-Policy psuje frontend. Wdróż go najpierw jako Content-Security-Policy-Report-Only, zbierz naruszenia z konsoli przeglądarki lub endpointu raportów i wklej je Claude, żeby dopuścił dokładnie te źródła.
Przegląd w hooku Stop uruchamia się na pracy innego agenta. W układach ze wspólnym worktree, w których kilku agentów przesuwa HEAD, ustaw ENABLE_STOP_REVIEW=0 i zostaw przeglądy przy commicie i pushu.
Raport albo log zawiera poświadczenie. Claude Security w miarę możliwości zamazuje wartości poświadczeń w raportach, a katalog raportu ma własny .gitignore. Sprawdź pliki, zanim je komuś udostępnisz.
Co dalej po audycie bezpieczeństwa
Dział zatytułowany „Co dalej po audycie bezpieczeństwa”Ten sam audyt w pozostałych narzędziach: audyt bezpieczeństwa z Codex, Codex Security i bezpieczeństwo w Cursorze. Wróć do przeglądu sekcji Eksploatacja.