GitLab vulnerability vazhdoi të ekzistonte pas upgrade në serverin Alpine
GitLab vulnerability CVE-2026-97229 vazhdoi të mund të shfrytëzohej në serverin self-hosted të Alpine Linux edhe pasi GitLab iu bë upgrade, sepse container i projektit përdorte një instalim të veçantë të Ruby që nuk mori patch e integruar të GitLab. Alpine tha se më 20 dhe 21 tetor një sulmues dërgoi konfigurime të përgatitura posaçërisht të continuous integration, ose CI. Projekti nuk gjeti prova se u ekzekutua code, por mungesa e provave nënkuptonte se nuk mund të përjashtonte një komprometim të suksesshëm.
CVE-2026-97229 ka një vlerësim 10.0 në Common Vulnerability Scoring System, ose CVSS, që është rezultati më i lartë në atë shkallë serioziteti. Në kushte të caktuara, një regular expression keqdashës, pra një model për kërkimin e tekstit, në një konfigurim CI mund ta bëjë GitLab të ekzekutojë code të kontrolluar nga sulmuesi. Defekti bazë ndodhet në Onigmo, regular expression engine i përfshirë në Ruby. GitLab përdor Ruby për të përpunuar shprehjet që gjenden në skedarët CI.
GitLab publikoi korrigjimin fillestar më 12 tetor, duke modifikuar Ruby të integruar me Linux packages dhe container images zyrtare të veta. Alpine i bëri upgrade serverit të vet në GitLab 19.3.4 më 13 tetor, në vend të 19.3.5, gjë që Alpine e përshkroi si gabim. Një account i regjistruar rishtazi filloi të hetonte serverin ende të cenueshëm më 20 tetor. Konfigurimet e dërguara shkaktuan crash të GitLab worker processes tetë herë gjatë dy ditëve. Përpjekja kryesore më 21 tetor prodhoi gjithashtu gabime 502 dhe ndërpreu CI jobs. Alpine tha se katër crash treguan se exploit kishte arritur në një fazë të ndërmjetme përpara se të dështonte. Account shkarkoi gjithashtu GitLab container image të Alpine, çka sugjeronte se sulmuesi po e përshtaste përpjekjen për atë build specifik.
Alpine e bllokoi account më 23 tetor. Përpjekjet për t’u rikthyer më 25 dhe 26 tetor dështuan. Megjithatë, më 26 tetor projekti zbuloi se upgrade në GitLab 19.3.6, i kryer më 22 tetor, nuk e kishte mbyllur cenueshmërinë. alpinelinux/gitlab image instalonte veçmas versionin standard të Ruby, ndaj nuk përmbante Ruby me patch që shpërndahej në packages dhe images të vetë GitLab. Alpine e kufizoi shërbimin vetëm për zhvilluesit dhe build servers më 27 tetor dhe më pas e rindërtoi nga e para. Rindërtimi përfundoi më 28 tetor me Ruby 3.3.13 ose version më të ri, zëvendësoi secret keys të GitLab dhe vendosi reset të detyrueshëm të fjalëkalimeve. Alpine po testonte shërbimin e rindërtuar përpara se ta rihapte për publikun.
Alpine nuk gjeti skedarë, procese, hooks ose kredenciale të papritura dhe testet e kohës nuk treguan vonesat që priteshin nga provat e sulmuesit. Gjithashtu, nuk gjeti ndonjë request të dukshëm në web ose application programming interface, ose API, që t’i dërgonte sulmuesit informacion privat. Këto kontrolle nuk ishin përfundimtare. Alpine tha se një përpjekje e suksesshme mund të mos prodhonte as crash dhe as gjurmë në web log. Disa logs të background jobs dhe filesystem i container të mëparshëm nuk ishin të disponueshëm, ndërsa as Alpine dhe as hosting provider i tij nuk kishin regjistruar outbound connections. Për këtë arsye, projekti e trajtoi serverin si të komprometuar, në vend që të supozonte se mungesa e provave nënkuptonte se sulmi kishte dështuar.
Nëse ndodhi code execution, materialet e ekspozuara mund të kenë përfshirë emrat e përdoruesve, adresat e email-it dhe IP, hash të fjalëkalimeve, sekretet e autentikimit me dy faktorë, CI/CD variables, runner tokens, kredencialet e integrations dhe webhooks, repositories private, issues konfidenciale dhe merge requests. Personal access tokens ruheshin si hash. Alpine nuk ka thënë nëse zëvendësoi runner tokens, CI/CD variables, access tokens ose kredencialet e integrations, përtej reset të fjalëkalimeve dhe ndryshimit të secret keys të GitLab.
Serveri i prekur hoston aports, repository që përdoret për të ndërtuar Alpine packages. Alpine verifikoi çdo ndryshim në aports të shtuar nga 20 deri më 22 tetor kundrejt kopjes së repository të një zhvilluesi dhe të 45 build servers, të dhëna që, sipas projektit, sulmuesi nuk mund t’i aksesonte. Projekti konfirmoi se çdo ndryshim kishte mbërritur përmes një push të regjistruar nga një zhvillues i njohur dhe se packages e prodhuara nga 20 deri më 24 tetor përputheshin me historikun e aports të publikuar në git.alpinelinux.org. Kontrollet po zgjeroheshin deri më 27 tetor. Releases e shqyrtuara përfshinin skedarët minirootfs që përdoren për Alpine Docker images zyrtare. Signing keys për packages dhe releases nuk ishin ruajtur kurrë në serverin GitLab.
Administratorët duhet të bëjnë dallimin midis packages zyrtare të GitLab dhe instalimeve që ofrojnë vetë Ruby. Linux package dhe container images zyrtare të GitLab duhet të kalojnë në release më të ri për branch përkatëse. Releases e 21 tetorit ishin 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 dhe 18.11.13. GitLab rendit 19.4.2, 19.3.5 dhe 19.2.8 si versione që korrigjojnë CVE-2026-97229 në branches përkatëse të prekura. Advisory fillimisht e identifikonte 19.3.4 si të korrigjuar, por tani e shënon si të prekur, ndaj instalimet që përdorin ende 19.3.4 duhet të kalojnë në 19.3.6. Releases më të reja trajtojnë gjithashtu CVE-2026-110264, një cenueshmëri tjetër të veçantë në regular expression.
Instalimet e kompiluara vetë dhe custom images që instalojnë Ruby në mënyrë të pavarur duhet t’i përditësojnë të dy komponentët. Releases e korrigjuara të Ruby janë 3.3.13, 3.4.12 dhe 4.0.9 ose versione më të reja. Ruby 3.2 arriti end of life në prill dhe nuk do ta marrë këtë korrigjim, megjithëse udhëzuesi i GitLab për instalimet e kompiluara vetë vazhdonte ta rendiste si minimumin më 29 tetor. Postimet e GitLab për patch të 12 dhe 21 tetorit nuk u thanë administratorëve të instalimeve të kompiluara vetë që të përditësonin Ruby. Përdoruesit e Alpine duhet ta shkarkojnë përsëri alpinelinux/gitlab:19.3.6, sepse image e publikuar më 27 tetor përmban Ruby 3.3.13, ndërsa kopjet më të hershme të atij tag dhe çdo tag më i vjetër mbeten të cenueshme. Ruby packages të Alpine përmbajnë 3.4.12 në Alpine 3.22, 3.23, 3.24 dhe edge, si dhe 3.3.13 në Alpine 3.21; ekzekutimi i apk upgrade i instalon ato.
Rapid7 krijoi një exploit funksional në laborator dhe publikoi proof-of-concept code më 13 tetor. Ai ekzekutoi komanda si përdoruesi git i GitLab në një GitLab 19.4.1 image zyrtare pa patch, por dështoi kundër 19.4.2. Rruga e tij kërkon që një skedar keqdashës .gitlab-ci.yml dhe një path që përmban karaktere UTF-8 të bëhen commit në një projekt publik përpara request përfundimtar dhe të paautentikuar të CI lint. Kjo pengesë mund të mos vlejë aty ku çdokush mund të regjistrohet dhe të krijojë projekte. Rapid7 nuk e di se si raporti origjinal, që ende është privat, e shmang hapin e shkrimit dhe Alpine nuk ka shpjeguar se si sulmuesi i dërgoi konfigurimet. CVE-2026-97229 nuk ishte në CISA’s Known Exploited Vulnerabilities catalog deri në përditësimin e tij të 28 tetorit.
GitLab ka publikuar gjashtë Sigma detection rules për self-managed servers, katër prej të cilave shënohen si eksperimentale. Ato kërkojnë paralajmërime të dyshimta CI, GraphQL ciLint requests, paths jashtëzakonisht të gjata me karaktere non-ASCII dhe Ruby crash reports që përfshijnë Onigmo. Administratorët duhet të kontrollojnë gjithashtu skedarët e përkohshëm, Puma ose Sidekiq child processes, outbound connections, scheduled tasks të ndryshuara dhe kredenciale SSH të modifikuara. Provat për code execution kërkojnë që host të trajtohet si i komprometuar dhe të zëvendësohen GitLab secrets, CI/CD variables, runner tokens dhe access tokens. Kufizimet e përkohshme për anonymous access, shkrimin në projekte publike ose CI lint route mbulojnë vetëm rrugën e demonstruar nga Rapid7 dhe nuk e korrigjojnë Ruby.