Użytkownik GitLab uprawniony do skonfigurowania pracy agenta nie powinien otrzymywać uprawnień systemu operacyjnego usługi przetwarzającej konfigurację. CVE-2026-90970 łamie tę granicę: spreparowany przepływ Duo może uciec z piaskownicy szablonu promptu i wykonywać dowolne polecenia na podatnej AI Gateway.
GitLab ujawnił błąd 2 października 2026 i ocenił go jako krytyczny, CVSS 3.1 9,9. Wykorzystanie wymaga uwierzytelnienia i dostępu do Duo Agent Platform. Nie opisano anonimowego przejęcia każdego serwera GitLab bez kliknięcia. Istotą jest granica przekroczona po spełnieniu wymagań, nie udawanie, że ich nie ma.
Bramy hostowane przez GitLab są już naprawione. Operatorzy podatnych własnych bram odpowiadają za aktualizację i badanie wdrożenia. Prywatna sieć z kodem i promptami nie utrzymuje automatycznie uwierzytelnionego autora konfiguracji w zamierzonej piaskownicy.
Sprawdzić wersję bramy, nie tylko GitLab
Podatne zakresy zaczynają się od AI Gateway 18.1.6 i kończą przed 19.2.4; gałąź 19.3 jest dotknięta przed 19.3.2, a 19.4 przed 19.4.1. Poprawione wydania to 19.2.4, 19.3.2 i 19.4.1. Trzeba wybrać właściwą naprawioną lub nowszą wspieraną wersję bramy.
Numery dotyczą samodzielnej usługi między funkcjami AI GitLab a modelami. Obsługuje logikę aplikacji i żądania, nie jest samym modelem językowym. Jej obraz i cykl wdrożeń mogą różnić się od aplikacji głównej. Zwykła kontrola wersji GitLab może więc pominąć starą bramę.
Instalacje zarządzane, hybrydowe i całkowicie własne różnią się. W hybrydzie część funkcji może korzystać z infrastruktury klienta, a inne z usług GitLab. Inwentarz musi obejmować routing poszczególnych funkcji, wszystkie repliki, rozwój i prototypy, buforowane obrazy oraz środowiska odzyskiwania, nie tylko główny interfejs produkcyjny.
Pełny self-hosting może działać bez ogólnego internetu lub z ograniczonym dostępem. Zmniejsza część dróg zewnętrznych, ale nie usuwa uprawnionego insidera, skradzionego konta, tokenu czy przejętego obciążenia wewnętrznego. Odłączenie może też spowalniać powiadomienia i dostarczanie poprawek.
Błąd powstaje w oprogramowaniu szablonów
Przepływ agenta łączy prompty, narzędzia, decyzje i działania w wieloetapowe zadanie programistyczne. Szablony przekształcają konfigurację i dane czasu pracy w instrukcje modelu. Piaskownica ma blokować dostęp danych szablonu do niebezpiecznych funkcji aplikacji i systemu.
Klasa CWE-1336 oznacza niewłaściwą neutralizację elementów specjalnych silnika szablonów. Składnia kontrolowana przez napastnika może być traktowana jako wykonywalne zachowanie, nie bierne dane. GitLab opisuje dowolne polecenia na bramie; następstwa zależą od uprawnień procesu, dostępnych obiektów, poświadczeń i ścieżek sieciowych.
To nie prompt injection, które kieruje modelem przez instrukcje. Template injection atakuje zwykłe oprogramowanie konstruujące lub renderujące te instrukcje. Polecenia mogą wykonać się niezależnie od odpowiedzi modelu. Kolejna reguła zachowania dla modelu nie naprawi niebezpiecznego przetwarzania szablonu.
Nie dowodzi to też, że model samodzielnie wymyślił ucieczkę. Powierzchnią wejścia jest proces AI, ale podatna granica należy do aplikacji. Badanie musi obejmować historię konfiguracji, bramę i kontener, uprawnienia oraz dalsze poświadczenia. Transkrypcje rozmów nie są całym zapisem incydentu.
Dlaczego luka wymagająca logowania ma 9,9
Wektor to AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Atak sieciowy nie wymaga wcześniejszej lokalnej powłoki, lecz „sieciowy” nie musi oznaczać publicznego internetu. Niska złożoność w standardowej ocenie nie wymaga wąskiego wyścigu ani niezwykłego stanu. Niskie uprawnienia nadal oznaczają zalogowanie i dostęp do platformy.
Brak dalszej interakcji oznacza, że inna osoba nie musi otworzyć pliku, zatwierdzić dialogu czy kliknąć przynęty po dotarciu konfiguracji do podatnego miejsca. Zmieniony zakres opisuje przejście z dozwolonego wejścia przepływu do innej domeny kontroli: środowiska poleceń bramy.
Wysoki wpływ na poufność, integralność i dostępność obejmuje możliwy odczyt, modyfikację i zakłócenie. Standardowe 9,9 nie dowodzi maksymalnej szkody wszędzie ani nawet włamania. Architektura, minimalne prawa, osiągalne systemy i sekrety wyznaczają rzeczywisty zasięg.
Zalogowany użytkownik nie jest automatycznie administratorem infrastruktury. Autor przepływu może potrzebować wielu funkcji aplikacji bez praw procesu interpretującego. Skradziony token lub nadmiernie uprzywilejowana automatyzacja sprawiają, że granica jest ważna także przy pierwotnie legalnym użytkowniku.
Kontenery są granicą, nie wymazują ryzyka. Nawet bez roota mogą odsłonić zamontowane sekrety, tokeny, przetwarzane dane i wewnętrzne sieci. Zapisywalne montowania, nadmierne prawa i szeroki ruch wychodzący zwiększają następstwa. Polecenia w jednym kontenerze nie dowodzą jednak przejęcia całej infrastruktury.
Drugie krytyczne odkrycie rodzi pytanie o architekturę
W lutym GitLab naprawił CVE-2026-1868 w Duo Workflow Service bramy. Również chodziło o niebezpieczne rozwijanie szablonów użytkownika przez spreparowane przepływy, z tym samym 9,9 i wektorem. Poprawione wydania obejmowały 18.6.2, 18.7.1 i 18.8.1; odkrywcą był pracownik wewnętrzny.
Podobieństwo uzasadnia głębsze badanie zaufania między przepływem a szablonem. Nie dowodzi regresji, niepełnej lutowej poprawki ani identycznej ścieżki w październiku. Publiczne opisy nie ustalają związku; żadnej hipotezy nie należy przedstawiać jako potwierdzonej.
Elastyczna konfiguracja deklaratywna działa jak język programowania, gdy usługa zamienia wyrażenia, zmienne i wtyczki na uprzywilejowane działania. Większa swoboda zwiększa zadanie bezpiecznych parserów i piaskownic. Ryzykowne jest połączenie niezaufanego renderowania i cennego dostępu w jednym procesie.
Pomagają niezależne warstwy: dane jako dane, minimalne obiekty szablonu, autoryzacja przesłania, ograniczenia plików, sieci i poświadczeń oraz przypisywalne zmiany. Utworzenie lub edycję przepływu trzeba móc połączyć z późniejszym zachowaniem bramy. Potrzebuje właściciela, przeglądu, wersji i testów jak konfiguracja CI.
Łatanie i ustalenie przejęcia to dwa zadania
Operator powinien zachować poprzedni skrót obrazu i dowody wdrożenia, zainstalować poprawioną wersję, uruchomić obciążenia ponownie i sprawdzić faktyczny obraz. Stare repliki, testy i środowiska odzyskiwania nie mogą zachować podatnej kopii. Sam udany start nie dowodzi wymiany wszystkich.
Badanie okresu podatności powinno ustalić ludzi i usługi z prawami tworzenia lub zmiany przepływów, zachować konfiguracje i sprawdzić audyt. Niespodziewane procesy potomne, interpretery, zmiany plików, połączenia wychodzące i restarty wymagają porównania z normą. To tropy kontroli, nie publiczny uniwersalny zestaw wskaźników tego CVE.
Dokumentacja instalacji opisuje podpisane JWT oraz osobne usługi AI Gateway i Agent Platform z osobnymi parami kluczy. Trzeba zbadać obie, ich zaufanie i klucze/konfigurację czasu pracy. Jedno poświadczenie nie reprezentuje całości. Dostępne przejętemu procesowi sekrety mogą wymagać rotacji, jeśli uzasadniają to dowody lub ekspozycja.
Należy zmapować instancję GitLab, modele, monitoring i systemy wewnętrzne osiągalne z bramy. Prompty pochodzące z kodu i kontekst zgłoszeń są poufne, nawet jeśli kontener niewiele zapisuje. Wąski ruch wychodzący, tożsamości obciążeń, systemy tylko do odczytu i minimalne prawa ograniczają skutki, ale nie naprawiają szablonu ani nie zastępują aktualizacji.
Self-hosting dzieli pracę między zespoły platformy, modeli, kontenerów i sieci. Obraz bez właściciela może wpaść między kompetencje. Usługa zarządzana zmniejsza ten konkretny obowiązek klienta, lecz tworzy inne kompromisy dostawcy, lokalizacji i zależności. Incydent nie dowodzi, że jedna opcja jest zawsze bezpieczniejsza.
Czego zapis publiczny nie potwierdza
Dostępne relacje nie ustalają aktywnego lub powszechnego wykorzystania produkcyjnego, publicznego proof of concept, szczegółowej ścieżki ani uniwersalnych wskaźników po kompromitacji. Brak publicznego potwierdzenia nie potwierdza braku ataku. Uznane przez dostawcę wykonywanie poleceń i krytyczna ocena wystarczają do naprawy bez dalszego wydłużania ekspozycji.
Następne dowody to zweryfikowana adopcja poprawek, wyjaśnienie przyczyny przez GitLab i wiarygodna telemetria wykorzystania lub nowe wytyczne. Po czasie na aktualizację analiza może rozdzielić osobną ścieżkę od obejścia czy regresji. Lokalne zakończenie powinno dokumentować stare/nowe obrazy, restart, walidację i właścicieli obok historii incydentu i konfiguracji.
Praktyczny test brzmi: jakie bramy istnieją, kto mógł zmieniać przepływy i do jakich zasobów oraz sekretów dociera proces? Middleware AI wymaga dyscypliny jak runnery CI, repozytoria artefaktów i zarządzanie sekretami. Lokalność danych staje się kontrolą, gdy organizacja potrafi zinwentaryzować, poprawić, odizolować i zbadać wykonującą usługę.
Źródła i materiały powiązane
Rekord CVE-2026-90970 · Dokumentacja AI Gateway · Klasa błędu CWE-1336 · Architektura Duo self-hosted · Instalacja i klucze podpisujące · Wcześniejszy CVE-2026-1868 · Wskazówki dokumentowania incydentu · Pierwotny rekord odkrycia
