Hujumchi Alpine Linux loyihasining o‘z GitLab serverida muhim GitLab zaifligini ekspluatatsiya qilishga urindi — GitLab tuzatishni e’lon qilganidan bir hafta o‘tib, Alpine Linux 28-oktabrda ma’lum qildi.

CVE-2026-97229 (CVSS balli: 10.0) zaifligi hujumchiga CI konfiguratsiyasidagi maxsus tuzilgan muntazam ifoda orqali GitLab serverida kodni bajarishga imkon beradi. Alpine hujum muvaffaqiyatli bo‘lganiga dalil topmadi, lekin buni inkor eta olmaydi, shuning uchun serverni noldan qayta qurdi va har bir hisob parolini qayta o‘rnatdi.

GitLab tuzatishi — GitLab o‘z paketlari va konteyner tasvirlarida yetkazib beradigan Ruby’ga qo‘llaniladigan yamoqlar to‘plami. Alpine’ning GitLab tasviri standart Ruby’dan foydalangan, shuning uchun 22-oktabrda serverni GitLab 19.3.6 ga yangilash zaiflikni tuzatmadi.

O‘z Ruby’sida, manbadan tuzilgan yoki o‘z konteyner tasvirida GitLab ishlatayotgan har kim uchun, “GitLab’ni yangilash yetarli emas”, deb aytdi Alpine. Bu serverlar ham Ruby 3.3.13, 3.4.12, 4.0.9 yoki undan keyingi versiyalarni talab qiladi, Alpine’ning alpinelinux/gitlab tasviri foydalanuvchilari esa 19.3.6 ni qayta yuklab olishlari kerak.

gitlab.alpinelinux.org serveri Alpine paketlari quriladigan aports omborini joylashtiradi. 20-24-oktabr oralig‘ida va 21-oktabr relizlarida qurilgan paketlar GitLab’dan tashqaridagi yozuvlarga nisbatan tekshirilgan aports o‘zgarishlaridan kelgan, Alpine ma’lum qildi.

Bu relizlar rasmiy Alpine Docker tasvirlari quriladigan minirootfs fayllarini o‘z ichiga oladi. Alpine tekshiruvlarni 27-oktabrgacha kengaytirmoqda — o‘sha kuni server yopildi. Paketlar va relizlarni imzolaydigan kalitlar hech qachon GitLab serverida bo‘lmagan.

Hujum qanday rivojlandi

13-oktabrda Alpine serverni GitLab 19.3.4 ga yangiladi — 19.3.5 o‘rniga, bu xato deb ataldi. Server hali shu versiyada, 12-oktabr tuzatishsiz, yangi ro‘yxatdan o‘tgan hisob 20-oktabrda uni tekshira boshlaganida edi.

Hisob 20 va 21-oktabrda serverga maxsus tuzilgan CI konfiguratsiyalarini yubordi. Ular GitLab ishchi jarayonlarini 8 marta ishdan chiqardi, 21-oktabrdagi asosiy hujum esa 502 xatolariga va CI ishlarining muvaffaqiyatsizligiga sabab bo‘ldi.

Bu ishdan chiqishlarning 4 tasida hujumchi ekspluatatsiyaning bir qismini o‘tib, keyingi qadamda muvaffaqiyatsiz bo‘ldi, Alpine ma’lum qildi. Hujumchi Alpine’ning GitLab konteyner tasvirini ham yuklab oldi, Alpine buni “ular ekspluatatsiyani bizning aniq tuzilishimizga moslashtirayotganini ko‘rsatadi” deb aytdi.

Alpine 23-oktabrda hisobni blokladi. Hujumchi 25 va 26-oktabrda qaytib keldi va qayta kirishga urindi, lekin bu urinishlar muvaffaqiyatsiz bo‘ldi, Alpine aytdi.

26-oktabrda Alpine 22-oktabrda 19.3.6 ga yangilanganidan keyin ham server hali zaif ekanligini aniqladi. Ertasi kuni u GitLab’ni faqat ishlab chiquvchilar va qurilish serverlari uchun ochiq qoldirib, hamma uchun yopdi va qayta qurishni boshladi.

Qayta qurish 28-oktabrda tugadi. Alpine GitLab’ning maxfiy kalitlarini ham almashtirdi, qayta qurilgan server esa tuzatish o‘rnatilgan Ruby 3.3.13 yoki undan yuqori versiyada ishlaydi. Alpine uni jamoatchilikka qayta ochishdan oldin sinovdan o‘tkazmoqda.

Alpine nimani inkor eta oladi va nimani inkor eta olmaydi

Alpine hujumchining kodi serverda bajarilganiga hech qanday belgi topmadi. Vaqt tekshiruvlari hech qanday kechikish ko‘rsatmadi; kutilmagan fayllar, kalitlar, ilgaklar yoki jarayonlar yo‘q edi; va Alpine ko‘ra oladigan hech qanday veb yoki API so‘rovi orqali hujumchiga shaxsiy ma’lumotlar qaytarilmagan.

Lekin u ishonch hosil qila olmaydi. “Muvaffaqiyatli ekspluatatsiya hech qanday ishdan chiqish va veb jurnallarida hech qanday iz qoldirmaydi”, deb aytdi Alpine. Hujum kunidagi ba’zi jurnallar, jumladan fon ish jurnallari va eski konteynerning fayl tizimi yo‘qolgan, Alpine ham, uning hosting provayderi ham chiquvchi tarmoq ulanishlarini qayd etmagan.

Kod bajarilishini tasdiqlash uchun zarur dalillar endi mavjud emasligi sababli, Alpine serverni buzilgan deb hisoblab, muvaffaqiyatli ekspluatatsiya qoldirishi mumkin bo‘lgan har qanday izni yo‘q qilish uchun uni qayta qurdi.

Agar hujum muvaffaqiyatli bo‘lgan bo‘lsa, quyidagilar ochilishi mumkin edi:

  • Barcha foydalanuvchilarning elektron pochta manzillari, ismlari va IP manzillari
  • Parol xeshlari
  • 2FA sirlari, CI/CD o‘zgaruvchilari va runner tokenlari
  • Webhook, integratsiya va push mirror ma’lumotlari
  • Shaxsiy kirish tokenlari, ular xesh sifatida saqlanadi
  • Shaxsiy omborlar, maxfiy masalalar va birlashtirish so‘rovlari

Parolni qayta o‘rnatish va yangi maxfiy kalitlardan tashqari, Alpine serverda saqlangan runner tokenlari, CI/CD o‘zgaruvchilari, kirish tokenlari yoki integratsiya ma’lumotlari almashtirilganmi yoki yo‘qligini aytmadi.

Paketlarini tekshirish uchun Alpine 20-22-oktabr oralig‘ida qo‘shilgan har bir aports o‘zgarishi ma’lum ishlab chiquvchining yozilgan push’i orqali kelganini tasdiqladi. U buni hujumchi yetib bora olmaydigan yozuvlarga nisbatan tekshirdi: ishlab chiquvchining ombor nusxasi va barcha 45 qurilish serverlari. 20-24-oktabr oralig‘ida qurilgan har bir paket gitlab.alpinelinux.org’da e’lon qilingan aports o‘zgarishlaridan kelgan.

Nima uchun GitLab yangilanishi uni tuzatmadi

GitLab CI konfiguratsiyalaridagi muntazam ifodalarni Ruby bilan kompilyatsiya qiladi, CVE-2026-97229 ortidagi xato esa Ruby ichiga o‘rnatilgan muntazam ifoda dvigateli Onigmo’dadir.

GitLab’ning 12-oktabr relizi uni GitLab’ning Linux paketi va konteyner tasvirlari ichidagi Ruby’ni yamash orqali tuzatdi. Ruby’ning o‘z tuzatilgan versiyalari 22 va 23-oktabrda chiqdi.

GitLab yangilanishi serverning o‘z Ruby’sini o‘zgartirmaydi, shuning uchun standart Ruby’da GitLab o‘rnatilishi Ruby o‘zi tuzatilgan versiyaga yangilanmaguncha zaif qoladi, Alpine aniqlaganidek.

GitLab’ning tuzatilgan Linux paketlari va rasmiy konteyner tasvirlari yamalgan Ruby’ni o‘z ichiga oladi. O‘z-o‘zidan kompilyatsiya qilingan o‘rnatish yoki Alpine’nikidek Ruby’ni alohida o‘rnatadigan konteyner tasviri buni olmaydi.

29-oktabr holatiga ko‘ra, GitLab’ning 12 va 21-oktabr yamoq relizlari postlarining hech biri o‘z-o‘zidan kompilyatsiya qilingan o‘rnatish ma’murlariga Ruby’ni yangilashni aytmaydi. GitLab’ning o‘z-o‘zidan kompilyatsiya qilish qo‘llanmasi hali ham Ruby 3.2 ni minimal versiya sifatida ko‘rsatadi, Ruby 3.2 esa aprel oyida hayot tsikli tugagan va tuzatish olmaydi.

Qaysi GitLab serverlari ochiq

GitLab’ning maslahatida aytilishicha, “ma’lum sharoitlarda” zaiflik autentifikatsiyalanmagan foydalanuvchiga serverda kodni bajarishga imkon berishi mumkin. GitLab.com va GitLab Dedicated allaqachon yamalgan.

Rapid7 laboratoriyada ishlaydigan ekspluatatsiya yaratdi va 13-oktabrda isbot-kodini e’lon qildi. Ekspluatatsiya yamalanmagan rasmiy GitLab 19.4.1 tasvirida GitLab’ning git foydalanuvchisi sifatida buyruqlarni bajardi, lekin xuddi shu kiritish yamalgan 19.4.2 tasvirida ishlamadi.

Bu ekspluatatsiya avval yozish huquqini talab qiladi: hujumchi ommaviy loyihaning bir shoxasiga zararli .gitlab-ci.yml faylini va UTF-8 belgilar bilan fayl yo‘lini commit qilishi kerak. Bu talab yangi foydalanuvchilar o‘zlarini ro‘yxatdan o‘tkazib, loyihalar yaratishi mumkin bo‘lgan serverlarda qo‘llanilmaydi.

Rapid7 sinovdan o‘tgan yo‘lda “faqat yakuniy CI lint so‘rovi autentifikatsiyalanmagan”. GitLab’ning o‘z aniqlash qaydlari ham hujumchi avval oddiy ombor API’lari orqali shu fayl yo‘lini yaratishi kerakligini aytadi. Rapid7 hali GitLab’ga berilgan asl hisobotdagi hujum yozish qadamini qanday chetlab o‘tganini bilmaydi, bu hisobot hali ham maxfiy.

Alpine hujumchining CI konfiguratsiyalari GitLab’ga qanday yetib kelganini, yoki yangi hisoblar uning serverida ommaviy loyihalar yaratishi mumkinligini aytmadi.

CVE-2026-97229 28-oktabr yangilanishi holatiga ko‘ra CISA’ning Ma’lum Ekspluatatsiya Qilingan Zaifliklar katalogida yo‘q edi.

GitLab ma’murlari nima qilishi kerak

GitLab’ning 21-oktabr relizlari quyida keltirilgan har bir shoxadagi eng yangi versiyalar bo‘lib, ular alohida regex zaifligi CVE-2026-110264 ni ham tuzatadi.

ShoxaCVE-2026-97229 ni tuzatadi, GitLab maslahatiga ko‘raEng yangi reliz (21-oktabr)
19.5Ta’sirlangan deb ro‘yxatga olinmagan19.5.1
19.419.4.219.4.3
19.319.3.519.3.6
19.219.2.819.2.9
19.1, 19.0 va 18.11Ta’sirlangan deb ro‘yxatga olinmagan19.1.9, 19.0.10 va 18.11.13

Serverni qanday o‘rnatilganiga qarab qaysi reliz tuzatadi:

  • GitLab’ning Linux paketi yoki rasmiy konteyner tasvirlari: shoxangiz uchun eng yangi relizga yangilang.
  • O‘z-o‘zidan kompilyatsiya qilingan o‘rnatishlar yoki o‘z Ruby’sini o‘rnatadigan tasvirlar: GitLab’ni yangilang va Ruby’ni 3.3.13, 3.4.12, 4.0.9 yoki undan yuqori versiyaga yangilang. Ruby 3.2 tuzatish olmaydi, shuning uchun 3.2 ishlatayotgan serverlar shu versiyalardan biriga o‘tishi kerak.

GitLab’ning maslahati 12-oktabrda e’lon qilinganida 19.3 shoxasi uchun tuzatilgan versiya sifatida 19.3.4 ni ko‘rsatgan edi. Endi u 19.3.5 ni ko‘rsatadi va 19.3.4 ni ta’sirlangan deb ro‘yxatga oladi, shuning uchun hali 19.3.4 da bo‘lgan serverlar 19.3.6 ga o‘tishi kerak.

Agar server darhol yangilana olmasa, Rapid7 ommaviy loyihalarga anonim kirishni cheklash, ishonchsiz foydalanuvchilarning ommaviy loyihalarni yaratishi yoki yozishini to‘xtatish, yoki CI lint yo‘lini bloklashni taklif qiladi. Bu qadamlar faqat Rapid7’ning ekspluatatsiya yo‘lini qamrab oladi va zaif muntazam ifoda kompilyatorini tuzatmaydi, deb aytdi kompaniya.

GitLab o‘z-o‘zini boshqaradigan serverlar uchun ekspluatatsiya urinishlarini aniqlash uchun Sigma formatida yozilgan oltita aniqlash qoidasini e’lon qildi. GitLab eksperimental deb belgilagan to‘rttasi CI regexp ogohlantirishlari va GraphQL ciLint so‘rovlari, ASCII bo‘lmagan belgilar bilan g‘ayrioddiy uzun fayl yo‘llari, va Onigmo’ga ishora qiladigan Ruby ishdan chiqish hisobotlaridagi dushman naqshlarini qidiradi.

Bu qoidalar bilan berilgan yo‘riqnoma muvaffaqiyatli ekspluatatsiya hech qanday ishdan chiqish qoldirmasligi mumkinligini ogohlantiradi va quyidagi qo‘shimcha qadamlarni beradi:

  • /tmp da git foydalanuvchisi egalik qiladigan fayllarni, Puma yoki Sidekiq’ning kutilmagan bola jarayonlarini, chiquvchi ulanishlarni, va git foydalanuvchisi uchun o‘zgartirilgan crontab yoki SSH kalitlarini qidiring.
  • Agar kod bajarilishi belgilari bo‘lsa, serverni buzilgan deb hisoblang va gitlab-secrets.json’dagi sirlarni, barcha CI/CD o‘zgaruvchilarini, barcha runner tokenlarini va barcha kirish tokenlarini aylantiring.
  • Serverda kim hisob va shaxsiy kirish tokenlarini yaratishi mumkinligini cheklang.

Alpine foydalanuvchilari nima qilishi kerak

Hisob egalari gitlab.alpinelinux.org qayta ochilganda kirish sahifasida “Parolni unutdingizmi?” orqali yangi parol o‘rnatishlari kerak bo‘ladi, Alpine aytdi. U shuningdek, boshqa saytlardan sizib chiqqan parollar yordamida Alpine GitLab’iga avtomatlashtirilgan kirish urinishlarini ko‘rgan va gitlab.alpinelinux.org parolini boshqa joyda ishlatgan har kim uni o‘sha yerda ham o‘zgartirishi kerak.

alpinelinux/gitlab tasviri foydalanuvchilari alpinelinux/gitlab:19.3.6 ni qayta yuklab olishlari kerak. 27-oktabrda e’lon qilingan tasvir Ruby 3.3.13 ni o‘z ichiga oladi, undan oldin yuklab olingan har qanday 19.3.6 tasviri va har bir eski teg zaif.

Alpine’ning o‘z Ruby paketlari allaqachon tuzatishni o‘z ichiga oladi: Alpine 3.22, 3.23, 3.24 va edge’da Ruby 3.4.12, Alpine 3.21’da esa Ruby 3.3.13. apk upgrade ishga tushirish uni o‘rnatadi.

Ruby’ning ishlab chiquvchilari xato faqat hujumchi nazorat qiladigan matndan muntazam ifoda kompilyatsiya qiladigan dasturlar uchun muhim ekanligini va Ruby’ning Regexp.timeout sozlamasi undan himoya qilmasligini aytadi.