Alpine Linux, 28 Ekim'de GitLab'ın düzeltmeyi yayınlamasından bir hafta sonra Alpine Linux projesinin kendi GitLab sunucusunda kritik bir açık üzerinden istismar girişimi yaşandığını açıkladı.
Açık CVE-2026-97229 olarak tanımlandı ve CVSS 10.0 puanına sahip. CI yapılandırmasında hazırlanmış bir düzenli ifadeyle GitLab sunucusunda kod çalıştırılmasına izin verebiliyor. Alpine saldırının başarılı olduğuna dair kanıt bulamadığını ancak bunu dışlayamadığını belirtti; bu nedenle sunucuyu sıfırdan yeniden kurdu ve her hesabın şifresini sıfırladı.
GitLab'ın düzeltmesi, GitLab'ın kendi paketleri ve konteyner imgelerinde dağıttığı Ruby'ye yönelik yamalar içeriyor. Alpine'in GitLab imajı standart Ruby kullandığı için sunucu 22 Ekim'de GitLab 19.3.6'ya yükseltildiğinde açık kapanmadı.
Kendi Ruby'sini kullanan herkes için GitLab'ı yükseltmek yeterli değil, Alpine uyarısında bulundu. Bu sunucuların da Ruby 3.3.13, 3.4.12, 4.0.9 veya daha yeni sürüme ihtiyacı var ve Alpine'in alpinelinux/gitlab imajını kullananlar 19.3.6'yı yeniden çekmeli.
gitlab.alpinelinux.org sunucusu, Alpine paketlerinin üretildiği aports deposuna ev sahipliği yapıyor. Alpine'e göre 20-24 Ekim arasında üretilen paketler ve 21 Ekim sürümleri, GitLab dışındaki kayıtlardan doğrulanmış aports değişikliklerinden geldi.
Bu sürümler, resmi Alpine Docker imgelerinin üretildiği minirootfs dosyalarını içeriyor. Alpine kontrolleri, sunucuyu kapattığı 27 Ekim'e kadar uzatıyor. Paket ve sürümleri imzalayan anahtarlar hiçbir zaman GitLab sunucusunda bulunmadı.
Saldırının Seyri
13 Ekim'de Alpine sunucuyu GitLab 19.3.5 yerine 19.3.4'e yükseltti; bunu bir hata olarak nitelendirdi. Sunucu 12 Ekim düzeltmesi olmadan bu sürümde kaldığı sırada 20 Ekim'de yeni kayıtlı bir hesap sunucuyu taramaya başladı.
Hesap 20 ve 21 Ekim'de hazırlanmış CI yapılandırmaları gönderdi. Bu yapılandırmalar GitLab işçi süreçlerini 8 kez çökertti; 21 Ekim'deki ana saldırı 502 hatalarına ve CI işlerinin başarısız olmasına da yol açtı.
Alpine'e göre bu çökmelerin 4'ünde saldırgan istismarı kısmen gerçekleştirdi ve bir sonraki adımda başarısız oldu. Saldırgan ayrıca Alpine'in GitLab konteyner imajını indirdi; Alpine bu durumun saldırganın istismarı kendi derlemelerine göre ayarladığını gösterdiğini söyledi.
Alpine hesabı 23 Ekim'de engelledi. Saldırgan 25 ve 26 Ekim'de geri dönüp yeniden giriş denedi ancak bu girişimler başarısız oldu.
26 Ekim'de Alpine, sunucunun 22 Ekim'de 19.3.6'ya yükseltildikten sonra bile savunmasız kaldığını tespit etti. Ertesi gün GitLab'ı yalnızca geliştiricileri ve derleme sunucuları dışındaki herkes için kapattı ve yeniden kurmaya başladı.
Yeniden kurulum 28 Ekim'de tamamlandı. Alpine GitLab'ın gizli anahtarlarını da değiştirdi ve yeniden kurulan sunucu Ruby 3.3.13 veya daha yeni sürüm çalıştırıyor; bu sürüm düzeltmeyi içeriyor. Alpine sunucuyu herkese açmadan önce test ediyor.
Alpine Ne Kadarını Dışlayabiliyor
Alpine saldırganın kodunun sunucuda çalıştığına dair bir işaret bulamadı. Zamanlama testleri gecikme göstermedi; beklenmeyen dosya, anahtar, kanca ya da süreç yoktu ve Alpine'in görebildiği kadarıyla özel veri saldırgana web ya da API isteğiyle geri gönderilmedi.
Yine de kesin olamıyor. Alpine'e göre başarılı bir istismar çökme bırakmaz ve web günlüklerinde iz bırakmaz. Saldırı gününe ait bazı günlükler kayıp; arka plan işi günlükleri ve eski konteynerin dosya sistemi yok ve ne Alpine ne de barındırma sağlayıcısı dışa giden ağ bağlantılarını kaydetti.
Kanıtın artık mevcut olmaması nedeniyle Alpine sunucuyu tehlikeye atılmış kabul etti ve başarılı bir istismarın bırakabileceği bir tutunma noktasını ortadan kaldırmak için yeniden kurdu.
İstismar başarılı olsaydı şunlar açığa çıkabilirdi:
E-posta adresleri, adlar ve tüm kullanıcıların IP adresleri
2FA sırları, CI/CD değişkenleri ve çalıştırıcı belirteçleri
Webhook, entegrasyon ve itme aynası kimlik bilgileri
Karma olarak saklanan kişisel erişim belirteçleri
Özel depolar ve gizli sorunlar ile birleştirme istekleri
Şifre sıfırlama ve yeni gizli anahtarların ötesinde Alpine, sunucuda saklanan çalıştırıcı belirteçlerinin, CI/CD değişkenlerinin, erişim belirteçlerinin ya da entegrasyon kimlik bilgilerinin değiştirilip değiştirilmediğini açıklamadı.
Paketlerini kontrol etmek için Alpine, 20-22 Ekim arasında eklenen her aports değişikliğinin bilinen bir geliştirici tarafından kaydedilmiş bir itmeyle geldiğini doğruladı. Bunu saldırganın erişemeyeceğini söylediği kayıtlarla karşılaştırdı: bir geliştiricinin deposunun kopyası ve tüm 45 derleme sunucusu. 20-24 Ekim arasında üretilen her paket, git.alpinelinux.org'da yayınlandığı şekliyle aports değişikliklerinden geldi.
GitLab Yükseltmesi Neden Yetmedi
GitLab, CI yapılandırmalarındaki düzenli ifadeleri Ruby ile derliyor ve CVE-2026-97229'un arkasındaki hata, Ruby'ye gömülü düzenli ifade motoru Onigmo'da bulunuyor.
GitLab'ın 12 Ekim sürümü, Linux paketi ve konteyner imgelerindeki Ruby'yi yamayarak sorunu çözdü. Ruby'nin kendi düzeltilmiş sürümleri 22 ve 23 Ekim'de çıktı.
GitLab yükseltmesi sunucunun kendi Ruby'sini değiştirmez; bu nedenle standart Ruby üzerinde çalışan bir GitLab kurulumu, Ruby kendisi düzeltilmiş bir sürüme güncellenene kadar açık kalır; Alpine bunu yaşadı.
GitLab'ın düzeltilmiş Linux paketleri ve resmi konteyner imgeleri yama yapılmış Ruby'yi taşır. Kaynaktan derlenmiş bir kurulum ya da Alpine'in yaptığı gibi Ruby'yi ayrı yükleyen bir konteyner imajı bunu almaz.
29 Ekim itibarıyla GitLab'ın 12 ve 21 Ekim tarihli yama sürüm duyurularının hiçbiri kaynaktan derlenmiş kurulum yöneticilerine Ruby'yi güncellemelerini söylemiyor. GitLab'ın kaynaktan derlenmiş kurulum kılavuzu minimum sürüm olarak Ruby 3.2'yi listeliyor ve Ruby 3.2 Nisan'da yaşam döngüsünü tamamladı; artık düzeltme almıyor.
Hangi GitLab Sunucuları Tehlike Altında
GitLab'ın danışmanlığı, "belirli koşullarda" açığın kimliği doğrulanmamış bir kullanıcının sunucuda kod çalıştırmasına izin verebileceğini söylüyor. GitLab.com ve GitLab Dedicated zaten yama yapıldı.
Rapid7 laboratuvarda çalışan bir istismar geliştirdi ve 13 Ekim'de kanıt kavramı kodunu yayınladı. İstismar, yama yapılmamış resmi GitLab 19.4.1 imajında komutları GitLab'ın git kullanıcısı olarak çalıştırdı; aynı girdi yama yapılmış 19.4.2 imajında çalışmadı.
Bu istismar önce yazma erişimi gerektiriyor: saldırganın kötü amaçlı bir .gitlab-ci.yml dosyası ve UTF-8 karakterleri içeren bir dosya yolu, bir genel projenin dalına göndermesi gerekiyor. Bu gereklilik, yeni kullanıcıların kendilerini kaydetmesine ve proje oluşturmasına izin veren sunucularda geçerli değil.
Rapid7'nin test ettiği yolunda "yalnızca son CI lint isteği kimliği doğrulanmamış." GitLab'ın kendi algılama notları da saldırganın önce olağan depo API'leri aracılığıyla bu dosya yolunu oluşturması gerektiğini söylüyor. Rapid7, GitLab'a yapılan orijinal bildirimde yer alan ve hâlâ gizli olan saldırının yazma adımını nasıl atladığını henüz bilmiyor.
Alpine, saldırganın CI yapılandırmalarının GitLab'a nasıl ulaştığını ya da sunucusunda yeni hesapların genel proje oluşturup oluşturabildiğini açıklamadı.
CVE-2026-97229, 28 Ekim güncellemesi itibarıyla CISA'nın Bilinen İstismar Edilen Kırılganlıklar kataloğunda yer almıyordu.
GitLab Yöneticilerinin Yapması Gerekenler
GitLab'ın 21 Ekim sürümleri her daldaki en yeni sürümler ve ayrıca ayrı bir regex açığı olan CVE-2026-110264'yi de düzeltiyor.
GitLab'ın danışmanlığına göre CVE-2026-97229'u düzeltir
En yeni sürüm (21 Ekim)
Etkilenen olarak listelenmedi
19.1, 19.0 ve 18.11
Etkilenen olarak listelenmedi
19.1.9, 19.0.10 ve 18.11.13
Hangi sürümün bir sunucuyu düzelttiği GitLab'ın nasıl kurulduğuna bağlı:
GitLab'ın Linux paketi veya resmi konteyner imgeleri: dalınız için en yeni sürüme yükseltin.
Kaynaktan derlenmiş kurulumlar veya kendi Ruby'sini yükleyen imgeler: GitLab'ı yükseltin ve Ruby'yi 3.3.13, 3.4.12, 4.0.9 veya daha yeniye güncelleyin. Ruby 3.2 düzeltme almıyor; bu nedenle 3.2 çalıştıran sunucular bu sürümlerden birine yükseltmeli.
GitLab'ın danışmanlığı 12 Ekim'de yayınlandığında 19.3 dalı için düzeltilmiş sürüm olarak 19.3.4'ü gösterdi. Artık 19.3.5'i gösteriyor ve 19.3.4'ü etkilenen olarak listeliyor; bu nedenle hâlâ 19.3.4'te olan sunucular 19.3.6'ya geçmeli.
Sunucu hemen yükseltilmiyorsa Rapid7, genel projelere anonim erişimi kısıtlamayı, güvenilmeyen kullanıcıların genel proje oluşturmasını veya yazmasını durdurmayı ya da CI lint yolunu engellemeyi öneriyor. Bu adımlar yalnızca Rapid7'nin istismar yolunu kapsar ve savunmasız düzenli ifade derleyicisini düzeltmez, şirket belirtti.
GitLab, kendi yönetilen sunuculara yönelik istismar girişimleri için Sigma formatında altı algılama kuralı yayınladı. GitLab'ın deneysel olarak işaretlediği dört kural, CI regexp uyarılarında ve GraphQL ciLint isteklerinde düşmanca kalıpları, ASCII dışı karakterler içeren olağandışı uzun dosya yollarını ve Onigmo'ya işaret eden Ruby çökme raporlarını arıyor.
Bu kurallarla gelen rehber, başarılı bir istismarın çökme bırakmayabileceği konusunda uyarıyor ve şu ek adımları veriyor:
/tmp altında git kullanıcısına ait dosyaları, Puma veya Sidekiq'in beklenmeyen alt süreçlerini, dışa giden bağlantıları ve git kullanıcısı için değiştirilmiş crontab veya SSH anahtarlarını arayın.
Kod yürütme belirtileri varsa sunucuyu tehlikeye atılmış kabul edin ve gitlab-secrets.json'daki tüm sırları, tüm CI/CD değişkenlerini, tüm çalıştırıcı belirteçlerini ve tüm erişim belirteçlerini döndürün.
Sunucuda kimlerin hesap ve kişisel erişim belirteci oluşturabileceğini sınırlayın.
Alpine Kullanıcılarının Yapması Gerekenler
Alpine'e göre gitlab.alpinelinux.org yeniden açıldığında hesap sahipleri oturum açma sayfasındaki "Şifrenizi mi unuttunuz?" seçeneğiyle yeni bir şifre belirlemek zorunda kalacak. Alpine ayrıca GitLab'ına diğer sitelerden sızan şifrelerle yapılan otomatik giriş denemeleri gördüğünü belirtti; gitlab.alpinelinux.org şifresini başka yerde kullanan herkes şifresini orada değiştirmeli.
alpinelinux/gitlab imajını kullananlar alpinelinux/gitlab:19.3.6'yı yeniden çekmeli. 27 Ekim'de yayınlanan imaj Ruby 3.3.13 içeriyor; bundan önce çekilen herhangi bir 19.3.6 imajı ve her eski etiket savunmasız.
Alpine'in kendi Ruby paketleri düzeltmeyi zaten içeriyor: Alpine 3.22, 3.23, 3.24 ve edge'de Ruby 3.4.12, Alpine 3.21'de Ruby 3.3.13. apk upgrade bunu yükler.
Ruby bakımcıları, hatanın yalnızca saldırganın kontrol ettiği metinden düzenli ifade derleyen programlar için önemli olduğunu ve Ruby'nin Regexp.timeout ayarının buna karşı korumadığını söylüyor.