Badacze ujawnili łańcuch exploitów nazwany AutoJack, który pozwala pojedynczej złośliwej stronie przejąć agenta przeglądającego w AutoGen Studio — otwartoźródłowym narzędziu Microsoft Research do prototypowania systemów wieloagentowych — i wykonać dowolny kod na maszynie hosta, bez żadnej interakcji użytkownika poza wpisaniem URL-a. W teście proof-of-concept calc.exe uruchomił się na pulpicie dewelopera w ciągu sekund od wyrenderowania złośliwej strony przez agenta — uruchomiony przez sam proces AutoGen Studio, nie przez przeglądarkę.
To jest piąty raz w ciągu kilku tygodni, gdy opisujemy ten sam wzorzec: agent AI czyta niezaufaną treść i staje się narzędziem ataku. Ale AutoJack dodaje do tego obrazu jeden element, którego wcześniejsze przypadki nie pokazały tak wyraźnie — i ten element jest sednem.
Tożsamość localhost jako klucz do wszystkiego
Cała architektura bezpieczeństwa loopbacka — adresu 127.0.0.1, localhost — opiera się na założeniu, że to, co łączy się z localhost, już jest na tej maszynie, więc jest zaufane. Usługi lokalne nasłuchują na localhost właśnie dlatego, że zakładają: nikt z zewnątrz tu nie dosięgnie. To jest granica zaufania, na której opiera się mnóstwo lokalnych narzędzi deweloperskich.
AutoJack łamie to założenie w sposób, który jest jednocześnie prosty i niepokojący. Agent przeglądający w AutoGen Studio — zbudowany na komponencie MultimodalWebSurfer — używa headless browser do odwiedzania stron. Gdy ten agent nawiguje do strony atakującego, JavaScript na tej stronie wykonuje się w kontekście agenta. A agent działa lokalnie. Więc JavaScript atakującego dziedziczy tożsamość localhost.
To jest pierwsze ogniwo łańcucha, oznaczone jako CWE-1385 — brak walidacji origin w WebSockets. Interfejs MCP WebSocket w AutoGen Studio akceptował połączenia tylko z http://127.0.0.1 lub http://localhost. To blokuje kartę przeglądarki człowieka na evil.com — ale nie blokuje JavaScriptu renderowanego przez headless browser należący do agenta przeglądającego AutoGen, który dziedziczy tożsamość localhost i przechodzi przez kontrolę całkowicie.
Innymi słowy: zabezpieczenie zakładało, że „z localhost" znaczy „zaufane". Agent przeglądający sprawił, że treść atakującego mówi „z localhost", nie będąc zaufana. To jest dokładnie ten sam typ złamania granicy, który opisywaliśmy przy Agentjacking jako Authorized Intent Chain — gdzie każdy krok jest technicznie autoryzowany. Tutaj agent legalnie działa na localhost, legalnie przegląda stronę, a strona legalnie łączy się z localhost. Nigdzie nie ma akcji nieautoryzowanej — a jednak na końcu jest wykonanie kodu.
Trzy ogniwa, jeden łańcuch
Jak przy większości tych ataków, AutoJack nie jest jednym błędem, ale złożeniem trzech — z których każdy osobno wyglądał jak rozsądna decyzja projektowa.
Ogniwo drugie — CWE-306, brak uwierzytelnienia krytycznej funkcji. Middleware uwierzytelniający AutoGen Studio jawnie pomijał ścieżki /api/mcp/*, zakładając, że handler WebSocket sam wymusi własne kontrole. Nigdy tego nie zrobił. W rezultacie MCP WebSocket akceptował nieuwierzytelnione połączenia niezależnie od tego, jaki tryb uwierzytelnienia skonfigurowano dla reszty aplikacji. To jest klasyczna luka „założyłem, że ktoś inny to sprawdzi" — dwa komponenty, każdy zakładający, że drugi pilnuje uwierzytelnienia, i nikt go nie pilnuje.
Ogniwo trzecie — CWE-78, wstrzyknięcie poleceń systemowych. Endpoint WebSocket przyjmował parametr server_params, dekodował go z base64 do JSON, parsował i przekazywał pola command i args bezpośrednio do uruchomienia procesu. Bez żadnej listy dozwolonych plików wykonywalnych, atakujący mógł podać calc.exe, powershell.exe -enc … albo bash -c '...' jako rzekomy „serwer MCP". To jest moment, w którym kontrola nad localhost zamienia się w wykonanie dowolnego polecenia.
Pełny przepływ: deweloper uruchamia AutoGen Studio na localhost:8081 z agentem przeglądającym. Atakujący podstawia złośliwą stronę albo nakłania użytkownika do wpisania kontrolowanego URL-a. Headless browser nawiguje do strony, jej JavaScript otwiera WebSocket do localhost z payloadem w parametrze. Kontrola origin przechodzi, bo agent działa lokalnie. Uwierzytelnienie jest pominięte, bo middleware omija /api/mcp/*. AutoGen Studio dekoduje payload i uruchamia polecenie atakującego pod kontem dewelopera. Trzy rozsądne decyzje, jeden RCE.
Dobra wiadomość, którą trzeba nazwać precyzyjnie
W odróżnieniu od większości tematów, które opisujemy, AutoJack ma istotne ograniczenie zasięgu — i uczciwość wymaga postawienia go na pierwszym planie.
Podatny interfejs MCP WebSocket nigdy nie trafił do żadnego wydania na PyPI. To znaczy, że deweloperzy, którzy instalują AutoGen Studio przez pip, nie są narażeni na ten konkretny łańcuch. Opublikowany pakiet (autogenstudio 0.4.2.2) potwierdzonie nie zawiera pliku trasy mcp.py ani odwołań do podatnego komponentu. Ekspozycja dotyczyła tych, którzy budowali z gałęzi main repozytorium w określonym oknie — węższej grupy niż wszyscy użytkownicy AutoGen Studio.
To jest ważne rozróżnienie i nie należy go pomijać dla efektu: to nie jest masowo eksploatowalna luka w produkcie z milionami instalacji. To jest luka w gałęzi rozwojowej, załatana, zanim trafiła do stabilnego wydania. Microsoft, po zgłoszeniu do MSRC, utwardził kod w commicie b047730 (wersja 0.7.2): parametry server_params nie są już przyjmowane przez URL, lecz przechowywane po stronie serwera i kluczowane przez UUID, a ścieżka /api/mcp nie omija już middleware uwierzytelniającego.
Dlaczego mimo to warto o tym pisać
Skoro luka nie trafiła do wydania, można by ją zignorować. Byłby to błąd — bo wartość AutoJack nie leży w jego zasięgu, ale we wzorcu, który ujawnia. Sami badacze i Microsoft wskazują, że to przykład niepokojącego wzorca rozwijającego się w różnych frameworkach agentów AI: problem pojawia się, gdy agent potrafi przeglądać niezaufaną treść, mając jednocześnie zdolność komunikacji z uprzywilejowanymi usługami lokalnymi.
To jest dokładnie ta sama klasa, którą prowadzimy jako wątek od miesiąca. ChatGPhish — strona renderowana przez ChatGPT. Claude Code GitHub Action — zgłoszenie GitHub. Gemini — powiadomienie push. Agentjacking — zdarzenie błędu w Sentry. AutoJack — strona odwiedzona przez agenta przeglądającego. Pięć różnych frameworków, pięć różnych kanałów wejścia, jedna klasa problemu: agent czyta niezaufaną treść i traktuje ją jako instrukcję, mając dostęp do czegoś, czego ta treść nie powinna dosięgnąć.
AutoJack dorzuca do tego obrazu konkretną, techniczną lekcję, której wcześniejsze przypadki nie wyartykułowały tak ostro: gdy agent może przeglądać niezaufaną treść, lokalne środowisko przestaje być bezpieczną granicą. Loopback — localhost, 127.0.0.1 — który przez dekady był synonimem „tylko ja, tutaj, zaufane", staje się powierzchnią ataku dla każdego agenta działającego na tej maszynie. To jest zmiana w modelu zagrożeń, którą każdy budujący agenty musi przyjąć.
Co zrobić
Jeśli budujesz AutoGen Studio z gałęzi main, użyj wersji z commita b047730 lub nowszej. Jeśli instalujesz przez pip, ten konkretny łańcuch cię nie dotyczy — ale poniższe zasady i tak warto wdrożyć, bo wzorzec wykracza poza AutoGen.
Traktuj każdy parametr narzędzia osiągalny z wyjścia modelu jako kontrolowany przez atakującego. To jest fundamentalna zasada projektowania agentów: jeśli model może wpłynąć na to, co trafia do parametru, ten parametr jest powierzchnią ataku. Wstrzyknięcie poleceń w server_params było możliwe, bo wartość z wyjścia agenta trafiała wprost do uruchomienia procesu.
Nigdy nie wiąż wrażliwych płaszczyzn kontrolnych z localhost bez uwierzytelnienia. Loopback nie jest granicą bezpieczeństwa, gdy na maszynie działa agent zdolny do przeglądania sieci. Każda lokalna usługa, która zakłada „z localhost znaczy zaufane", jest podatna na ten wzorzec. Wymuszaj uwierzytelnienie nawet na połączeniach loopback.
Stosuj listę dozwolonych plików wykonywalnych, które mogą być uruchomione jako serwery MCP. Brak allowlisty był ostatnim ogniwem AutoJack — to ono zamieniło kontrolę nad WebSocket w dowolne wykonanie kodu. Jawna lista dozwolonych poleceń łamie ten łańcuch nawet, gdy wcześniejsze kontrole zawiodą.
Izoluj tożsamość agenta od tożsamości dewelopera — przez kontenery, osobnych użytkowników systemu albo maszyny wirtualne. To jest najtrwalsza obrona: jeśli agent działa pod ograniczoną tożsamością, kompromitacja nie daje dostępu do konta dewelopera. To ta sama lekcja, co przy Agentjacking i Claude Code — jedyną twardą granicą jest to, czego agent fizycznie nie może zrobić, nie to, co mu się każe w instrukcji.
Źródła
Microsoft Security — oficjalna analiza AutoJack z mechanizmem trzech CWE i opisem poprawek: https://www.microsoft.com/en-us/security/blog/2026/06/18/autojack-single-page-rce-host-running-ai-agent/
Cyber Security News — szczegóły łańcucha exploitów i przepływu ataku: https://cybersecuritynews.com/autojack/
GitHub — commit b047730 z poprawką (server-side parameter binding, uszczelnienie auth): https://github.com/microsoft/autogen/commit/b0477309d2a0baf489aa256646e41e513ab3bfe8





















































































































































































Nie nowy atak, tylko naprawiony błąd. Co łatka Gemini CLI mówi o tym, że tryb –yolo w potoku CI/CD to nie jest dobry pomysł