Abstrakcyjna ilustracja techniczna na ciemnogranatowym tle: przy lewej krawędzi stoi wysoka półprzezroczysta płaszczyzna graniczna, narysowana jako cienki blady kontur z matowym wypełnieniem. Pojedyncza biała linia wchodzi z lewej, przechodzi przez płaszczyznę i ciągnie się dalej w prawo, gdzie kończy się na małym ciemnym bloku znajdującym się poza płytkim rzędem czterech świecących cyjanowych modułów. Cienka przerywana biała linia odgałęzia się od tej linii tuż przed płaszczyzną i zatrzymuje się przy małym bladym prostokącie zamontowanym na powierzchni płaszczyzny, oznaczonym wyłącznie kształtem. Nie pojawia się żaden tekst, żadne osoby ani logotypy organizacji. Logo OrcaRouter jest wkomponowane w prawym dolnym rogu.
AI Safety Incidents

GhostApproval: Sześciu asystentów AI do kodowania poprosiło o pozwolenie i wskazało niewłaściwy plik

Autor

Gideon Frost

Data publikacji

Najnowsze modele · 20Zobacz wszystkie modele →
Benchmarki: Artificial Analysis · aktualizowane codziennie
Powrót do wszystkich wpisów

8 lipca 2026 r. firma zajmująca się bezpieczeństwem Wiz opublikowała GhostApproval, wynik badania, w którym link symboliczny umieszczony w repozytorium sprawił, że sześć asystentów AI do kodowania zapisywało poza swoim obszarem roboczym — do ~/.ssh/authorized_keys, co zapewnia trwały dostęp SSH bez hasła, lub do ~/.zshrc, który uruchamia się przy następnym starcie powłoki — podczas gdy okno potwierdzenia wskazywało jedynie nieszkodliwy plik, za który podszywał się link. Wiz przetestowała Amazon Q Developer, Claude Code firmy Anthropic, Augment, Cursor, Google Antigravity i Windsurf i zgłosiła ten wzorzec we wszystkich sześciu. Nie zgłoszono żadnego wykorzystania w rzeczywistym środowisku: praca jest demonstracją proof-of-concept, a wpis w archiwum nie odnotowuje żadnych rzeczywistych szkód. Trzej dostawcy wydali poprawki, dwóch potwierdziło zgłoszenie, a następnie przestało odpowiadać, a jeden zakwestionował, że to zachowanie w ogóle jest podatnością. W Orca AI Incident Archive znajduje się pełny zapis dotyczący tego odkrycia wraz z innymi wpisami zarejestrowanymi pod jego tagiem typu SANDBOX.

Sam prymityw to stara historia. Podążanie za dowiązaniami symbolicznymi, sklasyfikowane jako CWE-61, od dziesięcioleci jest prymitywem ataku — Wiz wymienia wcześniejsze zastosowania w warunkach wyścigu, menedżerach pakietów i ucieczkach z kontenerów — a każde z nich polegało na tym, że narzędzie zapisywało do ścieżki kontrolowanej przez użytkownika bez uprzedniego jej rozwiązania. Tym, co sprawiło, że to odkrycie zasługiwało na nazwę, jest druga warstwa: w kilku produktach samo rozumowanie asystenta wskazywało niebezpieczne miejsce docelowe, a prompt pokazywany człowiekowi ukrywał je. Wiz klasyfikuje to jako CWE-451, zniekształcanie krytycznych informacji w interfejsie użytkownika. Granica bezpieczeństwa istniała. Informacji potrzebnych człowiekowi do skorzystania z niej nie było.

Jak działa ta sztuczka i na czym się kończy

Złośliwe repozytorium Wiz jest celowo nudne. Zawiera dowiązanie symboliczne o nazwie project_settings.json, które wskazuje na plik autoryzowanych kluczy SSH dewelopera, a także README instruujący agenta, aby zaktualizował tę „config” podczas przygotowywania obszaru roboczego. Gdy deweloper poprosi asystenta o zastosowanie się do README, agent podąża za linkiem i zapisuje klucz publiczny atakującego. Jeśli na maszynie działa usługa SSH, do której atakujący ma dostęp, od tego momentu jest to logowanie bez hasła. Drugi wariant kieruje tę samą przynętę na ~/.zshrc, więc ładunek zostanie wykonany przy następnym otwarciu terminala i dostęp SSH w ogóle nie będzie potrzebny.

Opis awarii technicznej podany przez Wiz jest krótki: piaskownica, jeśli w ogóle występuje, nie weryfikuje ścieżki kanonicznej, więc zapis skierowany do wnętrza projektu trafia tam, gdzie wskazuje dowiązanie. Proof of concept firmy odtworzył ten problem w „6 najpopularniejszych asystentach AI do kodowania”, według jej własnego sformułowania, i opublikowała zrzuty ekranu dla każdego z nich. Grupa dotkniętych to każdy, kto otwiera w jednym z tych narzędzi repozytorium, którego nie jest autorem — co w normalnym workflow deweloperskim obejmuje projekty forkowane, zależności zewnętrzne oraz wszelkie przeglądy kodu gałęzi zewnętrznego współtwórcy.

Okno dialogowe, które wskazało niewłaściwy plik

Najwyraźniejsze dowody pochodziły z Claude Code. W teście Wiza rozumowanie agenta zawierało – według cytatu firmy – stwierdzenie: „Widzę, że project_settings.json jest w rzeczywistości plikiem konfiguracyjnym zsh”. Monit o uprawnienia, który zobaczył użytkownik, brzmiał: „Czy wprowadzić tę zmianę w project_settings.json?”. Agent wiedział, dokąd trafi zapis; osoba, która go autoryzowała, nie wiedziała. Wiz nazywa wynikającą z tego zgodę „w istocie pustą”, a kontrolę z udziałem człowieka – pieczątką.

Trzy produkty sprawiły, że luka była gorsza niż zła etykieta. Windsurf zapisał plik na dysk zanim pojawiły się przyciski Akceptuj i Odrzuć, więc okno dialogowe było propozycją cofnięcia, a nie bramą autoryzacji — zanim użytkownik mógł odmówić, według Wiz klucz już był na miejscu. Amazon Q Developer pokazał tę samą kolejność, oferując tylko przycisk Cofnij po zapisie. Augment nie zapytał o nic: Wiz zademonstrował odczyt przez dowiązanie symboliczne, który ujawnił w transkrypcie czatu fałszywy plik poświadczeń AWS spoza projektu, oraz zapis przez dowiązanie symboliczne do ~/.ssh/authorized_keys bez jakiegokolwiek okna dialogowego. Z drugiej strony Cursor i Google Antigravity wyświetliły nierozwiązaną ścieżkę i poprosiły o kliknięcie, które autoryzowało rozwiązaną.

Pierwszy test Wiz odbył się 10 lutego 2026 r., a raporty rozesłano między 12 lutego a 5 marca. Jego harmonogram ujawniania odnotowuje potwierdzenia: Anthropic 15 lutego, Augment 24 lutego, Google 26 lutego, Cursor 2 marca, AWS 6 marca oraz Cognition, która jest właścicielem Windsurf, 23 czerwca. Publiczne ujawnienie nastąpiło około pięć miesięcy po pierwszym raporcie.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

Sześciu dostawców, trzy odpowiedzi

Wiz ocenia odkrycia według własnej skali ważności, od poziomu High w AWS po Critical w Augment, Cursor, Google Antigravity i Windsurf. Trzech dostawców uznało raport za podatność i wydało poprawkę. Archiwum ocenia ten wpis jako wysoką ważność i A pod względem pewności, a główne biuletyny zgadzają się z Wiz co do mechanizmu.

• Amazon Web Services. Wysoka waga, śledzona jako CVE-2026-12958 i poprawiona w Language Servers for AWS 1.69.0. Własny komunikat AWS 2026-047-AWS, opublikowany 23 czerwca 2026 r., potwierdza „problem braku walidacji dowiązań symbolicznych” przed 1.69.0 i wymienia minimalne kompilacje wtyczek zawierające poprawkę: Amazon Q Developer dla Visual Studio Code 2.20, dla JetBrains 4.3, dla Eclipse 2.7.4 oraz AWS Toolkit z Amazon Q dla Visual Studio 1.94.0.0. Stwierdza, że nie ma obejść, że serwer językowy aktualizuje się automatycznie, chyba że konfiguracja sieci temu zapobiega, i dziękuje Wiz za skoordynowane ujawnienie. Wpis CNA ocenia to zagadnienie na 8,5 w CVSS 4.0 i 7,8 w CVSS 3.1.

• Cursor.Krytyczny, śledzony jako CVE-2026-50549 i naprawiony w Cursor 3.0. Wpis został opublikowany przez GitHub jako CNA 25 czerwca 2026 r. z oceną 9,3 w CVSS 4.0. Jego opis przedstawia atakującego nieco inaczej niż relacja Wiz dotycząca repozytorium: złośliwy agent tworzy dowiązanie symboliczne w obszarze roboczym i wymusza niepowodzenie kanonizacji ścieżki, albo ponieważ obiekt docelowy nie istnieje, albo ponieważ ścieżce odebrano uprawnienia do odczytu, po czym zapis cofa się do pierwotnej ścieżki bez zatwierdzenia i może nadpisać pomocnik sandboxa w celu wykonania poza sandboxem.

• Google.Wiz ocenia Antigravity jako krytyczne i odnotowuje poprawkę jako wersję 1.19.6, wdrożoną 22 maja 2026 r. W kolumnie dotyczącej ważności widnieje „Oczekuje”, a według relacji Wiz Google oceniał, czy wystawić CVE; w publicznym rejestrze nie pojawia się żaden identyfikator CVE dla Antigravity.

• Augment.Krytyczny według oceny Wiz, przetestowany na wersji 0.754.3, potwierdzony 24 lutego 2026 i niezałatany w momencie publikacji. Notatka badawcza Cloud Security Alliance dotycząca tego odkrycia odnotowuje kontrargument Augment, że agent działa przy użyciu poświadczeń samego użytkownika.

• Windsurf.Krytyczny według oceny Wiz, przetestowany na kompilacji V1.9566, potwierdzony przez Cognition 23 czerwca 2026 r. i bez poprawki w momencie publikacji.

• Anthropic. Zakwestionowane. Brak CVE, a przetestowana wersja Claude Code, 2.1.42, znajduje się w tabeli Wiz ze statusem „Odrzucony”.

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Odrzucenie przez Anthropic i poprawka, która powstała przed raportem

Odpowiedź Anthropica dla Wiz była przemyślaną odmową. „Wykracza to poza nasz obecny model zagrożeń” – napisała firma, według cytatu Wiz. „Gdy użytkownik po raz pierwszy uruchamia Claude Code w katalogu, musi potwierdzić, że ufa temu katalogowi, zanim rozpocznie sesję. Opisany przez Państwa scenariusz polega na tym, że użytkownik wyraźnie potwierdza monit o uprawnienia w katalogu zawierającym złośliwe dowiązanie symboliczne, co wykracza poza model zagrożeń Claude Code”. Zgłoszenie zostało zamknięte jako „Informative”.

To rozumowanie ma spójną konstrukcję: użytkownik zaufał katalogowi, następnie zatwierdził operację, więc oba momenty zgody zostały uszanowane. Riposta Wiz brzmi: świadoma zgoda wymaga rzetelnych informacji — zatwierdzenie project_settings.json, podczas gdy zapis trafia do ~/.ssh/authorized_keys, jest formalnie decyzją, a w istocie pustą. Wiz nie twierdzi, że rozstrzygnął, które stanowisko jest słuszne; nie robi tego również ten artykuł. Praktyczna obserwacja jest taka, że AWS, Google i Cursor przyjęły odmienne stanowisko i wprowadziły poprawki.

Wiz poinformował również, że Claude Code zmieniło się w trakcie sporu: obecne wersje, jak napisała firma, rozwiązują dowiązania symboliczne i ostrzegają przed zapisem do wrażliwych plików, oraz zauważył, że Anthropic odmówiła powiedzenia, czy ma to związek z raportem. 7 lipca 2026 r. Anthropic przekazała korektę, którą zacytował Wiz: „Ostrzeżenie o dowiązaniach symbolicznych w oknie uprawnień Edycja/Zapis pojawiło się w wersji v2.1.32 (5 lutego 2026 r.), dziewięć dni przed przesłaniem nam tego raportu. Zostało dodane w ramach proaktywnego wzmacniania bezpieczeństwa opartego na przeglądzie wewnętrznym. Odmowa komentarza była automatyczną odpowiedzią z naszego systemu triage”.

Zgodność czasowa wersji się zgadza; publiczny zapis tego, co się zmieniło, już nie. Claude Code 2.1.32 opublikowano w rejestrze npm 5 lutego 2026 o 17:03 UTC, czyli dziewięć dni przed raportem z 14 lutego, dokładnie tak, jak twierdzi Anthropic. Jednak publiczny wpis w dzienniku zmian dla tego wydania wymienia dwanaście zmian, w tym zespoły agentów, rejestrowanie pamięci i kilka poprawek UI, a żadna z nich nie wspomina o dowiązaniach symbolicznych ani okienkach dialogowych uprawnień. Pierwsze wiersze dziennika zmian opisujące dokładnie to zachowanie pojawiają się znacznie później: wersja 2.1.280, opublikowana w npm 22 września 2026, odnotowuje „Naprawiono ocenianie zapisów przez ścieżkę będącą dowiązaniem symbolicznym według ich zapisu w drzewie: monit wskazuje, gdzie trafia zapis”, a 2.1.287 z 1 października 2026 odnotowuje, że zapis powłoki przez zatwierdzone w repozytorium dowiązanie symboliczne do wrażliwego pliku wskazuje teraz, gdzie trafia, i czeka na osobę. Obserwacja samego Wiza, że wersja 2.1.173 i późniejsze rozwiązują dowiązania symboliczne, również pojawia się po raporcie, ponieważ 2.1.173 wydano 11 czerwca 2026.

Co jest ustalone, a co nie

• Potwierdzone. Mechanizm: wabik w postaci dowiązania symbolicznego w repozytorium, agent, który za nim podąża, zapis, który trafia poza obszar roboczy, oraz powierzchnia potwierdzenia, która wskazuje niewłaściwą ścieżkę. Wiz odtworzył to we wszystkich sześciu produktach i opublikował zrzuty ekranu. Istnieją dwa rekordy CVE, opublikowane przez ich CNA, a komunikat AWS niezależnie potwierdza lukę w wersjach poniżej 1.69.0 oraz poprawkę. Anthropic nie kwestionuje, że takie zachowanie wystąpiło; kwestionuje natomiast, że jest to podatność.

• Z jednego źródła. Oceny dotkliwości dla Augment, Windsurf i Google Antigravity są osądami Wiz, a nie wynikami CNA, ponieważ dla żadnego z tych trzech nie opublikowano CVE. Twierdzenie, że Windsurf i Amazon Q zapisują przed pojawieniem się okna dialogowego, opiera się na zrzutach ekranu i narracji Wiz; żaden dostawca nie potwierdził publicznie tej kolejności.

• Sporny.Czy narzędzie powinno zapewniać użytkownikowi ochronę przed zwodniczą przestrzenią roboczą, czy też zaufanie do katalogu plus kliknięcie rozstrzyga kwestię. Anthropic twierdzi, że to drugie; Wiz twierdzi, że wyświetlony przez nie monit sprawił, że kliknięcie straciło znaczenie. Archiwum nie oznacza wpisu jako spornego: fakty są zgodne, a sporna jest tylko interpretacja.

• Nie ustalono. Czy Augment i Windsurf naprawiły tę lukę od czasu publikacji. Wszystkie materiały przeanalizowane na potrzeby tego tekstu, w tym notatka Cloud Security Alliance z 15 lipca 2026 r., wciąż opisują oba narzędzia jako nienaprawione; nie znaleziono żadnego publicznego komunikatu o poprawce od któregokolwiek z dostawców.

Sama data kryje w sobie drobną komplikację. Post Wiz oraz oś czasu ujawnienia podają 8 lipca 2026 r., Infosecurity Magazine opisuje proof of concept jako opublikowany 7 lipca, a swój własny raport — 9 lipca, natomiast wpis w archiwum jest datowany na 9 lipca 2026 r. z dokładnością do dnia. Ustalenie, relacje i archiwum nie różnią się co do tygodnia; różnią się co do dnia o maksymalnie dwa dni.

Wcześniejsze prace nad jedną z tych sześciu zasługują na odrębne uznanie. Evan Schuman z CSO Online, pisząc 9 lipca 2026 r., zauważył, że Cato Networks zgłosiło wersję tej luki dotyczącą wyłącznie Cursor przed szerszym badaniem Wiz. Relacja SecurityWeek dotycząca tych badań, opublikowana 3 lipca 2026 r., nazywa ją DuneSlide, przypisuje parze CVE-2026-50548 i CVE-2026-50549, ocenia obie na 9,8 i datuje wydanie Cursor 3.0, które je naprawiło, na 2 kwietnia — liczby, które nie zgadzają się z harmonogramem Wiz, według którego publikacja poprawki dla Cursor przypadła na 5 czerwca, ani z rekordem CNA opublikowanym 25 czerwca z oceną 9,3. Oceny 9,8 i 9,3 pochodzą od dwóch różnych oceniających tej samej luki; daty kwietniowa i czerwcowa mogą opisywać odpowiednio wydanie i komunikat doradczy, a nie wyrażać sprzeczności co do terminu wydania poprawki.

Co się potem zmieniło?

Konkretnie: użytkownicy Amazon Q Developer zostali przeniesieni do serwera językowego 1.69.0, w większości konfiguracji automatycznie; użytkownicy Google Antigravity do wersji 1.19.6 od 22 maja 2026 r.; użytkownicy Cursor do wersji 3.0; a użytkownicy Claude Code do wersji, która rozwiązuje linki, przy czym dalsze zmiany dotyczące wierności promptów pojawią się w wersjach 2.1.280 i 2.1.287 we wrześniu i październiku 2026 r. Użytkownicy Augment i Windsurf, na podstawie dowodów dostępnych w chwili publikacji, otrzymali datę, na którą warto uważać, i nic więcej.

Rekomendacje samego Wiz były wąskie i techniczne: rozwiązywać dowiązania symboliczne przed wyświetleniem monitu, wyraźnie ostrzegać, gdy rozwiązana ścieżka wykracza poza obszar roboczy, i nigdy nie zapisywać na dysku przed wyraźną zgodą, aby okno dialogowe było bramką, a nie przyciskiem cofania. Uwaga Cloud Security Alliance dodaje ramy zarządzania — traktować asystentów kodowania jako uprzywilejowane oprogramowanie z dostępem do systemu plików, a nie jako wtyczki edytora, oraz pytać dostawców bezpośrednio, czy ścieżki są rozwiązywane, zanim pojawi się potwierdzenie. Katie Norton z IDC, cytowana przez CSO Online, umieściła ryzyko szczątkowe tam, gdzie łańcuch dostaw już funkcjonuje: u zewnętrznych współtwórców, w rozwidlonych repozytoriach i zależnościach zewnętrznych, „a nie w kodzie tworzonym wewnętrznie”.

Otwarta pozostaje kwestia projektu, a nie błąd. Sześć niezależnie zbudowanych produktów zbiegło się na tej samej sekwencji — pokaż żądaną ścieżkę, zaufaj kliknięciu — a późniejsze rozbieżności dotyczyły odpowiedzialności, a nie mechanizmu. Wpis w archiwum ma flagę landmark, co jest osądem archiwum, że rekord opisuje kategorię, a nie błąd pojedynczego dostawcy, i trudno się nie zgodzić z tą interpretacją: ten sam krótki proof of concept zadziałał sześć razy.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.