PHP2Shell: Azure DevOps Ortamlarında Kontrol Listesi
PHP tarafında açıklanan, uzaktan kod çalıştırmaya imkan verebilen iki kritik güvenlik açığı Azure DevOps kullanan ekiplerde aynı soruyu gündeme getirdi: benim ortamım etkileniyor mu? Azure DevOps Services (bulut) da Azure DevOps Server (şirket içi) de müşteri isteklerini işlerken PHP kullanmıyor. Ama pipeline adımlarınızın kurduğu, job container’ların içinde taşınan ya da dağıttığınız uygulamalarla birlikte gelen PHP çalışma zamanlarını yamalamak tamamen size kalıyor. Kontrol listesi bu yüzden iş yükü katmanında başlıyor.
Ürün tarafı ile iş yükü tarafını ayırmak
İlk ayrım dağıtım modeliyle ilgili:
- Azure DevOps Services (bulut): Servisi Microsoft işletiyor ve güncelliyor. Pipeline adımlarınızın kurduğu PHP ile özel imajlarınıza ve uygulamalarınıza gömülü PHP ise sizde kalıyor.
- Azure DevOps Server (şirket içi): Hem Server kurulumunu hem de üzerinde çalıştığı sunucuyu siz yönetiyorsunuz. Aynı sunucuda ayrı bir PHP sitesi veya aracı barındırıyorsanız o çalışma zamanını kendi üreticisi ya da paket yöneticisi üzerinden güncellemeniz gerekir; Server ürün güncellemesi ayrıca kurulmuş bir PHP’yi yamalamaz.
PHP2Shell: iki açık, iki farklı istismar koşulu
Açıklanan iki zafiyet birbirinden farklı biçimde tetikleniyor:
- CVE-2026-109618: Bellek yetersizliği (out-of-memory) hatasının ardından oluşan geçersiz istek durumuyla ilgili.
- CVE-2026-109619: Aynı kalıcı worker içinde, sonraki bir isteğin eskimiş (stale) istek durumunu tüketmesiyle ilgili.
Sistemde yalnızca PHP CLI veya Composer bulunması, tek başına istismar edilebilir bir HTTP yolu olduğu anlamına gelmiyor. Değerlendirmeyi PHP’nin gerçekten nasıl servis edildiğine bakarak yapmak gerekiyor.
Bu açık çifti için yukarı akışta düzeltilmiş kararlı sürümler PHP 8.5.12, 8.4.27, 8.3.36 ve 8.2.35 olarak belirtiliyor. Dağıtım üreticilerinin doğruladığı backport’lar da geçerli düzeltme sayılıyor.
Azure Pipelines kullanıcıları nereye bakmalı?
Agent barındırma tercihi, Services/Server dağıtım modelinden bağımsız bir karar. Kontrol listesini agent türüne göre ayırmak bu yüzden daha pratik.
Microsoft-hosted agent’lar (yalnızca Services)
Microsoft tarafından barındırılan VM imajlarında önceden kurulu gelen PHP’nin güvenlik güncellemeleri Microsoft’un sorumluluğunda. Güncellemeler imaj bazında dağıtıldığı için düzeltmenin ne zaman kullanılabilir olacağı imajdan imaja değişebilir. PHP iş yükünüz, seçtiğiniz imaj güncellenmeden önce düzeltmeye ihtiyaç duyuyorsa iki pratik yol var:
- Bir kurulum adımında geçici olarak üreticinin düzeltilmiş PHP paketini kurmak,
- Ya da yamalanmış bir job container kullanmak.
Kendi pipeline adımlarınızın kurduğu PHP her durumda sizde kalır. PHP çalıştırmayan job’lar içinse PHP’ye özel bir değişiklik gerekmiyor.
Self-hosted agent’lar (Services ve Server)
Agent sunucusunu da üzerindeki PHP kurulumunu da siz yönetiyorsunuz. Burada sık yapılan bir varsayımı düzeltelim: Azure Pipelines agent yükseltmesi yalnızca job çalıştırıcı yazılımını günceller, o sunucuya ayrıca kurulmuş ya da job container’ların içinde yer alan PHP paketlerine dokunmaz.
Yapılması gerekenler:
- Sunucuda kurulu PHP’yi işletim sisteminin paket yöneticisiyle veya PHP üreticisinin desteklediği süreçle güncelleyin.
- Container içindeki PHP için imajı yeniden derleyin ve pipeline’ı yeni imajı kullanacak şekilde güncelleyin.
- Güncelleme sonrasında, üretici yönergelerine uygun biçimde PHP servis eden süreçleri yeniden başlatın.
Container’lar ve dağıtılan uygulamalar
Job container’ları ve dağıttığınız uygulamalar kendi çalışma zamanı bağımlılıklarını taşır. Host üzerindeki paketleri güncellemek, bir imajın ya da uygulama paketinin içine gömülmüş PHP’yi güncellemez. “Sunucuyu yamaladık” denildiği halde çalışan uygulamanın eski PHP ile hizmet vermeye devam etmesinin başlıca nedeni bu ayrım.
Task’lar ve entegrasyon arka uçları
Extension task’ları agent üzerinde çalışır, entegrasyonlar ise harici servisleri kullanabilir. İlgili çalışma zamanı bağımlılıklarını, eklentiyi yayımlayan veya servisi işleten tarafla birlikte kontrol etmek gerekiyor.
Pipeline’larınızdaki PHP’yi güncellerken izlenecek adımlar
İster Services’e ister Server’a bağlı pipeline’lar olsun, düzeltmeleri testler için başlatılan PHP web sunucularına ve bu pipeline’ların dağıttığı PHP uygulamalarına uygulamanız gerekiyor. Aşağıdaki kontroller Azure DevOps ayarlarını değil, doğrudan iş yüklerinizdeki PHP’yi hedefliyor.
1. Job’ın kullandığı çalışma zamanını tespit edin
Agent sunucusundaki veya job container’ındaki PHP’yi, pipeline adımlarınızın kurduğu PHP dahil olmak üzere inceleyin. Karşılaştırmayı yalnızca php -v çıktısına bakarak yapmayın; tam paket revizyonu ve kaynağı (provenance) üzerinden, kullandığınız dağıtımın güvenlik duyurusuyla karşılaştırın.
Örneğin Ubuntu’nun USN-8948-1 duyurusu düzeltilmiş revizyonları Ubuntu 24.04 için 8.3.6-0ubuntu0.24.04.13, Ubuntu 26.04 için 8.5.4-0ubuntu1.5 olarak listeliyor. Yani yukarı akış temel sürüm numarasına bakmak tek başına yama durumunu belirlemiyor.
2. Kontrol ettiğiniz ortamları ve imajları yamalayın
Self-hosted agent’lardaki ilgili PHP çalışma zamanlarını güncelleyin. Etkilenen PHP’yi barındıran özel job veya uygulama imajlarınızı yeniden derleyin, sonra pipeline’ınızı ya da dağıtım tanımınızı yeniden derlenmiş imajı kullanacak şekilde güncelleyin.
3. Dağıtılan uygulamayı doğrulayın
Uygulamanın PHP çalışma zamanını host ya da imaj sahibinin süreci üzerinden güncelleyin, üretici yönergelerine göre worker’ları yeniden başlatın, dağıtım sonrasında çalışan sürümü mutlaka doğrulayın.
Riskin durduğu yer
Azure DevOps’un kendisi müşteri isteklerini işlerken PHP kullanmıyor, dolayısıyla ürün tarafında PHP’ye özel bir aksiyon beklentisi oluşturmayın. Risk, pipeline’larınızın kurduğu, imajlarınızın taşıdığı ve uygulamalarınızın çalıştırdığı PHP çalışma zamanlarında. Microsoft-hosted imajlarda güncelleme imaj bazında ilerliyor, self-hosted tarafta ise agent yükseltmesi PHP paketlerini kapsamıyor; envanterinizi doğru önceliklendirmek için bu iki bilgi yeterli.
Kaynaklar ve İleri Okuma
- PHP2Shell and Azure DevOps: what to check – Azure DevOps Blog (Josef Sin)
- PHP.net duyuru arşivi
- php-src güvenlik danışmanlığı: GHSA-w8hw-w9fx-j79w
- php-src güvenlik danışmanlığı: GHSA-6wmf-4rv5-p3rp
- Microsoft-hosted agent’lar ve VM imajları
- runner-images deposundaki ilgili konu kaydı
- Azure Pipelines ile PHP iş yüklerini derleme
- Azure Pipelines agent’ları
- Job container’ları (container phases)
- Azure DevOps eklenti geliştirme genel bakışı
- Harici servislerle entegrasyon yayımlama
- Ubuntu güvenlik duyurusu USN-8948-1
- Azure DevOps Server yama kurulum sürecine dair notlar
- Azure Pipelines’ta barındırılan agent seçenekleri üzerine







Yorum gönder