Une vulnérabilité de sécurité élevée (CVSS 7.3), identifiée sous le nom de CVE-2025-64500, a été découverte dans le framework PHP Symfony. Cette faille permet à un attaquant de contourner les règles de contrôle d’accès (ACL) définies dans votre application, exposant potentiellement des sections sensibles (comme des back-offices) à des utilisateurs non autorisés.
Voici ce que vous devez savoir et comment vous protéger.
🚨 Le problème : L’absence de “slash”
La vulnérabilité se situe dans la manière dont le composant symfony/http-foundation, plus précisément la classe Request, analyse les informations de chemin (PATH_INFO) d’une URL.
- Comportement attendu : Un chemin d’URL généré par Symfony doit toujours commencer par un slash (
/). Par exemple :/admin/dashboardou/api/users. - La faille : Dans certaines configurations de serveur web et avec une requête spécifiquement forgée, il est possible de tromper le composant pour qu’il génère un chemin sans ce slash initial. Par exemple :
admin/dashboard.
Ce détail, qui semble mineur, a des conséquences majeures sur la sécurité.
⚠️ L’impact : Un contournement de security.yaml
Le danger de cette faille réside dans la manière dont le pare-feu de Symfony évalue les règles de access_control que vous définissez dans votre fichier config/packages/security.yaml.
La plupart des développeurs protègent des sections de leur site en se basant sur une expression régulière (regex) qui attend un slash au début.
Exemple concret de contournement
Imaginons un fichier security.yaml tout à fait standard pour protéger un back-office :
# config/packages/security.yaml
security:
# ...
access_control:
# RÈGLE 1 : Protéger le back-office
# "Toute URL commençant par /admin doit avoir ROLE_ADMIN"
- { path: '^/admin', roles: ROLE_ADMIN }
# RÈGLE 2 : Le reste du site est public
- { path: '^/', roles: IS_AUTHENTICATED_ANONYMOUSLY }
Voyons la différence entre une requête normale et une attaque :
- Requête Normale (Bloquée 🛡️)
- Un utilisateur visite https://mon-site.com/admin.
- Symfony analyse le chemin comme
/admin. - Le pare-feu évalue les règles : Le chemin
/admincorrespond-il à la regex^/admin? Oui. - Résultat : La RÈGLE 1 s’applique. L’accès est refusé et l’utilisateur est redirigé vers la page de connexion.
- Requête d’Attaque (CVE-2025-64500 ⚠️)
- Un attaquant forge une requête malveillante.
- À cause de la faille, votre version vulnérable de Symfony analyse le chemin comme
admin(notez l’absence du/). - Le pare-feu évalue les règles :
- Le chemin admin correspond-il à la regex
^/admin? Non. - Le chemin admin correspond-il à la regex
^/? Non.
- Le chemin admin correspond-il à la regex
- Résultat : Aucune règle de
access_controlne correspond ! Le pare-feu n’intercepte pas la requête. L’attaquant accède directement au contrôleur d’administration sans être authentifié.
✅ Suis-je affecté ?
Vous êtes vulnérable si vous utilisez l’une des versions suivantes du composant symfony/http-foundation :
- Toutes les versions de la branche 5.4 antérieures à 5.4.50
- Toutes les versions de la branche 6.4 antérieures à 6.4.29
- Toutes les versions de la branche 7.3 antérieures à 7.3.7
Pour vérifier votre version, ouvrez votre fichier composer.lock et recherchez la ligne symfony/http-foundation.
🛠️ La solution : Mettez à jour immédiatement !
La correction est disponible et simple à appliquer. Vous devez mettre à jour votre dépendance symfony/http-foundation vers l’une des versions corrigées, pour se faire exécutez la commande Composer suivante pour mettre à jour spécifiquement le paquet :
composer update "symfony/http-foundation"
Le correctif appliqué force le PATH_INFO à toujours commencer par un /, garantissant ainsi que vos règles de access_control ne pourront plus être contournées de cette manière.
Bon patch !