PHP2Shell cPanel Fix: CVE-2026-109618 ve CVE-2026-109619 Nasıl Kapatılır?

Merhabalar bir önceki yazımda HestiaCP tarafını anlatmıştım, bu yazıda da aynı açığın PHP2Shell cPanel sunucularda nasıl fixlenir onu anlatacağım. cPanel tarafında güncelleme yaparken benim de neredeyse atlayacağım bir nokta vardı, onu da aşağıda detaylıca anlattım.

HestiaCP kullanıyorsanız PHP2Shell HestiaCP Fix: CVE-2026-109618 ve CVE-2026-109619 yazıma göz atabilirsiniz.

PHP2Shell (CVE-2026-109618 / CVE-2026-109619) Nedir?

PHP2Shell, Ekim 2026’da ortaya çıkan ve CVE-2026-109618 ile CVE-2026-109619 numaralarını alan iki kritik PHP çekirdek açığına verilen isimdir. PHP ekibi açıkları CVSS v4.0 üzerinden 9.2 puanla değerlendirdi. Açıklar, kimlik doğrulaması gerektirmeden saldırganın sunucu üzerinde uzaktan kod çalıştırmasına (RCE) imkan tanıyabiliyor. Açıkları Wiz ve OpenAI araştırmacıları bildirdi; Wiz’in açıklamasına göre PHP 5.4’ten PHP 8’e kadar çok geniş bir sürüm aralığı etkileniyor. Sadece belirli bir yapılandırma değil, web isteğine cevap veren PHP-FPM, Apache mod_php, php-cgi, LiteSpeed gibi neredeyse tüm PHP kurulumları risk altında.

PHP ekibi açığı 21 Ekim’de 8.5.12, 8.4.27, 8.3.36 ve 8.2.35 sürümleriyle kapattı. EOL sürümler için resmi sürüm çıkmasa da güvenlik ekibi yamaları paylaştı ve CloudLinux gibi dağıtımlar bu yamaları kendi paketlerine taşıdı. Açığın aktif olarak istismar edilmeye çalışıldığı raporlandığı için güncellemeyi bekletmemenizi tavsiye ederim.

cPanel’de Dikkat Edilmesi Gereken Nokta: ea-php ve alt-php

cPanel sunucularda PHP iki farklı yerden gelebiliyor:

  • ea-php: cPanel’in EasyApache 4 ile gelen PHP sürümleri (/opt/cpanel/ea-phpXX). MultiPHP Manager’da gördükleriniz bunlar.
  • alt-php: CloudLinux kullanıyorsanız PHP Selector üzerinden gelen PHP sürümleri (/opt/alt/phpXX).

Benim sunucumda yaşadığım durum şuydu: MultiPHP Manager’da siteler ea-php80, ea-php81 olarak görünüyordu ve ea-php paketleri zaten yamalı gelmişti. Fakat sitelerin büyük çoğunluğu aslında CloudLinux PHP Selector üzerinden alt-php ile çalışıyordu ve alt-php paketleri güncellenmemişti. Yani sadece ea-php’ye bakıp “tamam güncelmiş” deseydim siteler hala açıkta kalacaktı. Bu yüzden ikisini de kontrol ediyoruz.

PHP2Shell cPanel Sunucuda Nasıl Fixlenir?

1) Sunucuda Hangi PHP Sürümleri Var?

# EasyApache (ea-php) sürümleri
ls /opt/cpanel | grep ea-php

# CloudLinux alt-php sürümleri (CloudLinux kullanıyorsanız)
ls /opt/alt | grep php

# Hangi domain hangi ea-php sürümünü kullanıyor
whmapi1 php_get_vhost_versions | grep -E "vhost:|version:" | paste - -

2) Siteler Gerçekte Hangi PHP ile Çalışıyor?

CloudLinux kullanıyorsanız bu adım çok önemli. Aşağıdaki komut her cPanel kullanıcısının PHP Selector’da seçili sürümünü gösteriyor. “native” yazanlar ea-php ile, sürüm numarası yazanlar alt-php ile çalışıyor.

for u in $(ls /var/cpanel/users); do
  echo "$u $(selectorctl --user-current --user=$u 2>/dev/null | head -1)"
done

3) Güncellemeleri Kontrol Etme

dnf check-update "ea-php*" "alt-php*"

CentOS 7 / CloudLinux 7 kullanıyorsanız dnf yerine yum yazmanız yeterli.

4) ea-php ve alt-php Paketlerini Güncelleme

dnf update -y "ea-php*"
dnf update -y "alt-php*"

alt-php güncellemesi paket sayısı fazla olduğu için biraz sürebilir, benim sunucumda 400’den fazla paket güncellendi.

5) Yamanın Geldiğini Doğrulama

Hestia’da olduğu gibi burada da sürüm numarasına değil paket notlarına bakıyoruz. Her pakette CVE numarası geçmesi gerekiyor.

for v in 74 80 81 82 83 84; do
  echo -n "ea-php$v:  "; rpm -q --changelog ea-php$v-php-common 2>/dev/null | head -5 | grep -q 109618 && echo YAMALI || echo "KONTROL ET"
  echo -n "alt-php$v: "; rpm -q --changelog alt-php$v-common 2>/dev/null | head -5 | grep -q 109618 && echo YAMALI || echo "KONTROL ET"
done

6) Web Sunucusu ve PHP-FPM’i Yeniden Başlatma

/scripts/restartsrv_httpd --graceful
/scripts/restartsrv_apache_php_fpm

LiteSpeed kullanıyorsanız LiteSpeed’i de yeniden başlatın:

/usr/local/lsws/bin/lswsctrl restart

Burada küçük bir uyarı yapayım; benim sunucumda LiteSpeed kurulu olmasına rağmen aslında kapalıydı ve siteleri Apache sunuyordu. Bu komutu çalıştırmadan önce systemctl status lsws httpd ile hangisinin çalıştığını kontrol edin. Son olarak eski PHP dosyasıyla çalışan süreç kalmadığını doğruluyoruz, çıktı 0 olmalı:

for p in $(pgrep -f php); do ls -l /proc/$p/exe 2>/dev/null; done | grep -c deleted

.htaccess Dosyalarım Değişti, Normal mi?

Güncellemeden sonra tüm sitelerin .htaccess dosyalarının değişme tarihinin aynı dakikaya döndüğünü görürseniz paniklemeyin. PHP paketleri güncellenince cPanel PHP yapılandırmasını yeniden oluşturuyor ve .htaccess içindeki “cPanel-generated handler” bloklarını yeniden yazıyor. Ben de ilk gördüğümde bir an tedirgin olmuştum 🙂 Yine de içinde tanımadığınız bir yönlendirme ya da auto_prepend_file gibi bir satır var mı bakmakta fayda var.

Ekstra: Sitelerinizi de Kontrol Edin

Imunify360 kullanıyorsanız tespit edilen zararlı dosyaları şu komutla listeleyebilirsiniz:

imunify360-agent malware malicious list

Ayrıca son günlerde değişen PHP dosyalarına ve uploads klasörüne bakmanızı öneririm:

find /home/*/public_html -type f -name "*.php" -newermt "2026-10-15" | grep -v /cache/
find /home/*/public_html -path "*/uploads/*" -name "*.php" ! -name index.php

Bu yazımızda PHP2Shell cPanel sunucularda nasıl fixlenir, özellikle CloudLinux kullananların atlamaması gereken alt-php kısmıyla beraber gördük. Umarım işinize yaramıştır 🙂

Kaynaklar

Yorum yapın