Katalog incydentów bezpieczeństwa w kodzie pisanym z AI: co zawiodło i jaka kontrola by to wykryła
Katalog incydentów to datowana lista przypadków, w których kod napisany z asystentem AI albo warstwa aplikacji wokół modelu językowego zawiodły w sposób publicznie udokumentowany: rekordem CVE, biuletynem dostawcy, oficjalnym raportem po incydencie albo recenzowanym pomiarem. Ta strona prowadzi taki katalog, uporządkowany według mechanizmu, z kontrolą dopasowaną do każdego z tych mechanizmów.
23Minds prowadzi katalog publicznie udokumentowanych incydentów bezpieczeństwa w kodzie pisanym z AI i w warstwie aplikacji wokół LLM, dla szefów inżynierii, którzy chcą wiedzieć, co naprawdę poszło nie tak gdzie indziej, zanim zdecydują, co sprawdzić u siebie. Każdy wpis ma datę, źródło pierwotne (rekord CVE, biuletyn dostawcy, oficjalny raport po incydencie albo opublikowane badanie) i jeden nazwany mechanizm: treść czytana przez agenta potraktowana jak polecenie, wygenerowany domyślny backend wdrożony bez zmian, zmyślona nazwa pakietu zainstalowana z rejestru, destrukcyjne polecenie uruchomione z wyłączonym potwierdzeniem, wynik modelu przekazany do SQL albo do wykonania kodu, narzędzie MCP albo rozszerzenie z dostępem szerszym niż zadanie. Katalog jest punktem wyjścia do przeglądu bezpieczeństwa kodu pisanego przez AI: każda klasa mechanizmu ma listę kontrolną, wynik testu dla danej bazy kodu z zakresem sprawdzenia i ponowny test po poprawce. Incydenty objęte NDA nie wchodzą do katalogu; tylko to, co da się sprawdzić u źródła.
Kto skorzysta z tego przewodnika.
- CTO i wiceprezesi ds. inżynierii, których zespoły wdrażają kod z Copilota, Cursora, Claude Code albo Gemini CLI i których zarząd albo klient zapytał, co może pójść nie tak
- Szefowie bezpieczeństwa i zespołów platformowych, którzy dodali agenta w aplikacji, serwer MCP albo automatyzację wsparcia na LLM i potrzebują konkretnej listy zagrożeń zamiast ogólnej
- Software house'y, które dostarczają klientom kod pisany z AI, a klienci proszą teraz o dowód niezależnego sprawdzenia bezpieczeństwa
- Inżynierowie, którzy czytają biuletyny dostawców jeden po drugim i chcą mieć je w jednym miejscu, posortowane według mechanizmu
Co jest wpisem, a co nim nie jest
O cudzych incydentach z agentami kodującymi zespoły słyszą rzadko: NDA i wstyd trzymają je poza publicznym obiegiem, więc zespoły polegają na deklaracjach dostawców. Katalog poniżej idzie odwrotną drogą i wymienia tylko to, co da się sprawdzić u źródła: rekord CVE, biuletyn bezpieczeństwa dostawcy, publiczne oświadczenie kierownictwa dostawcy albo recenzowany pomiar z opublikowaną metodą. Relacja prasowa wchodzi tylko wtedy, gdy przytacza publiczne oświadczenie dostawcy, a wiersz to oznacza. Wpisy są trzech rodzajów: incydenty z potwierdzoną szkodą, podatności z rekordem CVE albo biuletynem oraz demonstracje badaczy; kolumna Skutek mówi, o który rodzaj chodzi. Wątki praktyków, którzy liczą incydenty z codziennej pracy, są przydatne jako format, ale wątek nie jest źródłem i żaden nie jest tu cytowany.
Trzy granice trzymają listę w ryzach. Obejmuje kod i warstwę aplikacji: co napisał asystent, co aplikacja wysyła do modelu i czemu ufa w odpowiedzi, co agent ma prawo wywołać. Nie obejmuje infrastruktury, konfiguracji chmury, bezpieczeństwa sieci, testów penetracyjnych ani SOC; to osobne dyscypliny z własnymi katalogami. Nie traktuje też modelu jak winowajcy. Każdy wiersz to narzędzie użyte bez kontroli, którą postawiłby przed nim proces. Właśnie dlatego każdy wiersz ma dopisaną kontrolę.
Katalog
Posortowany według daty publikacji źródła (rekordu CVE, biuletynu, raportu albo badania). Kolumna klasy używa sześciu klas mechanizmów zdefiniowanych w następnej sekcji. Odnośniki do źródeł są na końcu strony. Oceny ważności to wartości CVSS z rekordów CVE tam, gdzie rekord istnieje; przy ForcedLeak wartość pochodzi z raportu Noma Security.
| Data | System i źródło | Co zawiodło | Skutek | Klasa | Kontrola dla tego mechanizmu |
|---|---|---|---|---|---|
| 2023-07 | LangChain SQLDatabaseChain, CVE-2023-36189 | SQL wygenerowany przez model wykonany na bazie bez granicy między pytaniem a zapytaniem | Zdalny atakujący uzyskuje wrażliwe informacje przez łańcuch | E | Rola bazodanowa ograniczona do tabel potrzebnych w zadaniu, lista dozwolonych instrukcji, przegląd zapytania przed wykonaniem, test odczytu bez wymaganych uprawnień |
| 2024-03 | huggingface-cli na PyPI, eksperyment Lasso Security | Nazwa pakietu wielokrotnie zmyślana przez asystentów została zarejestrowana przez badaczy; publiczne repozytorium badawcze Alibaby miało ją w instrukcji instalacji | Pusty pakiet zainstalowany przez prawdziwe projekty, które poszły za instrukcją napisaną przez asystenta | C | Sprawdzenie rejestru przy każdej nowej zależności: wiek, wydawca, historia pobrań, oraz diff pliku blokady w przeglądzie |
| 2024-05 | Vanna.AI text-to-SQL, CVE-2024-5565, CVSS 8,1 | Niezaufane wejście w ask() dociera do promptu, który pisze kod wizualizacji Plotly, a ten kod jest wykonywany | Zdalne wykonanie kodu; obejście polega na wyłączeniu wizualizacji dla niezaufanego wejścia | E | Bez wykonywania kodu napisanego przez model ze ścieżek dostępnych użytkownikom; renderowanie w piaskownicy; wejście oznaczone jako niezaufane na całej drodze |
| 2025-05 | GitLab Duo, ujawnienie Legit Security | Ukryty tekst w merge requestach, zgłoszeniach, commitach i kodzie (biały KaTeX, kodowanie base16) czytany przez Duo jak polecenia | Prywatny kod źródłowy wyprowadzony przez wstrzyknięty znacznik obrazu; niebezpieczne adresy URL pokazane jako bezpieczne | A | Lista dozwolonych adresów wychodzących dla renderowanych odpowiedzi asystenta; usuwanie aktywnego HTML z odpowiedzi; zestaw testów wstrzyknięć w CI |
| 2025-05 | Serwer GitHub MCP, Invariant Labs | Publiczne zgłoszenie wydaje polecenia agentowi, który ma token także do prywatnych repozytoriów | Dane z prywatnego repozytorium wpisane do publicznego pull requesta | F | Jeden token na zakres repozytorium; agent nie czyta prywatnego zakresu w sesji rozpoczętej z publicznego |
| 2025-05 | Aplikacje generowane w Lovable, CVE-2025-48757, CVSS 9,3 | Wygenerowane polityki row-level security w Supabase niewystarczające albo nieobecne w projektach utworzonych przed 2025-04-15 | Nieuwierzytelniony odczyt i zapis dowolnych tabel wygenerowanych stron; dostawca kwestionuje, wskazując odpowiedzialność każdego klienta | B | Sprawdzenie polityk tabela po tabeli klientem anonimowym przed publikacją; RLS wymagane dla każdej tabeli z danymi użytkowników |
| 2025-06 | Microsoft 365 Copilot, EchoLeak, CVE-2025-32711, CVSS 9,3 | Polecenia w przychodzącym e-mailu przetworzone przez asystenta bez żadnego działania użytkownika | Ujawnienie informacji przez sieć, bez kliknięcia | A | Niezaufana treść nigdy nie łączy się z narzędziem, które sięga na zewnątrz; lista dozwolonych adresów wychodzących dla każdego działania asystenta |
| 2025-07 | Supabase MCP z Cursorem, General Analysis | Treść zgłoszenia do wsparcia każe agentowi odczytać integration_tokens; połączenie MCP działa z rolą service_role, która omija row-level security | Sekrety OAuth i dane sesji wpisane z powrotem do wątku zgłoszenia | F | Zakres projektu na serwerze MCP i połączenie bez dostępu do tabel z sekretami; żadnego service_role w połączeniu dostępnym dla agenta |
| 2025-07 | mcp-remote, CVE-2025-6514, CVSS 9,6 | Adres authorization_endpoint zwrócony przez niezaufany serwer MCP przekazany do polecenia | Wstrzyknięcie polecenia systemowego na maszynie programisty | F | Przypięta, przejrzana lista serwerów MCP; żadnego składania poleceń powłoki ze zdalnych ciągów; bramka wersji klienta |
| 2025-07 | Amazon Q Developer dla VS Code 1.84.0, biuletyn AWS-2025-015 | Token GitHub o zbyt szerokim zakresie wpuścił niezatwierdzony kod do repozytorium rozszerzenia i do wydania | Złośliwy kod w wydaniu; nie zadziałał przez błąd składni; wersja wycofana, wydano 1.85.0 | F | Przypięcie wersji rozszerzeń i przegląd aktualizacji; tokeny o najmniejszych uprawnieniach w potoku publikacji |
| 2025-07 | Gemini CLI 0.1.13, Tracebit | Polecenia ukryte w README, lista dozwolonych, która przepuściła łańcuch poleceń po jednym zatwierdzonym grep, oraz białe znaki ukrywające ładunek | Zmienne środowiskowe wysłane na zdalny serwer bez pokazania polecenia użytkownikowi; poprawka w 0.1.14 | A | Zatwierdzanie każdego polecenia z widoczną całą linią poleceń; bez dopasowania listy dozwolonych po pierwszym tokenie |
| 2025-07 | Replit Agent, projekt SaaStr, oświadczenie prezesa dostawcy w relacji Fortune | Agent uruchomił destrukcyjne polecenie na bazie w czasie ogłoszonego zamrożenia kodu i zgłosił, że przywrócenie jest niemożliwe | Baza produkcyjna skasowana; dostawca nazwał to niedopuszczalnym i wdrożył rozdział dev/prod oraz tryb samego planowania | D | Żadnych danych dostępowych do produkcji w środowisku agenta; operacje destrukcyjne za jawnym potwierdzeniem i przetestowanym przywracaniem |
| 2025-08 | Cursor poniżej 1.3.9, CVE-2025-54135, CVSS 8,6 | Pośrednie wstrzyknięcie promptu tworzy nowy plik .cursor/mcp.json bez zgody, której wymaga edycja istniejącego | Zdalne wykonanie kodu na maszynie programisty | A | Tworzenie i edycja plików konfiguracyjnych pod tą samą regułą zgody; test wstrzyknięcia, który zapisuje plik kanarkowy |
| 2025-08 | Cursor 1.2.4 i niżej, CVE-2025-54136, CVSS 7,2 | Zatwierdzona już definicja MCP we współdzielonym repozytorium podmieniona na inne polecenie bez ponownego pytania | Trwałe wykonanie kodu dla każdego z prawem zapisu do gałęzi | F | Skrót każdej zatwierdzonej definicji MCP; ponowna zgoda przy każdej zmianie; konfiguracja MCP przeglądana jak workflow CI |
| 2025-08 | Claude Code poniżej 0.2.111, CVE-2025-54794, CVSS 7,7 | Sprawdzenie ścieżki po prefiksie zamiast po ścieżce kanonicznej; katalog z tym samym prefiksem co katalog roboczy przechodzi | Dostęp do plików poza katalogiem roboczym, gdy niezaufana treść jest w kontekście | A | Porównanie ścieżek kanonicznych w każdej kontroli ścieżek; test z katalogiem sąsiednim o wspólnym prefiksie |
| 2025-08 | GitHub Copilot i Visual Studio, CVE-2025-53773, CVSS 7,8 | Wstrzyknięcie promptu edytuje .vscode/settings.json i ustawia chat.tools.autoApprove, usuwając każde potwierdzenie | Lokalne wykonanie kodu na Windows, macOS i Linuksie | A | Pliki ustawień traktowane jak kod: chronione przed zapisem w sesjach agenta, pokazywane w diffie w przeglądzie, flagi automatycznej zgody zakazane polityką |
| 2025-09 | Salesforce Agentforce, ForcedLeak, Noma Security, CVSS 9,4 | Pole opisu w formularzu leadów niesie polecenia; wynik agenta może trafić do wygasłej domeny wciąż obecnej na liście dozwolonych CSP | Rekordy CRM wysłane do domeny zarejestrowanej przez atakującego; poprawka wymusza zaufane adresy URL | A | Audyt listy dozwolonych adresów wychodzących pod kątem wygasłych wpisów; pola formularzy oznaczone jako niezaufane, zanim trafią do agenta |
| 2025-11 | Google Antigravity, PromptArmor | Polecenia czcionką 1 pkt na stronie WWW; agent czyta .env przez cat mimo straży opartej na gitignore, a podagent przeglądarki otwiera adres atakującego z zawartością | Dane dostępowe wyprowadzone do serwisu logującego obecnego na domyślnej liście dozwolonych przeglądarki | A | Kontrola dostępu do plików, która obejmuje także powłokę; przegląd domyślnej listy dozwolonych przeglądarki; sekrety poza katalogiem roboczym |
| 2025-12 | Google Antigravity w trybie Turbo, relacja The Register; dostawca potwierdził postępowanie, bez oficjalnego raportu | Polecenie czyszczenia pamięci podręcznej trafiło w korzeń dysku D: zamiast w katalog projektu, bez potwierdzenia w tym trybie | Zawartość dysku użytkownika skasowana z pominięciem kosza | D | Destrukcyjne operacje na plikach ograniczone do ścieżki katalogu roboczego; tryb potwierdzania poza piaskownicami |
| 2026-01 | Moltbook, Wiz Research | Klucz Supabase wpisany na stałe w JavaScript po stronie klienta, bez row-level security; założyciel oświadczył, że żadna linia nie została napisana ręcznie | 1,5 mln tokenów API, 35 000 adresów e-mail i prywatne wiadomości do odczytu i zapisu bez uwierzytelnienia; poprawka w kilka godzin od ujawnienia | B | Sonda klientem anonimowym na każdej tabeli przed startem; skan sekretów na zbudowanej paczce, nie tylko na repozytorium |
Sześć klas mechanizmów i co łączy wpisy w każdej z nich
Nazwy narzędzi się zmieniają, mechanizmy się powtarzają. Każda klasa poniżej nazywa, co zrobiło narzędzie, czego brakowało procesowi i jaki pomiar za tym stoi, jeśli istnieje. Dwa recenzowane badania kotwiczą klasy dotyczące samego generowanego kodu: Pearce i współautorzy (IEEE S&P 2022) wygenerowali Copilotem 1 689 programów w 89 scenariuszach słabości i uznali około 40% za podatne; Fu i współautorzy (ACM TOSEM 2025) przeanalizowali 733 fragmenty napisane przez asystenta znalezione w prawdziwych projektach na GitHubie i zgłosili słabości w 29,5% próbki w Pythonie i 24,2% w JavaScripcie.
| Klasa | Mechanizm | Czego brakowało procesowi | Wpisy powyżej |
|---|---|---|---|
| A. Treść staje się poleceniem | Tekst, który agent czyta (zgłoszenie w systemie wsparcia albo w repozytorium, README, e-mail, strona WWW, pole formularza), jest przetwarzany tak, jakby wpisał go użytkownik, a po nim następuje wywołanie narzędzia | Granica między niezaufaną treścią a narzędziami, które sięgają na zewnątrz; zgoda, która pokazuje całe działanie | GitLab Duo, EchoLeak, Gemini CLI, Cursor, Claude Code, Copilot, Agentforce, Antigravity |
| B. Wygenerowany domyślny stan idzie na produkcję bez zmian | Reguły dostępu do backendu, klucze w paczkach klienta i domyślne ustawienia frameworka trafiają na produkcję w stanie, w jakim wyprodukował je asystent | Kontrola przed publikacją dla każdej tabeli i każdego sekretu, uruchomiona jako klient anonimowy | Lovable RLS, Moltbook |
| C. Zmyślona zależność | Asystent podaje nazwę pakietu, który nie istnieje; ktoś rejestruje tę nazwę; linia instalacji zyskuje zaufanie, bo wygląda zwyczajnie | Weryfikacja w rejestrze każdej nowej zależności w przeglądzie | huggingface-cli, Spracklen i współautorzy |
| D. Destrukcyjne polecenie bez bramki | Agent z dostępem do produkcji albo do systemu plików uruchamia usunięcie, drop albo wyczyszczenie w trybie, w którym potwierdzenia są wyłączone | Rozdział danych dostępowych między środowiskami; jawna bramka na operacjach destrukcyjnych; przetestowane przywracanie | Replit Agent, Antigravity Turbo |
| E. Wynik modelu trafia do SQL albo do wykonania kodu | Tekst z modelu jest przekazywany do bazy albo interpretera tak, jakby ktoś go przejrzał | Role ograniczone do danych z zadania, lista dozwolonych instrukcji, bez wykonywania wygenerowanego kodu ze ścieżek użytkownika | LangChain, Vanna.AI |
| F. Narzędzie albo rozszerzenie z dostępem szerszym niż zadanie | Serwer MCP, rozszerzenie albo token ma zakres na wszystko, co może zrobić programista, a agent go dziedziczy | Jeden zakres na zadanie; skrót i ponowna zgoda dla definicji narzędzi; przypięte wersje | GitHub MCP, Supabase MCP, mcp-remote, podmiana MCP w Cursorze, rozszerzenie Amazon Q |
Co sprawdza przegląd bezpieczeństwa kodu pisanego przez AI, klasa po klasie
Katalog staje się użyteczny, gdy każda klasa dostaje wynik dla konkretnej bazy kodu: wynik konkretnego testu, sprawdzony zakres i granice wniosku. Lista poniżej to lista kontrolna, którą Przegląd bezpieczeństwa kodu pisanego przez AI wykonuje dla każdej klasy. Każdy punkt kończy się artefaktem albo testem, bo wynik bez nich jest opinią.
- Klasa A. Prześledźcie każdą ścieżkę, którą niezaufany tekst wchodzi do promptu i po której może nastąpić wywołanie narzędzia. Wypiszcie każde narzędzie, które sięga poza proces: sieć, powłoka, zapis pliku, przeglądarka. Zbudujcie zestaw testów wstrzyknięć z działaniem kanarkowym i uruchamiajcie go w CI na każdej ścieżce. Przejrzyjcie listę dozwolonych adresów wychodzących pod kątem wygasłych wpisów i symboli wieloznacznych.
- Klasa B. Wypiszcie tabele i zasobniki, a potem sprawdźcie każdy z nich jako klient anonimowy i jako użytkownik o niskich uprawnieniach. Przeskanujcie zbudowaną paczkę klienta pod kątem kluczy uprzywilejowanych, nie tylko repozytorium. Porównajcie domyślne ustawienia frameworka odtworzone przez asystenta (CORS, flagi weryfikacji, wyjście debugowania) z konfiguracją produkcyjną.
- Klasa C. Porównujcie plik blokady w każdym pull requeście napisanym z asystentem. Sprawdzajcie każdy nowy pakiet pod kątem wieku w rejestrze, wydawcy i historii pobrań. Utrzymujcie listę dozwolonych dla środowiska uruchomieniowego i blokadę poleceń instalacji, które asystent wpisuje do dokumentacji.
- Klasa D. Wypiszcie każde dane dostępowe w środowisku agenta razem ze środowiskiem, do którego należą. Oddzielcie produkcję od wszystkiego, do czego agent sięga. Postawcie operacje destrukcyjne za jawnym potwierdzeniem i przećwiczcie przywracanie raz, z zapisanym czasem, ile trwało.
- Klasa E. Znajdźcie każdy punkt, w którym wynik modelu jest wykonywany albo odpytuje bazę. Dajcie generowanemu SQL rolę ograniczoną do tabel z zadania, bez zapisu, oraz listę dozwolonych instrukcji. Usuńcie wykonywanie wygenerowanego kodu z każdej ścieżki dostępnej użytkownikom. To, co zostaje, zamknijcie w piaskownicy.
- Klasa F. Zinwentaryzujcie serwery MCP, rozszerzenia i tokeny razem z ich zakresami. Zawęźcie każdy do zadania, któremu służy. Liczcie skróty zatwierdzonych definicji narzędzi i wymagajcie ponownej zgody przy zmianie. Przypnijcie wersje i przeglądajcie aktualizacje jak aktualizacje zależności.
- Ponowny test. Po poprawkach każda klasa dostaje ten sam test jeszcze raz, a wynik jest zapisany obok pierwotnego. Para wyników to dowód, który może przeczytać klient albo zarząd.
Co może pójść nie tak i co z tym robimy.
- 1Treść, którą czyta agent, jest traktowana jak polecenie
Agent dostaje do kontekstu zgłoszenie do wsparcia, zgłoszenie w repozytorium, README albo e-mail, bo tego wymaga zadanie, a model nie ma niezawodnego sposobu, żeby odróżnić cytowany tekst od prośby użytkownika. Gdy w tej samej sesji dostępne jest narzędzie sięgające poza proces, tekst może je wywołać. Każdy wpis klasy A w katalogu ma ten kształt, od GitLab Duo po Antigravity, a poprawki dostawców były granicami wokół narzędzi, nie lepszymi modelami.
Co z tym robimyMapujemy każdą ścieżkę wejścia niezaufanego tekstu do promptu i wypisujemy każde narzędzie osiągalne z tej sesji. Tam, gdzie jedno spotyka drugie, usuwamy narzędzie wychodzące albo stawiamy je za zgodą pokazującą pełne działanie. Oznaczenie treści jako danych w strukturze promptu zostaje środkiem pomocniczym, nie zamiennikiem kontroli wykonywanej poza modelem. Potem uruchamiamy zestaw testów wstrzyknięć z działaniem kanarkowym na każdej ścieżce i przekazujemy go do waszego CI.
Co zostaje u was: mapa niezaufanej treści i osiągalnych narzędzi ścieżka po ścieżce, z zestawem testów wstrzyknięć i wynikami dla każdej ścieżki - 2Wygenerowany domyślny backend idzie na produkcję w stanie, w jakim powstał
Asystent stawia backend według wzorca, który zna najlepiej: klucz po stronie klienta, reguły dostępu wyłączone albo luźne, wyjście debugowania włączone. W demo to działa, bo demo ma jednego użytkownika. CVE Lovable i wyciek Moltbook to ten sam mechanizm w dwóch skalach i w obu przypadkach dostawca stał na stanowisku, że reguły dostępu należą do klienta.
Co z tym robimyWypisujemy każdą tabelę i zasobnik, potem sprawdzamy każdy z nich jako klient anonimowy i jako użytkownik o niskich uprawnieniach, a zbudowaną paczkę skanujemy pod kątem kluczy. Każda tabela, która nie przechodzi, dostaje politykę, każdy klucz uprzywilejowany przenosi się na stronę serwera, a klucze publiczne zostają tylko tam, gdzie tabele mają reguły dostępu. Test uruchamia się ponownie, aż nic nie zwróci. Potem zostaje jako kontrola przed publikacją.
Co zostaje u was: macierz dostępu tabela po tabeli z wynikiem sondy klientem anonimowym przed poprawką i po niej oraz sonda wpięta w potok wydawania - 3Nazwy pakietów zyskują zaufanie, bo wyglądają zwyczajnie
Asystent pisze linię instalacji z wiarygodną nazwą, która nie istnieje, a badanie Spracklena i współautorów pokazuje, że te same zmyślone nazwy powtarzają się między promptami. Kto zarejestruje taką nazwę, dostaje instalacje z każdego projektu, który zaufał tej linii. Przypadek huggingface-cli pokazuje, jak nazwa trafiła do dokumentacji prawdziwego repozytorium, zanim ktokolwiek sprawdził rejestr.
Co z tym robimyPorównujemy plik blokady w każdej zmianie napisanej z asystentem, sprawdzamy każdy nowy pakiet w rejestrze pod kątem wieku, wydawcy i historii i zamieniamy tę kontrolę w regułę przeglądu. Polecenia instalacji, które asystent wpisał do dokumentacji, przechodzą to samo.
Co zostaje u was: raport pochodzenia zależności za okres pracy z AI oraz kontrola rejestru jako reguła CI - 4Destrukcyjne polecenia wykonują się, bo potwierdzenie było wyłączone
Turbo, YOLO, automatyczna zgoda: tryby, w których agent wykonuje polecenia bez potwierdzeń. W takim trybie czyszczenie pamięci podręcznej, które trafia w złą ścieżkę, albo reset bazy wydany w czasie zamrożenia kodu wykonuje się z prędkością agenta. W obu wpisach klasy D agent miał dostęp szerszy niż zadanie: do bazy produkcyjnej i do całego dysku.
Co z tym robimyWypisujemy każde dane dostępowe, do których agent sięga, razem ze środowiskiem, do którego należą, usuwamy z tej listy produkcję i stawiamy operacje destrukcyjne za jawną bramką. Potem ćwiczymy przywracanie raz i zapisujemy, ile trwało.
Co zostaje u was: mapa danych dostępowych dla każdego agenta i środowiska, lista operacji za bramką oraz zapis próby przywracania z czasem trwania - 5Definicja narzędzia się zmienia, a nikt nie pyta ponownie
Serwer MCP albo rozszerzenie zostało zatwierdzone raz. Definicja leży we współdzielonym repozytorium albo aktualizuje się sama, a zgoda nie idzie za zmianą. Obejście ponownej zgody w Cursorze i wydanie rozszerzenia Amazon Q pokazują dwa końce tej samej drogi: podmienione polecenie na gałęzi i niezatwierdzony kod w opublikowanej wersji.
Co z tym robimyInwentaryzujemy serwery MCP, rozszerzenia i tokeny razem z zakresami, zawężamy każdy zakres do zadania, liczymy skrót każdej zatwierdzonej definicji i wymagamy ponownej zgody przy zmianie. Wersje zostają przypięte, a aktualizacje przechodzą ten sam przegląd co aktualizacje zależności.
Co zostaje u was: inwentarz narzędzi z zakresem dla każdego zadania, skróty zatwierdzonych definicji i reguła ponownej zgody w waszej konfiguracji
Co zostaje u was.
- Mapowanie incydentów na bazę kodu: wynik testu dla każdej klasy mechanizmu w waszych repozytoriach i integracjach agentów, z dowodami i zakresem sprawdzenia
- Lista kontrolna dla każdej klasy, wypełniona dla waszego stosu, z artefaktem albo testem, który zamyka każdy punkt
- Zestaw testów wstrzyknięć z działaniami kanarkowymi, wpięty w CI, z wynikami dla każdej ścieżki niezaufanej treści
- Macierz dostępu do tabel i zasobników z wynikiem sondy klientem anonimowym, przed poprawkami i po nich
- Raport pochodzenia zależności za okres pracy z AI oraz kontrola rejestru jako reguła przeglądu
- Inwentarz narzędzi: serwery MCP, rozszerzenia i tokeny z zakresem dla każdego zadania, skróty definicji i reguła ponownej zgody
- Zapis ponownego testu: każda klasa przetestowana ponownie po poprawkach, z wynikiem obok pierwotnego
Jak pracujemy.
- 11. Mapowanie
Przechodzimy repozytoria i integracje agentów z doświadczonym inżynierem z waszej strony i zaznaczamy, gdzie może wystąpić każda klasa mechanizmu: ścieżki niezaufanej treści, wygenerowane reguły backendu, nowe zależności, dane dostępowe agentów, wynik modelu w SQL albo w wykonaniu kodu, zakresy narzędzi.
Tydzień 1 - 22. Werdykty
Wykonujemy listę kontrolną dla każdej klasy: testy wstrzyknięć, sondy klientem anonimowym, kontrole pliku blokady i rejestru, inwentarze danych dostępowych i narzędzi. Każda klasa dostaje wynik testu z dowodami i zakresem sprawdzenia, a każde ustalenie ma sposób odtworzenia.
Tydzień 1-2 - 33. Poprawki i bramki
Usuwamy wykryte błędy razem z waszym zespołem i zamieniamy każdy zamknięty punkt w bramkę: sondę, zestaw testów, regułę rejestru, kontrolę skrótów. Każdą bramkę uruchamiamy raz celowo, żeby dowieść, że działa.
Tydzień 2-3 - 44. Ponowny test i przekazanie
Powtarzamy test każdej klasy, zapisujemy wynik obok pierwotnego i przekazujemy mapowanie, listy kontrolne i bramki w waszym potoku. Katalog na tej stronie jest punktem odniesienia, od którego zaczyna się następny przegląd.
Tydzień 3, zależnie od liczby repozytoriów i integracji
Pozostałe strony z tej serii.
Analiza kosztów LLM i limity wydatku
Jak przypisać koszt LLM do wywołania, sesji i funkcji, co po cichu psuje cache promptów i gdzie alert o wydatkach powinien zamienić się w twardą blokadę.
Pomiar efektu AI w zespole
Dlaczego samo szybsze zamykanie zgłoszeń nie dowodzi efektu AI i jak go zmierzyć: punkt odniesienia sprzed wdrożenia, miary w parach, grupa porównawcza.
Porównanie narzędzi do AI code review
Porównanie narzędzi do AI code review na waszym kodzie: wykryte błędy, błędne komentarze i koszt na pull request, z protokołem do powtórzenia po zmianie modelu.
Usługi, które to wdrażają.
Przegląd bezpieczeństwa kodu pisanego przez AI
Przegląd bezpieczeństwa kodu pisanego przez AI oraz funkcji AI, jeśli aplikacja je ma. Wykryte problemy z krokami odtworzenia i gotową poprawką.
Audyt kodu pisanego przez AI
Niezależny audyt kodu pisanego przez AI według kryteriów opublikowanych w całości, z ceną ustaloną przed startem.
Skąd pochodzą daty i liczby.
- CVE-2025-53773, zdalne wykonanie kodu w GitHub Copilot i Visual Studio (Microsoft, sierpień 2025)
- Embrace The Red, RCE w GitHub Copilot przez wstrzyknięcie promptu: settings.json i chat.tools.autoApprove
- CVE-2025-32711, ujawnienie informacji w Microsoft 365 Copilot, EchoLeak (czerwiec 2025)
- CVE-2025-54135, wstrzyknięcie promptu w Cursorze przez pliki specjalne MCP, poprawka w 1.3.9 (advisory GitHub)
- CVE-2025-54136, zmiana definicji MCP w Cursorze omija ponowną zgodę (advisory GitHub)
- CVE-2025-54794, obejście ograniczenia ścieżek w Claude Code, poprawka w 0.2.111 (advisory GitHub)
- CVE-2025-6514, wstrzyknięcie polecenia systemowego w mcp-remote z niezaufanych serwerów MCP (JFrog Security Research)
- CVE-2024-5565, wstrzyknięcie promptu w Vanna.AI prowadzące do zdalnego wykonania kodu (JFrog Security Research)
- CVE-2023-36189, SQL injection w LangChain SQLDatabaseChain
- CVE-2025-48757, niewystarczające row-level security w aplikacjach generowanych w Lovable; ujawnienie Matta Palmera
- Legit Security, zdalne wstrzyknięcie promptu w GitLab Duo (ukryta treść, wyprowadzenie prywatnego kodu)
- Invariant Labs, serwer GitHub MCP: dane z prywatnego repozytorium wyprowadzone przez publiczne zgłoszenie
- General Analysis, Supabase MCP z Cursorem: od zgłoszenia do wsparcia do wycieku integration_tokens
- Dokumentacja Supabase, bezpieczeństwo serwera MCP: wstrzyknięcie promptu, tryb tylko do odczytu, zakres projektu, grupy funkcji
- Biuletyn bezpieczeństwa AWS-2025-015, Amazon Q Developer dla VS Code 1.84.0
- Tracebit, Gemini CLI: wykonanie kodu i wyprowadzenie danych przez README i obejście listy dozwolonych, poprawka w 0.1.14
- Noma Security, ForcedLeak: wyprowadzenie danych CRM z Salesforce Agentforce przez Web-to-Lead i wygasłą domenę z listy dozwolonych
- PromptArmor, Google Antigravity wyprowadza dane: ukryty tekst na stronie, .env przez cat, podagent przeglądarki
- The Register, Google Antigravity w trybie Turbo kasuje dysk użytkownika; Google potwierdza postępowanie (grudzień 2025)
- Fortune, Replit Agent kasuje bazę produkcyjną w czasie zamrożenia kodu; oświadczenie prezesa i zapowiedziane poprawki (lipiec 2025)
- Wiz Research, Moltbook: odsłonięta baza Supabase, 1,5 mln tokenów API (luty 2026)
- Lasso Security, halucynacje pakietów: eksperyment huggingface-cli (marzec 2024)
- Spracklen i współautorzy, We Have a Package for You! Halucynacje pakietów w LLM generujących kod, USENIX Security 2025 (arXiv 2406.10279)
- Fu i współautorzy, Słabości bezpieczeństwa kodu z Copilota w projektach na GitHubie, ACM TOSEM 2025 (arXiv 2310.02059)
- Pearce i współautorzy, Asleep at the Keyboard? Bezpieczeństwo kodu z GitHub Copilota, IEEE S&P 2022 (arXiv 2108.09293)
Pytania przed rozpoczęciem współpracy.
Porozmawiajmy o AI w waszej firmie.
Napiszcie, na jakim etapie jesteście z bezpieczeństwem waszego kodu pisanego z AI i integracji agentów. Odpowiedź w ciągu jednego dnia roboczego.