Gitea’da kritik RCE: repo yazma yetkisi olanlar shell komutu çalıştırabiliyor

Anasayfa » Gitea’da kritik RCE: repo yazma yetkisi olanlar shell komutu çalıştırabiliyor
Gitea’da kritik RCE: repo yazma yetkisi olanlar shell komutu çalıştırabiliyor

Git tabanlı kod barındırma platformu Gitea’da, repository yazma yetkisi bulunan hesapların uzaktan kod çalıştırmaya giden bir zinciri tetikleyebildiği kritik bir açık kapatıldı. CVE-2026-60004 koduyla izlenen ve CVSS puanı 9.8 olan hata, 1.17 ve sonrası sürümlerde 1.27.1 öncesini etkiliyor; düzeltme 1.27.1 ile geldi.

Açığın çalışması için saldırganın önceden ele geçirilmiş bir hesaba sahip olması gerekmiyor. Gitea’da kayıt işlemi varsayılan olarak açık olduğu için dışarıdan gelen biri normal bir kullanıcı hesabı oluşturabiliyor, ardından yazma yetkisi olan bir depo açarak zafiyeti istismar etmeye çalışabiliyor. Gitea’nın varsayılan yapılandırmasında e-posta zorunlu tutulmuyor, manuel onay istenmiyor, yeni kullanıcılar kısıtlı olarak işaretlenmiyor ve depo oluşturma için varsayılan bir sınır uygulanmıyor.

Şirket 27 Temmuz’da Gitea Cloud örneklerinin otomatik olarak yükseltileceğini duyurdu. 28 Temmuz tarihli güvenlik notunda ise açığın sahada kullanıldığına dair bir bulgu yer almadı, ancak kamuya açık bir proof-of-concept kodu paylaşıldı.

Hatanın kaynağı POST /api/v1/repos/{owner}/{repo}/diffpatch uç noktasında bulunuyor. Gitea’nın güvenlik notuna göre bu uç nokta, gönderilen bir yamanın paylaşılan bare geçici bir klon içinde uygulanması sırasında sorun çıkarıyor. Güvensiz derlemeler, Git 2.32 ve üzeri çalışıyorsa git apply komutunu --index, --recount, --cached ve --binary seçenekleriyle çağırıyor, ardından -3 üç yönlü geri dönüş seçeneği devreye giriyor.

Bu akışta saldırgan aynı yamayı iki kez göndererek add/add çakışması oluşturuyor. Üç yönlü geri dönüş mekanizması, işlem --cached ile yürütülse bile dizine alınmış yolu kontrol ediyor. Geçici kopya bare olduğu için kök dizin doğrudan $GIT_DIR konumuna denk geliyor. Bu noktada hooks/post-index-change altında yürütülebilir bir dosya bırakmak, dosyayı Git’in hook dizinine yerleştirmek anlamına geliyor; Git indeks güncellenirken bu betiği çalıştırıyor.

Araştırmacı Shai Rod, çevrimiçi takma adıyla NightRang3r, açığı Gitea’ya bildiren isim oldu. Gitea da yayımladığı notta bildirimi NightRang3r’a atfetti. Rod daha önce RCE bulgusunu ayrı bir dosya dahil etme sorunuyla birlikte ön gösterim olarak paylaşmış, 1.27.0 çalışan bir Gitea sunucusundan /etc/passwd içeriğini alan bir PoC sunmuştu.

Yayımlanan PoC, normal bir hesapla oturum açıp başlatılmış özel bir depo oluşturuyor, ardından kötü amaçlı yamayı iki kez göndererek komut çıktısını alıyor. Bu yöntemin dışarıya geri çağrı yapmasına gerek kalmıyor. Hook, çıktıyı Git nesnelerinin içine yazıyor, sonucu içeren bir dal oluşturuyor ve saldırganın bu dalı kimlik doğrulamalı smart HTTP üzerinden çekmesine izin veriyor.

Başarılı bir istismar, Gitea’nın çalıştığı işletim sistemi hesabının yetkilerini saldırgana veriyor. Gitea’nın açıklamasına göre bu erişim, uygulama ve ortam sırlarını, bağlı depoları, veritabanı kimlik bilgilerini ve içeriklerini, OAuth kimlik bilgilerini ve erişilebilen dahili servisleri açığa çıkarabilir. İstismarın çalışması için yine de repository yazma yetkisi, Git 2.32 veya üzeri, etkin diffpatch rotası ve yazılabilir, yürütülebilir bir geçici dosya sistemi gerekiyor; açık kayıt mekanizması ise bu yazma yetkisini sıfırdan elde etmeyi mümkün kılıyor.

Yama kod tarafında küçük görünse de etkisi geniş bir zinciri kapatıyor. Gitea, geçici klon yapısını bare formdan non-bare forma çevirdi. Kod yorumunda, --index kullanan Git komutlarının çalışma ağacı üzerinde işlem yapabileceği açıkça not ediliyor. Değişiklik 26 Temmuz 2026’da ana hatta alındı ve geri port edildi. 1.27.1 sürümü 27 Temmuz’da yayımlandı, güvenlik notu ise 28 Temmuz’da geldi. Sürüm notlarında bu düzeltme SECURITY altında değil, MISC bölümünde “refactor: git patch apply” başlığıyla listelendi.

Şu ana kadar paylaşılan birincil kaynaklar, açığın 1.27.1’den önce mi sonra mı kötüye kullanıldığına dair bir bilgi vermiyor. Gitea’nın notunda yer alan teknik zincir, kod barındırma altyapılarında görünüşte sıradan bir patch işleme akışının nasıl uzaktan komut çalıştırmaya dönüşebildiğini gösteren ayrıntıları da içeriyor.

1.27.1 sürümü yayımlandıktan sonra aynı güncelleme paketi içinde, Rod’un önceden işaret ettiği ayrı bir dosya dahil etme sorunu da düzeltildi. Bu sorun, Gitea’nın Org-mode oluşturucusunda yapılan değişiklikle ilişkilendiriliyor; #+INCLUDE yolları artık sunucunun dosya sisteminden okunmak yerine düz metin olarak döndürülüyor. Gitea bu dosya dahil etme problemi için ayrı bir güvenlik duyurusu ya da CVE yayımlamadı.

CVE kaydı: CVE-2026-60004