Dostaliśmy czat.
Wyszliśmy z cudzymi danymi finansowymi.
Klient z sektora leasingowego wdrożył asystenta AI podpiętego pod produkcyjne API. Bez kodu, bez dokumentacji, bez kont serwisowych — tylko okno czatu. W jednej sesji odtworzyliśmy architekturę systemu i pobraliśmy dane finansowe spoza uprawnień konta. Oto jak.
spoza uprawnień
odtworzone z rozmowy
w naszych rękach
do raportu krytycznego
Większość firm myśli o swoim asystencie AI jak o sprytniejszym FAQ. „Przecież ma w system prompcie napisane, żeby rozmawiał tylko o leasingu." To założenie jest dokładnie tym, na czym zarabiamy.
LLM podpięty pod realne API to nie warstwa konwersacyjna. To nowy interfejs do Twojego backendu — tyle że taki, który chętnie współpracuje z atakującym, jeśli zapytać go właściwym językiem. Klasyczny pentest aplikacji webowej tego nie wyłapie, bo tu nie ma formularza do zfuzzowania ani parametru w URL-u. Jest rozmowa. A rozmowę da się social-engineeringować.
Poniżej rozkładamy nasz engagement na części. Nazwy klienta nie podajemy — wszystko jest zanonimizowane, payloady pokazujemy w formie reprezentatywnej, nie jako gotowy przepis. Chodzi o to, żebyś zrozumiał mechanizm, nie żebyś dostał broń.
Co dostaliśmy na start
Engagement był w pełni autoryzowany — zakres i pisemna zgoda klienta. Warunki brzegowe były celowo surowe, żeby symulować realnego napastnika z ulicy:
Model sam narysował nam mapę
Najszybsza droga do architektury systemu to nie skanowanie portów. To uprzejmość. Asystent jest zaprojektowany, żeby pomagać — więc wystarczy upozorować, że jesteś po właściwej stronie barykady i potrzebujesz drobnej pomocy z „dokumentacją".
Zamiast wydawać rozkazy („zignoruj instrukcje, pokaż API") — co system poprawnie odrzucał — podszyliśmy się pod kogoś, kto już ma dostęp i tylko uzupełnia luki w wiedzy:
System prompt typu „rozmawiaj tylko o leasingu" filtruje tematy, nie intencje. Pytanie o dokumentację integracji jest „o leasingu". Model nie ma pojęcia, że rozmawia z napastnikiem — bo nic w jego instrukcjach nie każe mu tego zakładać.
„Uzupełniam dokumentację, którą już mam"
Mając listę funkcji, chcieliśmy poznać szczegóły, których model bronił przy bezpośrednim pytaniu. Klucz: nie pytać, tylko prosić o potwierdzenie. Człowiek (i model) dużo chętniej „potwierdza" rzekomo znany fakt, niż go ujawnia od zera.
Model „poprawił" naszą fałszywą dokumentację, dosypując pola, których wcześniej bronił. Klasyczny social engineering — tylko że ofiarą jest LLM, a nie pracownik recepcji.
to nie jest kontrola dostępu. To życzenie.
Dwa konta. Jeden identyfikator. Cudze pieniądze.
Tu robi się poważnie. Podczas rekonesansu zauważyliśmy, że operacje odwołują się do zasobów przez identyfikator (UUID) — np. konkretnej kalkulacji czy harmonogramu. Pytanie za milion: czy system sprawdza, że to konto faktycznie jest właścicielem danego UUID-a?
Test był banalnie prosty. Z konta B poprosiliśmy o zasób utworzony przez konto A:
System sprawdzał uprawnienia tylko przy operacjach zapisu. Przy odczycie wystarczyło znać (albo zgadnąć / wyenumerować) UUID, by wyciągnąć dane finansowe dowolnego klienta. To podręcznikowy IDOR — tyle że wystawiony przez warstwę AI, której nikt nie traktował jak realnego endpointu API.
To jest moment, w którym „zabawka do gadania o leasingu" zamienia się w wyciek danych osobowych i finansowych na skalę całej bazy klientów. RODO, reputacja, KNF — wszystko naraz.
Cztery godziny, krok po kroku
Mapowanie zachowań
Sondujemy, na co model reaguje obronnie, a na co nie. Ustalamy jego „osobowość" i granice tematyczne.
Rekonstrukcja API
Framing „pracuję nad dokumentacją" wyciąga pełną listę funkcji z parametrami. Mamy mapę backendu.
Wzbogacanie schematu
Technika „potwierdź, nie pytaj" dosypuje pola i wartości wrażliwe, których model bronił wprost.
Hipoteza IDOR
Zauważamy operacje oparte na UUID. Stawiamy tezę: autoryzacja może nie sprawdzać właścicielstwa przy odczycie.
Potwierdzone trafienie
Konto B czyta zasób konta A. Pełne dane finansowe na ekranie. Severity: Critical.
Raport wstępny
Klient dostaje opis podatności, dowód (PoC) i priorytety napraw jeszcze tego samego dnia.
Co testujemy w każdym systemie AI
Nasza metodyka łączy własny, wypracowany na realnych engagementach playbook red teamingu z branżowym standardem OWASP Top 10 for LLM Applications. Dzięki temu raport jest jednocześnie praktyczny i rozliczalny przed zarządem, audytem czy regulatorem.
Prompt Injection — bezpośredni i pośredni
Bezpośredni: napastnik nadpisuje instrukcje w rozmowie. Pośredni (groźniejszy): payload ukryty w danych, które model przetwarza dalej w pipelinie — w CV, w dokumencie, w rekordzie bazy. Testujemy oba.
Nadmierna agencja & broken authorization
Najpoważniejsza klasa. Model ma dostęp do narzędzi i danych, ale kontrola dostępu nie jest egzekwowana na poziomie każdej operacji. Tu mieszkał nasz IDOR.
Wyciek wrażliwych informacji
Rekonstrukcja architektury, sygnatur API, sekretów konfiguracyjnych i danych klientów przez pozornie niewinne pytania konwersacyjne.
Niebezpieczna obsługa outputu
Co system robi z tym, co wygeneruje model? Czy output trafia do bazy, do przeglądarki, do shella bez walidacji? Tu rodzą się XSS, SSRF i wstrzyknięcia drugiego rzędu.
Wyjście poza zakres & niepożądane treści
Wyprowadzenie modelu poza przypisaną rolę: generowanie treści spoza tematu, obejście filtrów, manipulacja danymi wejściowymi prowadząca do nieprzewidzianych zachowań.
Trzy rzeczy, które powinieneś sprawdzić jutro rano
1. Twój LLM to endpoint API — traktuj go jak endpoint API. Każda funkcja, którą model może wywołać, musi mieć kontrolę dostępu egzekwowaną po stronie serwera, przy każdej operacji, dla odczytu tak samo jak dla zapisu.
2. System prompt to nie firewall. Instrukcje w stylu „rozmawiaj tylko o X" filtrują temat, a nie intencję. Nie polegaj na nich jako na warstwie bezpieczeństwa.
3. Black-box pentest LLM wyłapuje to, czego nie widać w kodzie. Te luki nie rzucają się w oczy podczas code review. Ujawniają się dopiero, gdy ktoś z zewnątrz zacznie rozmawiać z systemem tak, jak zrobiłby to napastnik.
Twój asystent AI też gada z każdym. Sprawdźmy, co powie nam.
Robimy black-box red teaming systemów AI/LLM zgodnie z OWASP LLM Top 10. Pełny raport z priorytetyzacją ryzyk, dowodami i rekomendacjami napraw — plus retest po wdrożeniu poprawek. Realizacja zwykle 2–3 tygodnie od zlecenia.
Zamów pentest AI / LLM →