Güvenlik araştırmacıları derinlikönceyayınlandıçalışan yararlanma koduGitLab'ın altı hafta önce, 10 Haziran'da yamaladığı bir GitLab kusuru nedeniyle 24 Temmuz'da. Komutları şu şekilde çalıştırır:gitkendi kendini yöneten herhangi bir konuda18.11.3Güncellemeyi almayan sunucu.
Bir projeye gönderebilen kimliği doğrulanmış herhangi bir kullanıcı onu çalıştırabilir. Saldırgan hazırlanmış bir Jupyter not defterini işler ve bir yığın işaretçisini sızdıran taahhüt farkını açar. Bunlardan yeteri kadar ve otomatik bir araştırma, kütüphanelerin hafızadaki yerini tespit edebilir. Daha sonra iki dizüstü bilgisayar daha yükü ateşler. Yönetici hakları yok, CI veya koşucu erişimi yok, mağdur etkileşimi yok, başka birinin projesine erişim yok.
GitLab düzeltmeyi bir güvenlik düzeltmesi olarak sunmadı. The Hacker News tarafından yapılan bir inceleme Oj'u buldu3.17.3hata düzeltmeleri altında listelenen tümsekler10 Haziran yama sürümü, güvenlik düzeltme tablosunda değil. CVE yok, CVSS puanı yok ve dizüstü bilgisayar fark zincirinden bahsedilmiyor. Güvenlik masasına karşı bu tahliyeyi tetikleyen operatörlerin bunu acil olarak değerlendirmeleri için hiçbir neden yoktu.
Büyük ölçüde yerel C'de uygulanan bir Ruby JSON ayrıştırıcısı olan Oj'deki iki bellek bozulması hatası zincirin çalışmasını sağlıyor.derinlikönceSisteminin onları bağımsız olarak işaretlediğini ve araştırmacıların onları elle zincirlediğini söylüyor.
GitLab'ın not defteri oluşturucusu, ağaç içi bir mücevherdiripynbdiff, depo kontrolünden geçer.ipynbJSON'aOj::Parser.usual.parseUzun ömürlü bir Puma çalışanının içinde saldırganın kontrol ettiği baytlar, uygulama süreci içinde Oj'un manuel olarak yönetilen C belleğine ulaşır.
Bir hata, ayrıştırıcıyı kontrol edene kadar 1.024 baytlık sabit bir yuvalama yığınının ötesine yazar.startgeri çağırmak. Diğeri, imzalı 16 bitlik bir alanda 65.565 baytlık bir nesne anahtarını 29'a kısaltır ve GitLab'ın farka dönüştürdüğü canlı bir yığın işaretçisini döndürür. Sızıntı libc'yi bulur ve yazma, geri aramayı şu adrese işaret eder:system().
| Bileşen | Etkilenen | İlk sabit |
|---|---|---|
| GitLab CE/EE | 15.2.0 ila 18.10.7 | 18.10.8 |
| GitLab CE/EE | 18.11.0 ila 18.11.4 | 18.11.5 |
| GitLab CE/EE | 19.0.0 ila 19.0.1 | 19.0.2 |
| Ah mücevher | 3.13.0 ila 3.17.1 | 3.17.3 |
CE ve EE, Free'den Ultimate'a kadar tüm katmanlar etkilenir. Ruby'nin kendisi değil. Oj3.17.2aynı incelemedeki diğer düzeltmeleri de taşıdı ancak bu ikisini taşımadı.
Yükselt18.10.8, 18.11.5, or 19.0.2. Ne GitLab ne de deepfirst bunu yapamayanlar için geçici bir çözüm sunmuyor. deepfirst araştırmacısı Yuhang Wu, The Hacker News'e, savunmasız dizüstü bilgisayar farkı yolunu tamamen devre dışı bırakan belgelenmiş bir GitLab seçeneğinin farkında olmadığını ve deepfirst'in önerebileceği yalnızca yapılandırmaya yönelik bir geçici çözümü doğrulamadığını söyledi. Güvenilmeyen kullanıcıları dizüstü bilgisayar farkı oluşturma işleminden uzak tutmanın prensipte bu giriş noktasını ortadan kaldıracağını, ancak yükseltme yapamayan operatörlerin GitLab'dan kendi dağıtımlarına özel rehberlik istemeleri gerektiğini söyledi.
Tuzak, Dümen ve Operatör'dür: içindeki GitLab sürümünü kontrol edin.Web hizmeti resmiGrafik veya Operatör sürümünü değil, Puma'yı çalıştırıyorum. 15.2'den 18.9'a kadar olan herhangi bir şey desteklenmiyor çünkü bu satırlar GitLab'ın dışında duruyorgüvenlikle korunan yama trenleridolayısıyla bu yüklemelerin desteklenen bir sürüme taşınması gerekir.
Komutlar şu şekilde çalışır:gitPuma'nın arkasındaki hesap. Bunun ne kadar ileri gidebileceği, kurulumun nasıl izole edildiğine bağlıdır. Erişimde: kaynak kodu, Rails sırları, hizmet kimlik bilgileri, CI/CD verileri ve uygulamanın konuşabileceği dahili hizmetler.
Genel istismar GitLab için geliştirildi18.11.3x86-64'te. Gadget ofsetleri, kayıt durumu ve jemalloc davranışının tümü bu görüntüden geldi ve kurtarılan kitaplık tabanı yalnızca Puma ana bilgisayarı yeniden başlatılana kadar tutulur, dolayısıyla bu rastgele bir hedefe karşı düşme değildir.
Oj hataları geneldir ve istismar, bir görselin önerdiğinden daha da öteye uzanır. Wu, sömürü yolunun spesifik olmadığını söyledi18.11.3ve aynı mimari üzerindeki başka bir GitLab yapısını yeniden hedeflemenin genellikle yalnızca küçük ayarlamalar, çoğunlukla güncellenmiş gadget veya simge uzaklıkları gerektireceği. Bu dengelemeler çoğu zaman yakındaki sürümlerde hiç değişmez çünkü gadget'lar GitLab'ın kendi kodu yerine Ruby'den ve sistem kitaplıklarından gelir. Mimarlık gerçek engeldir. ARM64'e geçiş, farklı çağrı kuralları, gadget'lar, kayıt kullanımı ve muhtemelen farklı yığın davranışı anlamına gelir ve Ruby yapısı, libc, ayırıcı ve derleme ortamı GitLab sürümünden daha önemli olur. deepfirst yeni iki çalışanlı bir kurulumda hafıza araması için beş ila on dakika ölçüldü ve daha uzun süren kurulumlarda bir ila iki saat yansıtıldı. Onunyazısıtam zinciri içeriyor.
deepfirst Oj hatalarını 21 Mayıs'ta bildirdi, bakımcıdüzeltmeleri 27 Mayıs'ta birleştirdive Oj3.17.34 Haziran'da gönderildi. GitLab zinciri 5 Haziran'da GitLab'a gitti, 8 Haziran'da onaylandı ve 10 Haziran'da yamalandı. Wu, deepfirst'in her iki sorun için de CVE tanımlayıcıları talep etmediğini söyledi. GitLab zinciri, deepfirst'e ayrı bir tanımlayıcı atamayan GitLab'ın HackerOne programından geçti ve iki Oj hatası, hiçbir CVE talep edilmeden ve hiçbiri deepfirst'in bilgisine atanmadan doğrudan bakımcıya gitti. Kendisi, yokluğun ciddiyetle ilgili herhangi bir şeyden ziyade açıklamaların nasıl koordine edildiğini yansıttığını söyledi.
deepfirst, vahşi kullanımdan haberdar olmadığını ve GitLab'ın RCE'yi bağımsız olarak yeniden ürettiğini söylüyor. Wu, bunun raporların yokluğuna ve telemetriye değil, öncelikle kendi araştırma ortamı dışında hiçbir şeyi görmemeye dayandığını söyledi. Şirketin GitLab'ın dahili verilerine veya müşteri ortamlarına erişimi olmadığını ve GitLab'ın bunlardan çıkarılacak sonuçlar için doğru kaynak olduğunu söyledi. Daha geniş Oj incelemesi, hiçbiri bu zincirde olmayan dokuz CVE tavsiyesi daha üretti.
GitLab, The Hacker News'in düzeltmenin neden bir güvenlik sorunu olarak sınıflandırılmadığına ve bir CVE'nin atanıp atanmayacağına ilişkin sorularına yanıt vermedi. Bu hikaye eğer öyleyse güncellenecektir.
26 Temmuz 2026'da düzeltildi: Daha önceki bir sürüm, istismarın taşınmasının gerçek bir iş olduğunu söylüyordu. deepfirst, aynı mimari üzerinde başka bir GitLab yapısını yeniden hedeflemenin genellikle yalnızca küçük dengeleme güncellemeleri gerektirdiğini söylüyor; önemli çalışma farklı bir mimariye taşınıyor.

