PHP2Shell: 5 sunucumu bir öğleden sonrada nasıl kontrol ettim
PHP2Shell açığı (CVE-2026-109618 ve 109619) ne, kimleri etkiliyor ve Ubuntu sunucularda yamanın gerçekten yüklendiği nasıl anlaşılır? Adım adım kontrol listem.
. Okuma süresi 3 dk.
Yazılım 21 Ekim 2026’da PHP dünyası alışık olmadığı bir gün yaşadı. PHP2Shell adı verilen iki kritik açık önce sızdı, ardından acil yamayla kapatıldı. Ertesi gün Hetzner’deki beş Ubuntu sunucumun hepsini tek tek kontrol ettim. Bu yazıda hem açığın ne olduğunu hem de kendi sunucunuzda nasıl kontrol edeceğinizi anlatıyorum.
PHP2Shell nedir?
İki ayrı açıktan oluşuyor: CVE-2026-109618 ve CVE-2026-109619. İkisi de oturum açmadan uzaktan kod çalıştırmaya (RCE) izin veriyor ve CVSS v4.0’da 9.2 puan aldı.
- 109618: Bellek yetmediğinde PHP, isteğe ait verileri yarı hazırlanmış halde bırakabiliyor.
- 109619: Bir isteğe ait iç veri, belleği serbest bırakıldıktan sonra da sonraki isteklerde kullanılabiliyor.
Asıl korkutucu kısım şu: açık uygulamada değil, PHP yorumlayıcısının kendisinde. WordPress, Laravel, Drupal ya da tek satırlık bir “Hello World” fark etmiyor; web isteği karşılayan her açık PHP sürümü risk altında. PHP-FPM, Apache mod_php, php-cgi, FrankenPHP ve LiteSpeed hepsi etkileniyor.
Zaman çizelgesi
- 20 Ekim: Ayrıntılar, planlanan duyurudan önce sızdı. PHP ekibi yamayı bir gün öne çekti.
- 21 Ekim: Yamalı sürümler yayımlandı: 8.5.12, 8.4.27, 8.3.36 ve 8.2.35. Aynı gün güvenlik firmaları aktif istismar denemeleri gördüklerini bildirdi.
- Amazon’un tehdit istihbaratına göre istismar denemeleri aslında ifşadan önce, 17 Ekim’de başlamıştı.
Bu son madde önemli: yamayı yüklemek yetmiyor, 17 Ekim’den bu yana sunucuya bir şey bulaşıp bulaşmadığına da bakmak gerekiyor.
Ubuntu’daki tuzak: sürüm numarası değişmiyor
Ubuntu yamayı kendi paketine “backport” ediyor. Ubuntu 24.04’te yamalı paket 8.3.6-0ubuntu0.24.04.13. Ama php -v yazdığınızda hâlâ 8.3.6 görüyorsunuz. “8.3.36 değilse açıktır” diye düşünürseniz, yamalı sunucuyu açık sanırsınız.
Doğru kontrol, paket değişiklik kaydında CVE numarasının geçip geçmediğine bakmak:
zgrep -cE 'CVE-2026-10961[89]' /usr/share/doc/php8.3-fpm/changelog.Debian.gz
Sonuç 0’dan büyükse yama yüklü.
Benim kontrol listem
Her sunucuda aynı sırayı izledim.
1. PHP var mı, nerede çalışıyor?
dpkg -l | awk '/^ii/ && /(php[0-9.]+|libapache2-mod-php)/ {print $2, $3}'
ps -eo cmd | grep -E '[p]hp-fpm: master|[a]pache2'
Docker kullanıyorsanız host’a bakmak yetmez, her konteynerin içine de bakın:
for c in $(docker ps --format '{{.Names}}'); do
echo -n "$c: "
docker exec "$c" sh -c 'command -v php >/dev/null && php -v | head -1 || echo "PHP yok"'
done
2. Yama
apt update && apt install --only-upgrade 'php8.3*'
systemctl restart php8.3-fpm
Hemen yamalayamıyorsanız geçici önlem olarak session.upload_progress.enabled=0 ayarlanabilir. Ama bu yalnızca 109619’u kapatıyor, 109618’e etkisi yok.
3. Sızma izi
# 17 Ekim'den sonra değişen PHP dosyaları
find /var/www -name '*.php' -newermt '2026-10-17' -type f
# Geçici klasörler
ls -la /tmp /dev/shm
# Zamanlanmış görevler
crontab -l; ls -la /etc/cron.d; crontab -u www-data -l
# Dışarıya açık bağlantılar
ss -tupn state established
Dikkat edilecekler: tanımadığınız .php dosyaları, www-data kullanıcısına ait cron işleri, /tmp içinde çalıştırılabilir dosyalar ve web sunucusu sürecinden dışarıya açılmış bağlantılar.
Benim sonucum
Beş sunucunun hiçbirinde PHP yoktu. Uygulamalarımın hepsi Node.js üzerinde, bir kısmı Docker konteynerlerinde çalışıyor. Yani PHP2Shell beni doğrudan etkilemedi.
Ama loglara bakınca botların boş durmadığını gördüm. allow_url_include, cgi-bin/.%2e/.%2e/bin/sh, phpunit/eval-stdin.php gibi eski açıkları deneyen yüzlerce istek vardı. Bir sitede de botlar wp-config.php dosyasını okumaya çalışmış. Hepsi 404 ya da ana sayfa ile karşılanmış, çünkü sunucuda PHP olmadığı için çalışacak bir şey yoktu.
Bu kontrol vesilesiyle ertelenmiş başka işleri de fark ettim: aylardır bekleyen çekirdek güncellemeleri, “restart required” uyarıları ve şifreyle giriş yapılan root hesapları. Büyük bir açık çıkmasını beklemeden bunları düzenli yapmak gerekiyor.
Kısaca
- PHP çalıştırıyorsanız bugün yamayın ve yamayı CVE numarasıyla doğrulayın.
- Ubuntu’da sürüm numarasına değil changelog’a bakın.
- 17 Ekim sonrasını tarayın; yama geçmişte olanı silmez.
- PHP kullanmıyorsanız bile loglara bakmaya değer, kimlerin kapınızı çaldığını görürsünüz.
Kaynaklar: PHP2Shell (Wikipedia), Tenable SSS, The Hacker News, Ubuntu USN-8948-1.
- PHP2Shell
- güvenlik
- Ubuntu
- sunucu yönetimi
- CVE-2026-109618