Kritikus GitLab-hiba távoli kódfuttatást tesz lehetővé – nyilvánossá vált a PoC exploit

Kritikus GitLab RCE hiba: nyilvánossá vált a PoC exploit

Biztonsági kutatók proof-of-concept exploitot hoztak nyilvánosságra egy több GitLab-verziót érintő távoli kódfuttatási sérülékenységhez. A publikáció jelentősen növeli a kockázatot azoknál a szervezeteknél, amelyek még nem telepítették a 2026 júniusában kiadott javításokat.

A sérülékenység kihasználásával egy hitelesített GitLab-felhasználó, aki jogosult módosításokat commitolni egy projektbe, operációs rendszer szintű parancsvégrehajtást érhet el a GitLabot futtató kiszolgálón.

A támadónak ehhez nincs szüksége:

  • GitLab-rendszergazdai jogosultságra;
  • GitLab Runner feletti kontrollra;
  • más felhasználó projektjének kompromittálására;
  • rendszergazdai közreműködésre;
  • arra, hogy egy másik felhasználó megnyissa a rosszindulatú tartalmat.

A támadási lánc a GitLab Jupyter Notebook fájlokhoz biztosított speciális diff-megjelenítési funkcióját és az Oj Ruby JSON-feldolgozó könyvtár két memóriabiztonsági hibáját kapcsolja össze.

Sikeres kihasználás esetén a parancsok a GitLab Puma alkalmazásfolyamatai által használt git operációs rendszerbeli szolgáltatásfiók jogosultságaival futnak.

Nyilvánosságra került a működő exploit

A depthfirst biztonsági vállalat 2026. július 24-én publikálta a sérülékenység részletes technikai elemzését és demonstrációs exploitját.

Ez körülbelül hat héttel azután történt, hogy GitLab már frissítette a problémás Oj komponenst.

A javítást tartalmazó első GitLab-verziók:

  • GitLab 19.0.2
  • GitLab 18.11.5
  • GitLab 18.10.8

A frissítések 2026. június 10-én jelentek meg.

A probléma azért különösen érdekes patch management szempontból, mert az Oj 3.17.3-ra történő frissítése nem külön biztonsági javításként jelent meg a GitLab kiadási megjegyzéseiben.

A módosítás a normál hibajavítások között szerepelt.

Nem társult hozzá:

  • külön CVE-azonosító;
  • CVSS-pontszám;
  • RCE-re figyelmeztető leírás.

Ezért azok a szervezetek, amelyek kizárólag CVE-feedek vagy a gyártói security táblázatok alapján priorizálták a júniusi frissítéseket, könnyen alábecsülhették a módosítás jelentőségét.

Mely GitLab-rendszerek érintettek?

A probléma a saját infrastruktúrán üzemeltetett, vagyis self-managed GitLab Community Edition és Enterprise Edition környezeteket érinti.

A licenccsomag önmagában nem jelent védelmet.

A Free, Premium és Ultimate környezetek egyaránt érintettek lehetnek.

A kutatók szerint a GitLab 15.2 és 18.9 közötti régebbi verziói szintén potenciálisan sérülékenyek, azonban ezekhez az ágakhoz életciklusuk miatt nem készült visszaportolt javítás.

Az ilyen rendszereket támogatott GitLab-verzióra kell frissíteni.

A GitLab.com szolgáltatást a javítás bejelentésekor már frissítették, a GitLab Dedicated ügyfelek számára pedig nem írtak elő külön beavatkozást.

A self-managed környezetek jelentik tehát a legfontosabb kockázati csoportot.

Nem maga a Ruby sérülékeny

A probléma nem a Ruby programozási nyelvben található.

A hibák az Oj nevű nagy teljesítményű JSON-feldolgozó könyvtárhoz kapcsolódnak.

Az Oj jelentős része natív C-kódban készült Ruby extensionként.

Ennek biztonsági szempontból fontos következménye van.

Egy hagyományos Ruby-alkalmazás memóriakezelését a futtatókörnyezet jelentős mértékben kontrollálja. Egy natív C extensionben található memóriakezelési hiba azonban olyan klasszikus sérülékenységeket hozhat létre, mint:

  • out-of-bounds write;
  • memóriakorrupció;
  • pointerek felülírása;
  • memóriacímek kiszivárgása.

A GitLab esetében pontosan ilyen hibák kombinációja vezetett el a távoli kódfuttatáshoz.

A Jupyter Notebook diff funkció biztosítja a belépési pontot

A támadási felület a GitLab Jupyter Notebook támogatásához kapcsolódik.

A Jupyter Notebook fájlokat széles körben használják:

  • adattudományban;
  • gépi tanulásban;
  • szoftverfejlesztésben;
  • kutatásban;
  • kiberbiztonsági munkában.

Az .ipynb fájlok a háttérben strukturált JSON-dokumentumok.

Egy hagyományos soronkénti Git diff azonban egy ilyen dokumentum esetében nehezen áttekinthető lenne.

A GitLab ezért speciális notebook-diff funkciót biztosít, amely a JSON-adatokat ember számára könnyebben értelmezhető formában jeleníti meg.

A rendszer többek között elkülönítheti:

  • a notebook celláit;
  • forráskódját;
  • metaadatait;
  • kimeneti eredményeit.

Ehhez a GitLab egy ipynbdiff nevű Ruby komponenst használ.

Repositoryból származó adat kerül natív C parserbe

A probléma biztonsági szempontból kritikus pontja az adatáramlás.

A GitLab a repositoryban található, tehát bizonyos felhasználók által kontrollálható notebooktartalmat átadja az Oj JSON-parserének.

A feldolgozás egy hosszú ideig futó Puma worker folyamaton belül történik.

Ez lényegében a következő bizalmi határátlépést hozza létre:

projektben tárolt felhasználói adat → notebook renderer → Oj JSON parser → natív C-kód → GitLab alkalmazásfolyamat

Ha a natív parser memóriakezelése hibás, a repositoryban elhelyezett speciálisan kialakított JSON-adat már nem egyszerű dokumentumként viselkedhet.

Két különálló memóriabiztonsági hiba alkotja a támadási láncot

A kutatók nem egyetlen hibából hozták létre a távoli kódfuttatást.

Két különálló Oj-sérülékenységet kapcsoltak össze.

Az egyik hiba memóriakorrupciót tesz lehetővé.

A másik memóriacímet képes kiszivárogtatni.

A kettő kombinációja azért lényeges, mert a modern operációs rendszerek számos memóriavédelmi mechanizmust alkalmaznak.

Az egyik legfontosabb az ASLR – Address Space Layout Randomization.

Az ASLR minden folyamatindításkor változtatja a fontos könyvtárak és memóriaterületek címét, hogy a támadó ne tudja előre, hol találhatók a kihasználáshoz szükséges komponensek.

Ha azonban egy másik sérülékenység kiszivárogtat egy érvényes memóriacímet, az ASLR által biztosított bizonytalanság részben megszüntethető.

Az első hiba a túl mély JSON-struktúrák kezeléséhez kapcsolódik

Az Oj parser belsőleg nyilvántartja, hogy egy JSON-dokumentum feldolgozásakor milyen mélységben jár.

Ez szükséges például az egymásba ágyazott:

  • objektumok;
  • tömbök

kezeléséhez.

A sérülékeny verzióban azonban a parser nem ellenőrizte megfelelően, hogy a nesting depth továbbra is belefér-e az erre fenntartott belső memóriaterületbe.

Extrém mélyen egymásba ágyazott JSON-struktúra esetén a parser ezért a kijelölt területen kívülre írhatott.

Ez out-of-bounds write, amely szomszédos memóriaterületek sérüléséhez vezethet.

A kutatók a memóriakorrupciót irányíthatóbbá tették

Egy out-of-bounds write önmagában még nem feltétlenül jelent megbízható távoli kódfuttatást.

A kutatóknak ezért azt kellett megvizsgálniuk, hogy a sérült memória milyen további adatstruktúrákat befolyásolhat.

A részletes elemzés során olyan belső állapotot sikerült elérniük, amely végül lehetővé tette egy Oj által használt callbackhez kapcsolódó pointer manipulálását.

Ez kulcsfontosságú lépés volt a memóriakorrupció és a tényleges programvezérlés között.

Az upstream javítás nesting limiteket vezetett be annak megakadályozására, hogy a parser túllépje a számára fenntartott memóriaterületet.

A második hiba memóriacímet szivárogtathatott ki

A támadási lánc másik komponense rendkívül hosszú JSON object key-k kezeléséhez kapcsolódott.

Bizonyos szélsőséges kulcshosszak esetében egy integer-konverziós probléma miatt a parser nem a várt adatot kezelte megfelelően.

A kutatók által kialakított körülmények között ennek eredményeként egy belső pointerhez kapcsolódó adat kerülhetett vissza a feldolgozás eredményébe.

A GitLab pedig ezt a notebook diff részeként visszaküldhette a kliensnek.

Így a szerver belső memóriájáról származó információ jelent meg a HTTP-válaszban.

A memóriaszivárgás segített az ASLR megkerülésében

A kiszivárgott cím referenciapontot adott a kutatóknak a folyamat memóriatérképének meghatározásához.

Ezután következtetni tudtak olyan betöltött komponensek helyére, mint:

  • Ruby runtime;
  • standard C library;
  • más szükséges könyvtárak.

A memóriakorrupciós primitívvel kombinálva ez végül lehetővé tette a programvezérlés eltérítését és operációs rendszer szintű parancsvégrehajtás demonstrálását.

A technikai részletek nyilvánosságra kerülése azért növeli jelentősen a veszélyt, mert a támadóknak már nem a teljes kutatási folyamatot kell önállóan végigjárniuk.

Nincs szükség külön áldozatra

A sérülékenység egyik legfontosabb tulajdonsága, hogy a támadónak nem kell rávennie egy másik felhasználót a rosszindulatú notebook megnyitására.

Sok repository-alapú támadásnál szükséges, hogy:

  • maintainer megnyisson egy merge requestet;
  • adminisztrátor átnézzen egy fájlt;
  • valaki elindítson egy pipeline-t;
  • felhasználó megnyisson egy rosszindulatú dokumentumot.

Itt azonban maga a támadó is aktiválhatja a sérülékeny feldolgozási útvonalat.

Ha jogosult commitolni egy projektbe, létrehozhatja a szükséges notebookváltozatokat, majd saját maga megnyithatja a commit diff nézetet.

Az „authenticated RCE” besorolás nem jelenti azt, hogy alacsony a kockázat

Valóban szükség van GitLab-fiókra.

Ez csökkenti a támadási felületet egy teljesen hitelesítés nélküli RCE-hez képest.

Egy vállalati GitLab-környezetben azonban több száz vagy több ezer felhasználó rendelkezhet fiókkal.

Ide tartozhatnak:

  • alkalmazott fejlesztők;
  • külső fejlesztők;
  • beszállítók;
  • alvállalkozók;
  • kutatók;
  • gyakornokok;
  • federált identitással rendelkező partnerek.

Egy kompromittált fejlesztői fiók is elegendő lehet.

További kockázatot jelentenek azok az instance-ok, amelyek lehetővé teszik a nyílt regisztrációt vagy a személyes projektek létrehozását.

Nem feltétlenül kell érzékeny repositoryhoz hozzáférni

A támadás célja nem elsősorban a projektben található kód.

A projekt a sérülékeny GitLab szerveroldali feldolgozási funkció eléréséhez szükséges.

Ez azt jelenti, hogy bizonyos konfigurációkban a támadónak nem feltétlenül kell hozzáférnie a vállalat legértékesebb repositoryjához.

Elegendő lehet egy olyan projekt, amelyben commitjoggal rendelkezik, és amelyen keresztül elérhető a notebook-diff feldolgozás.

Ez jelentősen megváltoztatja a jogosultsági kockázat értékelését.

A kód a git szolgáltatásfiók jogosultságával fut

A demonstrált exploit nem biztosít azonnali root hozzáférést.

A parancsok a git operációs rendszerbeli felhasználó nevében futnak.

Ez azonban egy GitLab szerveren továbbra is rendkívül érzékeny biztonsági kontextus.

A GitLab alkalmazásrétege hozzáférhet többek között:

  • privát repositorykhoz;
  • alkalmazáskonfigurációhoz;
  • szolgáltatáscredentialökhöz;
  • Rails secret értékekhez;
  • CI/CD-adatokhoz;
  • tokenekhez;
  • adatbázis-kapcsolatokhoz;
  • belső GitLab-szolgáltatásokhoz.

A tényleges hozzáférés természetesen az adott infrastruktúra kialakításától függ.

A GitLab kompromittálása supply-chain kockázatot jelent

A GitLab sok szervezetnél nem egyszerű forráskód-tároló.

Központi helyet foglalhat el a teljes fejlesztési és deployment folyamatban.

Kapcsolódhat:

  • CI/CD pipeline-okhoz;
  • container registryhez;
  • cloud deploymenthez;
  • Kubernetes környezetekhez;
  • artifact repositorykhoz;
  • secrets management rendszerekhez;
  • production deployment folyamatokhoz.

Ezért egy GitLab alkalmazásszerver kompromittálása potenciálisan a teljes szoftverellátási láncot veszélyeztetheti.

A támadó célja lehet például további hitelesítő adatok megszerzése vagy más belső szolgáltatások elérése.

A tényleges hatás erősen függ az infrastruktúrától

Nem minden GitLab telepítés jelent azonos kockázatot.

A következményeket jelentősen befolyásolja:

  • konténerben fut-e a GitLab;
  • milyen izolációt kap a Webservice;
  • külön gépen működik-e a repository storage;
  • milyen credentialök vannak elérhetőek a Puma környezetében;
  • milyen hálózati kapcsolat engedélyezett;
  • elérhető-e az adatbázis;
  • milyen kapcsolat van Gitaly felé;
  • elérhetők-e CI/CD vagy cloud credentialök.

A „csak git user” ezért nem tekinthető megfelelő kockázatcsökkentő érvnek.

A publikált PoC egy meghatározott környezetre készült

A nyilvánosságra hozott demonstrációt GitLab 18.11.3, 64 bites x86 környezetre fejlesztették.

A megbízható kihasználás több környezetfüggő tényezőre támaszkodik.

Ez azt jelenti, hogy a jelenlegi PoC nem feltétlenül működik változtatás nélkül minden sérülékeny GitLab telepítés ellen.

Ez azonban csak átmeneti technikai akadály.

A teljes kutatás és a PoC publikálása jelentősen csökkenti annak munkamennyiségét, amely egy másik buildre adaptált exploit elkészítéséhez szükséges.

A Puma újraindítása sem tekinthető javításnak

A memóriacímek a Puma folyamat újraindításakor megváltozhatnak.

Ez bizonyos exploitállapotokat érvényteleníthet.

Az újraindítás azonban nem szünteti meg az alapvető sérülékenységet.

A támadó újra elvégezheti a szükséges előkészítést.

Ezért:

Puma restart ≠ security patch.

A tényleges megoldás a sérülékeny Oj-verziót tartalmazó GitLab kiadás lecserélése.

A javítás szokatlan módon jelent meg a release notes-ban

A GitLab 2026. június 10-i patch kiadása 12 másik sérülékenységet külön security táblázatban sorolt fel.

Ezeknél szerepeltek:

  • CVE-k;
  • súlyossági értékek;
  • érintett verziók;
  • biztonsági hatások.

Az Oj 3.17.3-ra történő frissítése azonban a bug fixes között jelent meg.

Ez fontos tanulság a vállalati sérülékenységkezelés számára.

A CVE-alapú patch management önmagában nem elegendő

Ha egy szervezet kizárólag:

  • CVE-adatbázisokat;
  • vulnerability scanner eredményeket;
  • CVSS-határértékeket

használ a frissítések priorizálására, az ilyen esetek könnyen kimaradhatnak.

A dependency update mögött ugyanis kritikus biztonsági javítás húzódhat meg akkor is, ha azt a gyártó eredetileg nem külön security advisoryként kommunikálta.

A GitLab ugyanakkor már júniusban arra kérte a self-managed ügyfeleket, hogy mielőbb frissítsenek.

Kubernetes esetén különösen fontos a tényleges alkalmazásverzió

GitLab Helm Chart vagy GitLab Operator használata esetén nem elegendő kizárólag a chart vagy az Operator verzióját ellenőrizni.

A GitLab alkalmazás verziószáma külön életciklust követhet.

A kritikus komponens a Puma folyamatot és Oj native extensiont tartalmazó Webservice image.

Az adminisztrátoroknak ezért valamennyi Webservice replika tényleges image-verzióját ellenőrizniük kell.

Vegyes verziójú Kubernetes környezetben maradhat sérülékeny pod

Egy részben végrehajtott upgrade után előfordulhat, hogy:

  • bizonyos podok már javítottak;
  • más podok még régi image-et futtatnak;
  • rollback konfiguráció régi image-re mutat;
  • secondary site régi verziót használ.

Ezért nem elegendő azt megállapítani, hogy „a GitLab frissítése megtörtént”.

A ténylegesen futó workloadokat kell inventoryzni.

Nincs megerősített aktív kihasználás

A depthfirst a technikai publikáció idején nem rendelkezett információval arról, hogy a sérülékenységet valódi támadásokban aktívan kihasználták volna.

A GitLab ugyanakkor reprodukálta a távoli kódfuttatási támadási láncot a javítás kiadása előtt.

Az aktív támadásokra utaló bizonyíték hiánya nem jelenti azt, hogy a sérülékenységet biztosan senki nem használta ki.

A helyzetet pedig jelentősen megváltoztatta a PoC publikálása.

A nyilvános exploit után nő a kockázat

A támadók számára most már rendelkezésre áll:

  • részletes technikai elemzés;
  • a két memóriabiztonsági hiba működésének leírása;
  • GitLab-specifikus támadási útvonal;
  • demonstrációs exploit;
  • javítás előtti és utáni kód összehasonlításának lehetősége.

A következő logikus lépés különböző GitLab-buildre és infrastruktúrára adaptált exploitok megjelenése lehet.

Ezért az internet felől elérhető self-managed GitLab rendszereket kiemelt prioritással kell frissíteni.

Közel négy évig létezett a támadási felület

Az érintett Oj parser implementáció 2021 augusztusában került a projektbe, és az Oj 3.13.0 verzióban jelent meg.

A GitLab 2022 júliusában vezette be az érintett Oj::Parser feldolgozási útvonalat a notebookkezelésbe.

Ez a GitLab 15.2.0 környékétől tette elérhetővé a sérülékeny útvonalat.

A kutatók számítása szerint az Oj hibái 1753 napig voltak jelen a kódbázisban a javítás előtt.

A GitLabon keresztül elérhető támadási felület pedig közel négy évig létezett.

Automatizált elemzés indította el a kutatást

A depthfirst Open Defense Initiative keretében elemezte az Oj natív kódját.

Az automatizált elemzés több lehetséges problémát jelzett, amelyeket később emberi kutatók vizsgáltak meg részletesen.

A folyamat során több memóriabiztonsági problémát azonosítottak, majd ezek közül kettőt sikerült olyan módon összekapcsolni, hogy GitLabon keresztül távoli kódfuttatási láncot alkossanak.

Ez egyben jól mutatja az AI-val és automatizált kódelemzéssel támogatott vulnerability research növekvő jelentőségét.

Gyorsan reagáltak a fejlesztők

A koordinált disclosure idővonala:

  • 2026. május 21. – az Oj hibáit jelentették a projektnek;
  • május 27. – az Oj maintainer beolvasztotta a szükséges javításokat;
  • június 4. – megjelent az Oj 3.17.3;
  • június 5. – a GitLab külön értesítést kapott az elérhető RCE-láncról;
  • június 8. – a GitLab megerősítette a problémát;
  • június 10. – megjelent a GitLab 19.0.2, 18.11.5 és 18.10.8;
  • július 17. – a GitLab lezárta a hibajelentést;
  • július 24. – a depthfirst publikálta a technikai elemzést és a PoC-t.

A javítás tehát már jóval a teljes technikai részletek nyilvánosságra kerülése előtt rendelkezésre állt.

Mit tegyenek most a GitLab-adminisztrátorok?

Az első feladat valamennyi self-managed GitLab rendszer tényleges verziójának azonosítása.

Nemcsak a fő szervert kell ellenőrizni.

A vizsgálatnak ki kell terjednie:

  • minden GitLab node-ra;
  • Webservice containerre;
  • Kubernetes podra;
  • secondary site-ra;
  • tartalék és rollback image-ekre.

A sérülékeny verziókat a legfrissebb támogatott GitLab kiadásra kell frissíteni.

Nem célszerű pusztán a legelső javított verzióig frissíteni, ha már újabb támogatott security release áll rendelkezésre.

Az Oj 3.17.3 a két szükséges javítást tartalmazó első verzió

Azokban a környezetekben, ahol az Oj dependency külön kezelhető, a 3.17.3 az első olyan verzió, amely mindkét szükséges korrekciót tartalmazza.

A gyakorlatban azonban itt is a legújabb kompatibilis stabil kiadás használata javasolt.

GitLab esetében elsődlegesen a támogatott GitLab-verzióra történő frissítés az ajánlott út.

A logokat is át kell vizsgálni

A frissítés mellett különösen a nagy értékű vagy internet felől elérhető GitLab rendszereknél érdemes kompromittálási vizsgálatot végezni.

Gyanús lehet:

  • szokatlanul nagy .ipynb fájl;
  • rendellenes notebook commit diff aktivitás;
  • ugyanazon diff végpont ismételt lekérése;
  • váratlan Puma worker crash;
  • Puma újraindulás;
  • GitLab Webservice folyamatból induló szokatlan gyermekfolyamat;
  • nem várt operációs rendszer parancsvégrehajtás;
  • rendellenes outbound kapcsolat;
  • ismeretlen belső szolgáltatás felé induló kommunikáció.

Ezek egyike önmagában nem bizonyítja a kompromittálást, de együtt már erős indikátor lehet.

Kompromittálás gyanúja esetén application-server breachként kell kezelni

Ha hiteles bizonyíték van arra, hogy a sérülékenységet kihasználták, nem elegendő a GitLab frissítése.

Az eseményt alkalmazásszerver-kompromittálásként kell kezelni.

Az incidenskezelés része lehet:

  • az érintett rendszer izolálása;
  • forenzikus bizonyítékok megőrzése;
  • hozzáférhető secret értékek azonosítása;
  • tokenek és credentialök rotálása;
  • repository-hozzáférések ellenőrzése;
  • CI/CD környezet vizsgálata;
  • deployment credentialök ellenőrzése;
  • kapcsolódó belső rendszerek átvizsgálása.

Különösen fontos meghatározni, milyen titkokhoz férhetett hozzá a Puma/Webservice folyamat.

A hozzáférések korlátozása csak átmeneti kockázatcsökkentés

A frissítést elhalasztó szervezetek csökkenthetik a támadási felületet például:

  • a nyílt regisztráció tiltásával;
  • projektlétrehozási jogosultságok szűkítésével;
  • külső felhasználók hozzáférésének korlátozásával;
  • GitLab hálózati elérhetőségének szűkítésével.

Ezek azonban nem javítják a memóriabiztonsági hibát.

A megfelelő megoldás továbbra is a frissítés.

Összegzés

A GitLabot érintő támadási lánc azért különösen veszélyes, mert egy viszonylag alacsony jogosultságú, de commitolásra képes felhasználó által kontrollált Jupyter Notebook tartalmától egészen a GitLab alkalmazásszerverén történő operációs rendszer szintű parancsvégrehajtásig vezethet.

A lánc két Oj memóriabiztonsági problémát kapcsol össze:

memóriakorrupció + memóriacím-szivárgás → ASLR megkerülésének támogatása → programvezérlés eltérítése → RCE

A sérülékenységet különösen fontossá teszi, hogy nincs szükség arra, hogy egy rendszergazda vagy más felhasználó megnyissa a rosszindulatú tartalmat. A támadó saját maga aktiválhatja a sérülékeny notebook-diff feldolgozást.

A GitLab már 2026. június 10-én kiadta a javított verziókat, de az Oj dependency frissítése nem külön security fixként szerepelt a release notes-ban. Emiatt azok a szervezetek, amelyek kizárólag CVE- vagy CVSS-alapú patch prioritizálást alkalmaznak, könnyen figyelmen kívül hagyhatták.

A július 24-én nyilvánosságra hozott részletes technikai elemzés és PoC azonban új kockázati szintet jelent.

A self-managed GitLab rendszerek üzemeltetőinek ezért nem érdemes megvárniuk egy külön CVE-t vagy az aktív kihasználás első bizonyítékait: az érintett rendszereket a legfrissebb támogatott GitLab-verzióra kell frissíteni, és a nagy értékű vagy internet felől elérhető példányokon indokolt a korábbi gyanús notebook-diff és Puma/Webservice aktivitás visszamenőleges ellenőrzése is.

Az oldal tartalma nem másolható!