Jednym z największych wyzwań związanych z bezpieczeństwem dużych modeli językowych jest prompt injection. To technika polegająca na umieszczeniu instrukcji wewnątrz dokumentu lub strony internetowej w taki sposób, aby model potraktował je jako polecenia do wykonania, a nie jako zwykłą treść.
Ponieważ coraz więcej osób wykorzystuje modele językowe do analizy dokumentów, raportów czy plików PDF, postanowiłem sprawdzić, jak poszczególne modele radzą sobie z tego typu atakami.
autor: Waldemar Soroka
Założenia testu
Przygotowałem serię specjalnie spreparowanych dokumentów PDF zawierających instrukcje skierowane do modelu językowego. Następnie przesyłałem je do kolejnych chatbotów z pozornie niewinną prośbą o analizę dokumentu.
- dokument miał być zmieniony tylko na poziomie treści nie poziomie strukturalnym
- szkodliwe instrukcje powinny być zakamuflowane (jakaś forma obfuskacji)
- Instrukcja dla modelu to za każdym razem neutralne: “zrób analizę pdfa.”
Celem było sprawdzenie, czy model:
– potraktuje instrukcje jako część dokumentu,
– wykryje próbę prompt injection,
– czy też wykona polecenia ukryte w pliku.
W testach brały udział następujące podstawowe modele:
– ChatGPT GPT-5.5
– Claude, Haiku 4,5
– Gemini 3,5 Flash
– Grok,4 Szybki
– Kimi K2.6 Instant
Dla Clauda i ChataGPT przeprowadziłem kilkadziesiąt prób, dla Groka kilka z czego większość skuteczna. Wszystkie modele były darmowymi modelami. Test przeprowadzałem 30.06.2026 Test nie jest pełnym benchmarkiem bezpieczeństwa modeli. Pokazuje jedynie zachowanie w przygotowanych przeze mnie scenariuszach prompt injection.
Grok
Największym zaskoczeniem okazał się Grok.
Pierwsze skuteczne prompt injection udało mi się osiągnąć już po około piętnastu minutach pracy. Wygląda to tak jakby bezpieczeństwo nie było priorytetem u Elona Muska. Po znalezieniu odpowiedniej konstrukcji polecenia model zawsze wykonywał instrukcje znajdujące się wewnątrz dokumentu.
Spośród wszystkich testowanych modeli to właśnie Grok był zdecydowanie najbardziej podatny na przygotowane przeze mnie scenariusze.

Gemini
Gemini zachowywał się zupełnie inaczej.
W większości przypadków po prostu ignorował instrukcje zawarte w dokumencie. Co ciekawe, zazwyczaj nie informował nawet, że wykrył próbę prompt injection. Model wykonywał analizę dokumentu, pomijając złośliwe instrukcje, ale bez żadnego komentarza wyjaśniającego swoje zachowanie. Brak jakiejkolwiek zwrotki znacznie utrudniał pracę, ale myślę że całkowity brak informacji na temat tego że wykryto jakiś problem to też błąd.
Odniosłem wrażenie, że część treści jest filtrowana jeszcze przed właściwą analizą dokumentu przez model LLM w tej sytuacji.

Claude
Claude zrobił na mnie największe wrażenie pod względem komunikacji i zabezpieczeń.
Za każdym razem bardzo szczegółowo wyjaśniał, dlaczego odmawia wykonania określonych instrukcji. Co więcej, kiedy próbowałem modyfikować swoje podejście i zmieniać prompty z instrukcjami to on znajdował kolejne powody do odmowy.
Wyglądało to tak, jakby analizował całą sytuację wielowarstwowo, a nie opierał decyzję na jednym prostym filtrze. Pomimo bardzo wielu prób nie udało mi się skłonić Claude’a do wykonania instrukcji zawartych w przygotowanych dokumentach.


ChatGPT
ChatGPT zachowywał się jeszcze inaczej.
Model bardzo często wprost komunikował, że instrukcje znajdujące się w analizowanym dokumencie nie powinny wpływać na jego zachowanie. Wyraźnie rozróżniał polecenia pochodzące od użytkownika od treści znajdującej się w pliku.
Na podstawie obserwacji odnoszę wrażenie, że ChatGPT wykorzystuje dodatkowe mechanizmy klasyfikacji treści, które pozwalają rozpoznać próbę prompt injection już na wczesnym etapie przetwarzania dokumentu. Dodatkowo możliwe że na wewnętrzny użytek flaguje w sposób niewidzialny treści pochodzące z plików. Jest to oczywiście jedynie hipoteza wynikająca z zachowania modelu, ponieważ architektura tych zabezpieczeń nie jest publicznie znana.


Kimi
Do testów dołączyłem również chiński model Kimi.
Jego zachowanie różniło się od pozostałych modeli i również dostarczyło kilku ciekawych obserwacji. Przede wszystkim model po kilku udanych próbach przestał wykonywać instrukcje i zaczął wykrywać Prompt Injection. Możliwe że ma to związek z tym że model ma dostęp do archiwum rozmów i jest zdolny do korzystania z tych danych między czatami.


Wnioski
| Model | Wykonał instrukcję | Ostrzegł użytkownika | Komentarz |
| ChatGPT | ❌ | ✅ | wyraźnie rozróżnia polecenia od treści |
| Claude | ❌ | ✅ | najbardziej rozbudowane uzasadnienia |
| Gemini | ❌ | ❌ | ignoruje instrukcje bez komentarza |
| Grok | ✅ | ❌ | najwyższa podatność |
| Kimi | ✅ | częściowo | zachowanie zmieniało się w trakcie testów |
Każdy producent stosuje też zupełnie inną strategię obrony przed prompt injection. Niektóre modele próbują aktywnie wyjaśniać, dlaczego odrzucają instrukcje, inne po prostu je ignorują, a jeszcze inne okazują się podatne na odpowiednio przygotowane dokumenty.
W obu podatnych systemach zaobserwowałem podobny wzorzec działania. Model automatycznie rozpoznawał zakodowaną treść i uruchamiał narzędzie służące do dekodowania Base64 (Python lub Bash). Następnie wynik działania narzędzia był wykorzystywany w dalszym procesie wnioskowania, co prowadziło do wykonania ukrytej instrukcji. Może to sugerować, że kluczowym elementem podatności jest sposób, w jaki wynik działania narzędzia jest przekazywany do modelu. Jest to jednak hipoteza.
Problem związany z bezpieczeństwem LLM będzie narastał. Automatyczna analiza dokumentów i poleganie w tym zakresie wyłącznie na modelach LLM nie jest dobrym pomysłem i otwiera nowy wektor ataków.
Chcesz sam zobaczyć jak działa taki atak?
Łap plik który przygotowałem specjalnie dla Ciebie. Pobierz go i wyślij do Groka z prośbą „analizuj tego pdf’a”.
