İçeriğe geç
Blog

PHP RCE güvenlik güncellemesi: PHP-FPM yama ve doğrulama rehberi

PHP RCE güvenlik güncellemesini Debian ve PHP-FPM ortamlarında uygulama, çalışan sürümü doğrulama ve eski uygulamalarda erişimi sınırlandırma rehberi.

Tarih
Yazar Burak Hasan Erdoğan
Okuma süresi 8 dk

PHP uygulamalarında güvenlik güncellemesi, uygulamanın kullandığı çalışma ortamı dikkate alınarak planlanmalıdır. Debian ve PHP-FPM kullanılan bir sunucuda bu süreç; uygun güvenlik paketinin kurulmasını, ilgili servisin güncel paketle çalıştığının doğrulanmasını ve uygulamanın güncelleme sonrası kontrolünü kapsar. Eski PHP sürümlerine bağımlı uygulamalarda ise yama desteği ve erişim kısıtlamaları ayrıca değerlendirilmelidir.

21 Ekim 2026 tarihli PHP güvenlik duyurusunda yer alan CVE-2026-109618 ve CVE-2026-109619, web üzerinden istek işleyen PHP kurulumlarında uzaktan kod çalıştırma riskiyle ilgilidir. PHP-FPM de duyurunun kapsamındadır. Güncelleme planının yalnızca sürüm numarasına göre değil, uygulamanın kullandığı PHP servisi ve paket kaynağına göre hazırlanması bu nedenle önem taşır.

PHP-FPM ortamında hangi sürüm kontrol edilmeli?

Caddy ve PHP-FPM kullanılan bir yapılandırmada, PHP kodunun çalıştırılmasını gerektiren istekler php_fastcgi üzerinden ilgili FPM pool’una iletilir. Uygulamayı çalıştıran PHP sürümü bu pool’a bağlıdır. Aynı sunucuda CLI araçları veya başka web siteleri için farklı PHP sürümleri bulunabilir.

CLI sürümünü görmek için:

php -v

Web uygulamasının kullandığı FPM servisi ise Caddyfile içindeki php_fastcgi hedefinden belirlenir. Örneğin aşağıdaki satır, PHP 8.2 FPM için kullanılan Unix socket’e yönlendirme yapar; tam bir Caddyfile değil, ilgili directive örneğidir:

php_fastcgi unix//run/php/php8.2-fpm.sock

Bu hedefin FPM pool yapılandırmasındaki listen değeriyle eşleştiği kontrol edilir. İlgili FPM binary’sinin diskteki sürümü Debian üzerinde şu komutla görülebilir:

/usr/sbin/php-fpm8.2 -v

CLI ve FPM ayrı paketlerdir; farklı sürümlerde kalabilirler. Örneğin:

$ php -v
PHP 8.3.36 (cli) ...

$ /usr/sbin/php-fpm8.2 -v
PHP 8.2.32 (fpm-fcgi) ...

Bu örnekte CLI, PHP 8.3 için düzeltmeyi içeren sürümdedir. Web uygulamasının kullandığı FPM ise PHP 8.2.32 ile çalışacak şekilde kuruludur; güncelleme hedefi php8.2-fpm paketidir. FPM komutu diskteki binary’yi çalıştırdığı için, mevcut servisin güncel paketle yeniden başlatıldığı da aşağıdaki servis kontrolleriyle doğrulanır.

Pool yönetimi, worker ayarları ve OPcache ilişkisi hakkında ayrıntıları PHP-FPM sayfamızda okuyabilirsiniz.

PHP-FPM süreçleri birden fazla isteği işleyebildiğinden, istekler arasında taşınan durumla ilgili güvenlik sorunları bu mimari açısından da önemlidir. İlgili açıkların teknik kapsamı ve etkilenen sürümleri, yazının sonundaki PHP güvenlik duyurularında açıklanmaktadır.

Paket sürümü ve dağıtımın güvenlik desteği

PHP’nin yayımladığı sürüm numarasıyla Linux dağıtımının paket sürümü aynı biçimde ilerlemeyebilir. Dağıtımlar, güvenlik düzeltmesini mevcut sürüme uygulayarak paket revizyonunu güncelleyebilir. Backport olarak adlandırılan bu yöntemde, uygulamanın kullandığı sürüm ailesi korunurken ilgili düzeltme pakete eklenir. Bu nedenle kurulu paketin tam sürümü, dağıtımın güvenlik duyurusundaki düzeltilmiş paketle karşılaştırılmalıdır.

Debian Bookworm’un PHP paketleri 8.2, Trixie’nin paketleri ise 8.4 sürüm ailesini temel alır. Uygulamanın mevcut sürüm ailesinde desteklenen bir güvenlik paketi varsa öncelikle bu seçenek değerlendirilir. Başka bir minor sürüme geçiş gerektiğinde, güncelleme planına uygulama ve eklenti uyumluluk testleri de dahil edilir.

22 Ekim 2026 kontrolünde, her iki PHP güvenlik duyurusunda düzeltmeyi içeren ilk upstream sürümler 8.2.35, 8.3.36, 8.4.27 ve 8.5.12 olarak listelenmektedir. Bunlar ilgili sürüm aileleri için alt sınırdır; daha yeni güvenlik güncellemeleri yayımlandığında bu eski sürümlere dönülmemelidir.

Debian’ın her iki CVE kaydında da Bookworm için düzeltilmiş paket sürümü 8.2.35-1~deb12u1, Trixie için 8.4.27-1~deb13u1 olarak yer alır. Aşağıdaki Bookworm örneği resmi Debian paketlerini esas alır; üçüncü taraf depoların revizyonları kendi duyurularıyla karşılaştırılmalıdır.

Barındırma panelindeki “PHP 8.3” seçimi yalnızca sürüm ailesini belirtir; kurulu patch sürümü ve paket revizyonu ayrıca kontrol edilmelidir. WordPress veya başka bir uygulamanın güncellenmesi de PHP çalışma ortamının bakımından ayrı bir işlemdir.

Debian üzerinde güncelleme ve servis doğrulaması

Bu bölüm Debian Bookworm, systemd ve resmî php8.2-fpm paketini esas alır. Farklı bir dağıtım veya PHP sürümünde paket adı, servis adı ve düzeltilmiş paket revizyonu birlikte değiştirilmelidir.

Güncellemeden önce kurulu paketlerin tam sürümleri ve hangi depodan sağlandıkları kaydedilmelidir:

sudo apt update
dpkg-query -W -f='${Package}\t${Version}\n' php8.2-fpm php8.2-cli
apt-cache policy php8.2-fpm

apt-cache policy çıktısında kurulu sürüm ile güncelleme adayını karşılaştırın. Örneğin:

php8.2-fpm:
  Installed: 8.2.32-1~deb12u1
  Candidate: 8.2.35-1~deb12u1

Installed kurulu paketi, Candidate APT’nin kuracağı adayı gösterir. Burada aday sürüm Debian’ın düzeltmeyi içeren revizyonudur. Aday hâlâ 8.2.32-1~deb12u1 görünüyorsa bookworm-security deposu, paket pinning ayarları ve apt update hataları incelenmelidir.

Önce değişecek paketleri kurulum yapmadan görmek için:

apt-get -s install --only-upgrade php8.2-fpm php8.2-cli

FPM ve CLI ile birlikte php8.2-common, OPcache veya kurulu extension paketleri için de sürüm uyumu gerekebilir. Simülasyon çıktısı incelenerek gerekli bağımlılıklar güncelleme kapsamına alınır.

Değişiklik öncesinde uygulama ve yapılandırma yedekleri ile geri yükleme yöntemi kontrol edilmelidir. Önceki paket sürümünü kaydetmek faydalıdır; ancak geri dönüş için o paketin erişilebilir olması da gerekir. Güvenlik açığı bulunan sürüme dönülmesi zorunlu hale gelirse uygulamanın erişimi sınırlandırılarak risk ayrıca yönetilmelidir.

Paket kurulumu FPM servisini otomatik olarak yeniden başlatabilir. Bu nedenle bakım penceresi yalnız manuel restart için değil, kurulum başlamadan önce planlanmalıdır. Aday sürüm ve bağımlılıklar kontrol edildikten sonra kurulu FPM ve CLI paketleri güncellenir:

sudo apt-get install --only-upgrade php8.2-fpm php8.2-cli

Kurulumdan sonra resmi Bookworm paketi için sürüm kontrolü yapılabilir:

installed=$(dpkg-query -W -f='${Version}' php8.2-fpm) &&
  if dpkg --compare-versions "$installed" ge '8.2.35-1~deb12u1'; then
    printf 'Paket sürümü düzeltme eşiğini karşılıyor: %s\n' "$installed"
  else
    printf 'Paket sürümü düzeltme eşiğinin altında: %s\n' "$installed"
  fi

Bu karşılaştırma resmi Debian Bookworm paketleri içindir; çalışan servisin durumunu değil, kurulu paket sürümünü kontrol eder. Üçüncü taraf paketlerde aynı sürüm eşiği kullanılmamalıdır.

Paket kurulumu sırasında servis, paket yöneticisi tarafından yeniden başlatılabilir. Güncelleme sonrasında bu işlemin gerçekleşip gerçekleşmediği kontrol edilir. İlgili FPM servisi eski süreçlerle çalışmaya devam ediyorsa bakım planı kapsamında yeniden başlatılır.

Servisin yeniden başlatılması devam eden istekleri etkileyebilir. İşlem bakım penceresinde veya ilgili sunucunun trafiği load balancer üzerinden boşaltıldıktan sonra yapılmalıdır:

sudo systemctl restart php8.2-fpm
systemctl show php8.2-fpm -p ActiveState -p ActiveEnterTimestamp -p MainPID --no-pager

Servisin etkin duruma geçtiği zaman ile paket kurulum zamanı birlikte incelenir. Bu kayıt, doğru FPM servisinin güncellemeden sonra başlatıldığını kontrol etmeye yardımcı olur; kurulu paket revizyonunun güvenlik duyurusuyla karşılaştırılması ve Caddy’nin bu servise yönlendiğinin doğrulanması da aynı kontrolün parçasıdır.

Son aşamada uygulamanın giriş, dosya yükleme ve temel iş akışları kontrol edilir; Caddy ve PHP-FPM logları yeni hatalar açısından incelenir. Birden fazla FPM servisi veya sunucu kullanılan ortamlarda aynı doğrulama, uygulamaya hizmet veren her bileşen için tekrarlanır.

Konteyner kullanılan ortamlarda

Docker kullanılan ortamlarda güncelleme, PHP’nin bulunduğu base image üzerinden yürütülür. 8.3-fpm-bookworm gibi bir tag sürüm ailesini ve image varyantını belirtir. Belirli bir patch sürümüne geçmek için Dockerfile içindeki FROM satırı değiştirilebilir:

-FROM php:8.3-fpm-bookworm
+FROM php:8.3.36-fpm-bookworm

8.3.36-fpm-bookworm tag’i 22 Ekim 2026 tarihinde Docker Hub’da doğrulandı; PHP 8.3.36, her iki açık için düzeltmeyi içeren sürümdür. 8.3-fpm-bookworm hareketli bir tag olduğundan o da güncel image’a işaret edebilir; burada amaç dağıtılacak patch sürümünü açıkça seçmektir. Dockerfile’ın uygulama ve extension kurulum adımları korunur, yeni image ile uyumlulukları kontrol edilir.

Docker Compose servis adı php olan bir projede, servisin build alanı bu Dockerfile’ı kullanıyorsa:

docker compose build --pull php

Sonraki komut mevcut container’ı değiştirir ve devam eden istekleri etkileyebilir. Uygulama verilerinin container’ın yazılabilir katmanı yerine volume veya harici depolamada tutulduğu doğrulanmalı; işlem bakım planı kapsamında yapılmalıdır:

docker compose up -d --no-deps --force-recreate php
docker compose exec php php-fpm -v

Sürüm satırını PHP 8.3.36 (fpm-fcgi) ile karşılaştırın. Compose servisinizin adı php değilse komutlarda kendi servis adınızı kullanın.

Çalışan container’ın hangi image’dan oluşturulduğunu kaydetmek için:

docker inspect --format '{{.Image}}' "$(docker compose ps -q php)"

Bu komut yerel image ID’sini verir; registry manifest digest’iyle aynı alan değildir. Base image digest’i ayrıca docker buildx imagetools inspect php:8.3.36-fpm-bookworm ile incelenebilir. Mevcut container’ı yalnızca restart etmek yerine yeni image’dan oluşturmak, güncellenen PHP’nin uygulamaya aktarılmasını sağlar.

Eski PHP sürümlerine bağımlı uygulamalar

PHP 5 ve PHP 7 sürüm aileleri, PHP projesinin normal güvenlik desteği dışındadır. Bu sürümlere bağımlı uygulamalarda önce kullanılan dağıtımın veya paket sağlayıcısının ilgili açıklar için bir düzeltme sunup sunmadığı incelenmelidir. Uzatılmış destek hizmetlerinin kapsamı; dağıtıma, sürüme, pakete ve abonelik koşullarına göre değişebilir.

Debian ELTS gibi hizmetler değerlendirilirken, yalnızca hizmetin varlığına değil, kullanılan paketin her iki CVE bakımından durumuna bakılmalıdır. Bir sürüm için düzeltme bulunması, diğer eski sürümlerin de desteklendiği anlamına gelmez. Paket erişimi ve destek kapsamı güncelleme planına başlamadan önce teyit edilmelidir.

Uygun yama bulunamıyorsa uygulamanın desteklenen bir PHP sürümüne taşınması planlanır. Bu geçiş tamamlanana kadar uygulamanın internet erişimini kaldırmak, yalnızca VPN veya belirli ağlar üzerinden erişime izin vermek ya da hizmeti geçici olarak durdurmak gibi seçenekler iş ihtiyacına göre değerlendirilir.

Güncelleme tamamlanana kadar erişimin sınırlandırılması

Yamanın hemen uygulanamadığı sistemlerde, reverse proxy veya load balancer katmanında erişim kısıtlamaları kullanılabilir. Böylece riskli uygulamaya ulaşabilecek istemciler ve istekler sınırlandırılır. Bu önlemlerin kapsamı, güvenlik duyurusunda açıklanan koşullara ve uygulamanın işleyişine göre belirlenmelidir.

Dosya yükleme amacıyla yaygın kullanılan multipart/form-data isteklerini engelleyen bir kural, aynı biçimi kullanan giriş veya başvuru formlarını da etkileyebilir. Bu nedenle istek türüne dayalı kurallar uygulanmadan önce işlevsel etkileri değerlendirilmelidir. Belirli bir istek biçiminin engellenmesi, uygulamanın bütün saldırı yollarına karşı korunduğu şeklinde yorumlanmamalıdır.

Geçici kuralların kaldırılması için ilgili uygulamanın yama ve servis kontrollerinin tamamlanması beklenir. Yama desteği bulunmayan eski uygulamalarda ise erişim kısıtlamaları, sürüm geçişi veya hizmetin devreden çıkarılması planıyla birlikte ele alınır.

Güncelleme sonrasında güvenlik incelemesi

Güvenlik güncellemesi, açığın giderilmesini sağlar; güncelleme öncesinde gerçekleşmiş olabilecek bir ihlalin etkilerini ortadan kaldırmaz. Şüpheli bir durum varsa web kökündeki dosya değişiklikleri, erişim kayıtları ve uygulamanın davranışı ayrıca incelenmelidir.

Wazuh File Integrity Monitoring (FIM), yapılandırılan dizinlerdeki dosya ekleme, değiştirme ve silme olaylarının takibinde kullanılabilir. İzlemenin kapsamı ve etkinleştirildiği zaman, hangi değişikliklerin görülebileceğini belirler. Bu kayıtlar olay incelemesine katkı sağlar; daha önce gerçekleşmiş bir ihlalin tamamını ortaya çıkaracağı varsayılmamalıdır.

FIM, log analizi ve güvenlik izleme bileşenlerini Wazuh sayfamızda inceleyebilirsiniz.

PHP altyapısının bakımında kalıcı hedef, uygulamaları güvenlik desteği devam eden sürümlerde tutmak ve paket güncellemelerini servis doğrulamasıyla birlikte yürütmektir. Uygulama bağımlılıkları nedeniyle güncelleme planlamakta zorlanıyorsanız, mevcut ortamınızı değerlendirmek için görüşme planlayabilirsiniz.

Kaynaklar

güvenlikoperasyon