Gorsel Kaynagi: The Hacker News
Alpine Linux, 28 Ekim’de, bir saldırganın GitLab’ın bir düzeltme yayınlamasından bir hafta sonra, kendi GitLab sunucusunu hedef alan kritik bir GitLab açığını kullanmaya çalıştığını açıkladı.
CVE-2026-97229 (CVSS puanı: 10.0) kod adlı açık, bir saldırganın CI yapılandırmasında kullanılan sahte bir düzenli ifade aracılığıyla bir GitLab sunucusunda kod çalıştırmasına olanak tanıyabilir. Alpine, saldırganın saldırının başarılı olduğuna dair bir kanıt bulamadığını ancak bunu tamamen dışlayamadığını belirterek sunucuyu sıfırdan yeniden kurdu ve tüm hesapların şifrelerini sıfırladı.

GitLab’ın düzeltmesi, GitLab’ın kendi paketlerinde ve konteyner görüntülerinde sunduğu Ruby’ye yönelik bir dizi yamadan oluşuyor. Alpine’ın GitLab görüntüsü standart Ruby kullandığı için, 22 Ekim’de sunucunun GitLab 19.3.6’ya yükseltilmesi açığı gidermedi.
Kendi Ruby’sinde, kaynaktan derlenmiş veya kendi konteyner görüntüsünde GitLab çalıştıran herkes için Alpine, “GitLab’ı yükseltmek yeterli değil” dedi. Bu sunucuların da Ruby 3.3.13, 3.4.12, 4.0.9 veya daha yeni bir sürümü gerektirdiğini; Alpine’ın alpinelinux/gitlab görüntüsünü kullananların ise 19.3.6’yı tekrar çekmesi gerektiğini belirtti.
gitlab.alpinelinux.org sunucusu, Alpine’ın paketlerinin derlendiği aports adlı depoyu barındırıyor. Alpine’a göre, 20 ile 24 Ekim arasında derlenen paketler ve 21 Ekim sürümleri, GitLab dışındaki kayıtlarla doğrulanmış aports değişikliklerinden geldi.
Bu sürümler, resmi Alpine Docker görüntülerinin derlendiği minirootfs dosyalarını içeriyor. Alpine, konteynerı kapattığı 27 Ekim’e kadar kontrolleri genişletiyor. Paketlerini ve sürümlerini imzalayan anahtarlar asla GitLab sunucusunda bulunmadı.
Saldırı Nasıl Gelişti
13 Ekim’de Alpine, 19.3.5 yerine sunucuyu 19.3.4’e yükseltti ve bunu bir hata olarak nitelendirdi. Sunucu, 21 Ekim’de yeni kaydedilmiş bir hesabın onu denemeye başlamadan önce bile 12 Ekim düzeltmesinden yoksun olan 19.3.4 sürümünde kalmıştı.
Hesap, 20 ve 21 Ekim’de sunucuya sahte CI yapılandırmaları gönderdi. Bu yapılandırmalar GitLab iş süreçlerini 8 kez çökertti; 21 Ekim’deki ana saldırı ayrıca 502 hatalarına neden oldu ve CI işlerinin başarısız olmasına yol açtı.
Alpine’e göre bu çökmelerin 4’ünde saldırgan exploit’in bir bölümünü tamamlamış, ancak bir sonraki adımda başarısız olmuştur. Saldırgan ayrıca Alpine’in GitLab konteyner görüntüsünü indirmiştir; Alpine bu durumun “exploit’i tam olarak bizim derlememize göre ayarladıklarını” düşündürdüğünü belirtmiştir.
Alpine hesabı 23 Ekim’de engellemiştir. Saldırgan 25 ve 26 Ekim’de geri dönmüş ve tekrar giriş yapmaya çalışmış, ancak bu giriş denemeleri başarısız olmuştur, Alpine belirtmiştir.
26 Ekim’de Alpine, 22 Ekim’deki 19.3.6 sürümüne yükseltmesinin ardından sunucunun hala zayıf noktaya sahip olduğunu tespit etmiştir. Ertesi gün GitLab’ı yalnızca geliştiricileri ve derleme sunucuları dışında herkes için kapatmış ve yeniden kurulumuna başlamıştır.
Yeniden kurulum 28 Ekim’de tamamlanmıştır. Alpine ayrıca GitLab’ın gizli anahtarlarını değiştirmiş ve yeniden kurulan sunucu, düzeltmeyi içeren Ruby 3.3.13 veya sonr sürümleri çalıştırmaktadır. Alpine, halka açılmadan önce bunu test etmektedir.
Alpine’in Dışlayabildiği ve Dışlayamadığı Şeyler
Alpine, saldırganın kodunun sunucuda çalıştığına dair bir işaret bulamamıştır. Zamanlama ölçümleri hiçbir gecikme göstermemiş; beklenmedik dosya, anahtar, kanca veya süreç olmamıştır ve Alpine’in görebildiği herhangi bir web veya API isteği üzerinden saldırgana özel veri gönderilmemiştir.
Ancak kesin olamaz. “Başarılı bir exploit, web günlüklerinde ne bir çökme ne de bir iz bırakır,” diyor Alpine. Saldırı gününe ait bazı günlükler kaybolmuştur; arka plan işi günlükleri ve eski konteynerin dosya sistemi dahil olmak üzere, ne Alpine ne de barındırma sağlayıcısı çıkış ağ bağlantılarını loglamıştır.
Kod çalıştırmasını doğrulamaya yetecek kanıtlar artık mevcut olmadığı için Alpine, sunucuyu ihlal edilmiş olarak değerlendirmiş ve başarılı bir exploit’in bırakmış olabileceği herhangi bir taban noktayı ortadan kaldırmak için sunucuyu yeniden kurmuştur.
Saldırı başarılı olmuş olsaydı, şunlar ifşa edilmiş olabilirdi:
- Tüm kullanıcıların e-posta adresleri, adları ve IP adresleri
- Parola özetleri
- 2FA sırları, CI/CD değişkenleri ve çalıştırıcı jetonları
- Webhook, entegrasyon ve push ayna kimlik bilgileri
- Dosya özetleri olarak saklanan kişisel erişim jetonları
- Gizli depolar ve gizli konular ile birleştirme istekleri
Parola sıfırlamanın ve yeni gizli anahtarların ötesinde, Alpine’ın sunucuda saklanan çalıştırıcı belirteçlerinin, CI/CD değişkenlerinin, erişim belirteçlerinin veya entegrasyon kimlik bilgilerinin değiştirildiği konusunda bir açıklama yapmadığı belirtildi.
Paketlerini denetleyen Alpine, 20 ile 22 arasında aports’a eklenen her değişikliğin bilinen bir geliştiriciye ait kayıtlı bir push ile geldiğini doğruladı. Bu denetimi, saldırganın erişemeyeceğini söylediği kayıtlara göre yaptı: bir geliştiricinin deponun bir kopyası ve 45 derleme sunucusunun tamamı. 20 ile 24 arasında derlenen her paket, git.alpinelinux.org üzerinden yayımlanan aports değişikliklerinden geldi.
GitLab Yükseltmesi Neden Sorunu Çözmedi
GitLab, CI yapılandırmalarındaki düzenli ifadeleri Ruby ile derler ve CVE-2026-97229’un arkasındaki hata, Ruby’ye gömülü düzenli ifade motoru Onigmo’dadır.
GitLab’ın 12 Ekim’deki sürümü, Ruby’yi GitLab’ın Linux paketi ve konteyner görüntülerinin içine yama uygulayarak bunu düzeltti. Ruby’nin kendi düzeltilmiş sürümleri 22 ve 23 Ekim’de yayımlandı.
Bir GitLab yükseltmesi, bir sunucunun kendi Ruby’sini değiştirmez; bu nedenle standart Ruby üzerinde kurulu bir GitLab kurulumu, Alpine’ın bulduğu gibi, Ruby’nin kendisi düzeltilmiş bir sürüme güncellenene kadar hatayı korur.
GitLab’ın düzeltilmiş Linux paketleri ve resmi konteyner görüntüleri, yamalı Ruby içerir. Kendi kendine derlenen bir kurulum ya da Alpine’ın yaptığı gibi Ruby’yi ayrı olarak kuran bir konteyner görüntüsü bunu almaz.
29 Ekim itibarıyla, GitLab’ın 12 ve 21 Ekim tarihli iki yama sürümü duyurusu da kendi kendine derlenen kurulumların yöneticilerini Ruby’yi güncellemeye yönlendirmiyor. GitLab’ın kendi kendine derlenen kurulum kılavuzu hâlâ minimum sürüm olarak Ruby 3.2’yi listeliyor ve Ruby 3.2’nin ömrü Nisan ayında sona erdiği için hiçbir düzeltme almayacak.
Hangi GitLab Sunucuları Açıkta
GitLab’ın uyarısı, “belirli koşullar altında” hatanın kimliği doğrulanmamış bir kullanıcının sunucuda kod çalıştırmasına izin vermiş olabileceğini söylüyor. GitLab.com ve GitLab Dedicated zatenzeltildi.
Rapid7, bir laboratuvarda çalışan bir sömürü geliştirdi ve 13 Ekim’de kanıt-kavramı kodunu yayımladı. Sömürü, yamalı olmayan resmi GitLab 19.4.1 görüntüsündeki GitLab’ın git kullanıcısı olarak komutları çalıştırdı, ancak aynı girdi yamalı 19.4.2 görüntüsünde çalışmadı.
Bu açığın kullanılabilmesi için önce yazma erişimi gerekir: Saldırgan, halka açık bir projenin dalına kötü amaçlı bir .gitlab-ci.yml dosyası ve UTF-8 karakterleri içeren bir dosya yolu eklemelidir. Bu gereksinim, yeni kullanıcıların kendiliğinden kayıt olup proje oluşturabildiği sunucularda geçerli değildir.
Rapid7’nin test ettiği yolda “yalnızca son CI doğrulama isteği kimlik doğrulamasızdır.” GitLab’ın kendi tespit notları da saldırganın önce bu dosya yolunu sıradan depo API’leri aracılığıyla oluşturması gerektiğini belirtiyor. Rapid7, GitLab’a yapılan orijinal rapordaki saldırının yazma adımını nasıl atladığı konusunda henüz bilgi sahibi değil; bu rapor hâlâ gizli.
Alpine, saldırırganın CI yapılandırmalarının GitLab’a nasıl ulaştığını ya da sunucusunda yeni hesapların halka açık proje oluşturabileceğini açıklamadı.
CVE-2026-97229, 28 Ekim tarihli güncelleştirmede CISA’nın Bilinen İstismar Edilen Zafiyetler kataloğunda yer almıyordu.
GitLab Yöneticileri Ne Yapmalı
GitLab’ın 21 Ekim sürümleri, aşağıda listelenen her dalın en güncelidir ve ayrıca ayrı bir regex açığı olan CVE-2026-110264’ü de düzeltir.
| Dal | CVE-2026-97229’u düzeltir (GitLab’ın uyarısına göre) | En güncel sürüm (21 Ekim) |
|---|---|---|
| 19.5 | Etkilenen olarak listelenmiyor | 19.5.1 |
| 19.4 | 19.4.2 | 19.4.3 |
| 19.3 | 19.3.5 | 19.3.6 |
| 19.2 | 19.2.8 | 19.2.9 |
| 19.1, 19.0 ve 18.11 | Etkilenen olarak listelenmiyor | 19.1.9, 19.0.10 ve 18.11.13 |
Hangi sürümün bir sunucuyu düzeltmesi, GitLab’ın nasıl kurulduğuna bağlıdır:
- GitLab’ın Linux paketi veya resmi konteyner görüntüleri: dalınız için en güncel sürüme yükseltin.
- Kendi başına derlenen kurulumlar veya kendi Ruby’sini kuran görüntüler: GitLab’ı yükseltin ve Ruby’yi 3.3.13, 3.4.12, 4.0.9 ya da daha yeni bir sürüme güncelleyin. Ruby 3.2 düzeltme almayacak, bu nedenle 3.2 çalıştıran sunucular bu sürümlerden birine yükseltmelidir.
GitLab, 12 Ekim’de yayımladığı uyarıda 19.3 dalı için düzeltilmiş sürüm olarak 19.3.4’ü adlandırmıştı. Şimdi 19.3.5’i adlandırıp 19.3.4’ü etkilenen olarak listeliyor, bu nedenle hâlâ 19.3.4 üzerinde çalışan sunucular 19.3.6’ya geçmeli.
Sunucu anında yükseltilemiyorsa, Rapid7 anonim erişimin halka açık projelere kısıtlanmasını, güvensiz kullanıcıların halka açık projeler oluşturmalarını veya düzenlemelerini durdurmalarını ya da CI lint yolunun engellenmesini öneriyor. Bu adımlar yalnızca Rapid7’nin sömürü yolunu kapsıyor ve zayıf düzenli ifade derleyicisini düzeltmiyor; şirket böyle belirtti.
GitLab, kendi kendine yönetilen sunuculara yönelik sömürü girişimleri için Sigma biçiminde altı tespit kuralı yayımladı. Bunlardan dördü, GitLab tarafından deneysel olarak işaretlenenler, CI regexp uyarılarında ve GraphQL ciLint isteklerinde düşmanca kalıplar, ASCII olmayan karakterler içeren olağandışı uzun dosya yolları ve Onigmo’ya işaret eden Ruby çökme raporlarında düşmanca kalıplar arıyor.
Bu kurallarla birlikte verilen yönerge, başarılı bir sömürünün çökme bırakamayabileceğini uyarıyor ve şu ek adımları veriyor:
- /tmp içinde git kullanıcısına ait dosyalar, Puma veya Sidekiq’in beklenmedik alt süreçleri, çıkış bağlantıları ve git kullanıcısı için değiştirilmiş crontab’lar veya SSH anahtarları ara.
- Kod çalıştırmanın izleri varsa, sunucuyu ihlal edilmiş olarak kabul et ve gitlab-secrets.json’daki tüm sırları, tüm CI/CD değişkenlerini, tüm runner anahtarlarını ve tüm erişim anahtarlarını yenile.
- Sunucuda hesap ve kişisel erişim anahtarları oluşturabilen kişileri sınırla.
Alpine Kullanıcıları Ne Yapmalı
Hesap sahipleri, gitlab.alpinelinux.org yeniden açıldığında giriş sayfasındaki “Şifrenizi mi unuttunuz?” ile yeni bir şifre belirlemeli; Alpine belirtti. GitLab’ına yönelik diğer sitelerden sızan şifrelerle otomatik giriş girişimlerini de gözlemiş durumda ve gitlab.alpinelinux.org şifresini başka yerlerde kullanan herkes orada değiştirmeli.
alpinelinux/gitlab görüntüsünü kullananlar alpinelinux/gitlab:19.3.6’yı tekrar çekmeli. 27 Ekim’de yayımlanan görüntü Ruby 3.3.13 içeriyor; o tarihten önce çekilen herhangi bir 19.3.6 görüntüsü ve her eski etiket zayıf durumdadır.
Alpine’in kendi Ruby paketleri zaten düzeltmeyi içeriyor: Alpine 3.22, 3.23, 3.24 ve edge sürümlerinde Ruby 3.4.12, Alpine 3.21’de ise Ruby 3.3.13. apk upgrade komutu bu düzeltmeyi kurar.
Ruby’ın bakımını üstlenen ekipler, hatanın yalnızca saldırganın kontrol ettiği metinden bir düzenli ifade derleyen programlar için önemli olduğunu ve Ruby’nin Regexp.timeout ayarının buna karşı koruma sağlamadığını belirtiyor.
Bu Gelişmeyi Toplulukta Değerlendirin
Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.
Bu gelişme hakkında düşüncelerinizi, donanım deneyimlerinizi veya sorularınızı Topluluk Forumumuzda paylaşın.
Foruma Katıl & Yanıtla ➔




Söz sizde.
Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.