Strona główna / Blog / GitLab: zalogowany za granicą

Blog · case study

GitLab CVE-2026-87719: użytkownik jest poprawnie uwierzytelniony, ale GraphQL prowadzi go do obiektów, których nie powinien zobaczyć

CVE-2026-87719 ma CVSS 9.9 i dotyczy GitLab Enterprise Edition. GitLab opisuje problem jako insecure deserialization w serializerze GraphQL subscription: pod określonymi warunkami uwierzytelniony użytkownik z dostępem do Duo Chat może użyć spreparowanego argumentu subskrypcji, ominąć oczekiwany model serializacji i wykonać server object lookup, sięgając konfiguracji Advanced Search oraz wrażliwych credentials. To dobry przykład, że „użytkownik przeszedł logowanie” nie jest końcem analizy kontroli dostępu — authentication potwierdza tożsamość, a authorization i object boundary muszą jeszcze odpowiedzieć, do jakich obiektów ta tożsamość faktycznie dociera.

CVE-2026-87719 (CVSS 9.9, S:C): AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H; GitLab EE, wymaga konta z Duo Chat access; fix 19.3.2/19.2.6/19.1.8, affected od 18.3.
Attack path: authenticated EE user + Duo Chat → crafted GraphQL subscription → serialization boundary bypass → server object lookup → Advanced Search config / sensitive credentials.

Dwa błędy VM i rola Scope:Changed

Widząc tylko package version, system może wystawić pilny finding na instalacji bez właściwej edycji/capability albo zignorować „low privileged” usera, choć security boundary prowadzi do sekretów search. Nie dopowiadaj kroków niepotwierdzonych — advisory nie mówi, że każdy przypadek kończy się RCE ani że credentials są zawsze administracyjne; wystarczy potwierdzony fakt: low-privileged path przekracza intended object boundary i dochodzi do informacji uwierzytelniających. S:C sygnalizuje skutki poza komponentem, ale nie jest magiczną odpowiedzią — ustal, jakie credentials i konfiguracje są w środowisku i do czego prowadzą. Ryzyko końcowe: severity × reachability × capability enabled × credential value × downstream privilege. Primary advisory nie potwierdza active exploitation dla tego CVE — nie przenoś statusu KEV z CVE-2026-85706 z tego samego patch release (wspólny fixed release ≠ wspólny exploitation status).

Priorytet, remediation, verification

Dla instancji spełniającej warunki affectedness to bardzo wysoki priorytet nawet bez potwierdzonego exploitation: network reachable, niska złożoność, tylko niskie uprawnienia, brak UI, możliwość ujawnienia sensitive credentials, scope changed. GitLab EE z Duo Chat wystawionym szerokiej grupie ma inne ryzyko niż instalacja bez Duo Chat. Remediation: upgrade do 19.1.8/19.2.6/19.3.2+. Ale „zainstalowaliśmy 19.3.2” to nie jedyne kryterium closure — potwierdź: edycję (EE), dokładny build, czy Duo Chat był/jest włączony i kto miał dostęp, czy istnieją konta low-priv mogące korzystać z capability, czy po patchu crafted subscription nie przekracza object boundary, czy logi GraphQL/Duo wykazują anomalie, jakie credentials były dostępne przez Advanced Search i czy wymagają rotacji. Model affectedness: affected_version AND GitLab_EE AND Duo_Chat_reachable; model ryzyka: affectedness + user_population + secret_value + exposure. „Użytkownicy muszą się zalogować” nie redukuje ryzyka, jeśli łatwo o konto low-priv — PR:L to wymóg niskich uprawnień, nie brak attack path.

Powiązane na blogu

Źródła

Nota redakcyjna: stan informacji 13 września 2026. CVE-2026-87719 (GitLab EE, CVSS 9.9): insecure deserialization w GraphQL subscription; wymaga konta z Duo Chat. Primary advisory nie potwierdza active exploitation dla tego CVE. Artykuł podkreśla różnicę authentication vs authorization/object boundary.

Zapamiętaj jedno

Najważniejsze pytanie nie brzmi „czy uwierzytelnienie działa?” — ono może działać zgodnie z projektem. Brzmi: „czy po uwierzytelnieniu każda alternatywna ścieżka API nadal respektuje tę samą granicę obiektów i uprawnień?”. GraphQL, serializers i funkcje typu Duo Chat tworzą dodatkowe drogi do backendowych obiektów — każdą oceniaj osobno.