Comprendre et atténuer la vulnérabilité XSS de Jinja2 (CVE-2024-22195)
18 janvier 2024
0 minutes de lectureLe 11 janvier 2024, une importante vulnérabilité de sécurité a été révélée dans Jinja2, une bibliothèque de modèles Python très utilisée. Identifiée sous le nom CVE-2024-22195, cette vulnérabilité de type cross-site scripting (XSS) suscite des inquiétudes en raison de son impact sur de nombreux projets. Jinja2 totalise plus de 33 millions de téléchargements hebdomadaires, près de 10 000 étoiles sur GitHub et plus de 90 000 projets dépendants.
La vulnérabilité touche toutes les versions antérieures à la 3.1.3. La version corrigée 3.1.3 est la seule option sûre. À noter que la version la plus téléchargée, la 3.1.2, reste vulnérable et largement utilisée.

Comment vérifier si mon projet utilise une version vulnérable de Jinja2 ?
Pour vérifier la version de Jinja2 utilisée dans votre projet, consultez le fichier requirements.txt ou exécutez pip list | grep Jinja2 dans l’environnement virtuel de votre projet.
Comprendre l’utilisation de Jinja2 dans le développement Python
La popularité de Jinja2 s’explique par sa capacité à créer des modèles HTML dynamiques à l’aide d’une syntaxe proche de celle de Python. La bibliothèque propose notamment l’héritage de modèles, l’échappement automatique du HTML pour prévenir les attaques XSS provenant de données non fiables, ainsi que la prise en charge de l’internationalisation.
Les développeurs l’installent généralement depuis PyPI à l’aide de la commande pip install Jinja2. Voici à quoi pourrait ressembler un exemple d’utilisation dans un projet :
Détails de la vulnérabilité XSS
CVE-2024-22195 est causée par le filtre xmlattr de Jinja2 lorsque des clés contenant des espaces sont utilisées à partir de données fournies par l’utilisateur. Cette faille permet aux attaquants d’injecter des attributs HTML arbitraires dans les modèles, de contourner le mécanisme d’échappement automatique et, potentiellement, d’exécuter des scripts non fiables dans le navigateur d’un utilisateur.
Voici une reproduction complète de la vulnérabilité cross-site scripting de Jinja2 sous forme de preuve de concept, fournie par Calum Hutton de l’équipe de recherche en sécurité de Snyk, qui a signalé cette vulnérabilité :
Reproduire la vulnérabilité XSS CVE-2024-22195 de Jinja2
Créez un nouvel environnement virtuel Python 3 :
python3 -m venv myenvsource myenv/bin/activate
Remarque : si vous débutez dans la gestion de différents environnements de développement Python, prenez quelques minutes pour lire notre guide sur la maîtrise des environnements virtuels Python : guide complet de venv, Docker et de la sécurisation de votre code.
Créez ensuite le fichier de dépendances Python requirements.txt, utilisé par le gestionnaire de paquets pip, et ajoutez-y des bibliothèques courantes du registre PyPI :
Nous pouvons maintenant utiliser Snyk pour analyser le projet et vérifier si l’une de nos dépendances Python est vulnérable. Si vous utilisez macOS, installez d’abord Snyk avec brew, la méthode la plus rapide pour démarrer :
Remarque : pour les autres systèmes d’exploitation, comme Windows ou Linux, consultez les instructions d’installation dans Snyk User Docs.
Vous devez vous authentifier auprès de Snyk. Exécutez snyk auth, puis suivez les instructions pour vous connecter dans le navigateur. Snyk CLI récupérera automatiquement vos identifiants d’API.
Nous sommes maintenant prêts à analyser notre projet Python. Exécutez la commande suivante :
Les résultats de l’analyse Snyk s’afficheront :
Snyk a détecté avec succès la version vulnérable de Jinja2 utilisée dans notre projet (version 3.1.2) et a recommandé un correctif depuis l’interface de ligne de commande.
C’est aussi l’occasion de vous signaler que vous pouvez utiliser une extension Snyk dans votre IDE pour analyser votre propre code Python et vos applications Python conteneurisées, en plus des dépendances tierces de PyPI.
La vulnérabilité XSS de Jinja2 est-elle facile à exploiter ?
La facilité d’exploitation de cette vulnérabilité dépend de l’application concernée et de la façon dont elle utilise Jinja2. Toutefois, en raison de la nature des vulnérabilités XSS, il est recommandé de la traiter comme une priorité élevée.
Atténuer la vulnérabilité de Jinja2 et assurer une surveillance continue de la sécurité
Les développeurs sont invités à passer immédiatement à Jinja2 3.1.3 pour corriger cette vulnérabilité.
En outre, des outils comme Snyk sont essentiels pour surveiller en continu les vulnérabilités. Snyk détecte le code et les bibliothèques vulnérables grâce à son extension IDE, et joue également un rôle clé dans l’analyse des applications conteneurisées avec Docker qui intègrent cette dépendance vulnérable.
Comment protéger mon projet contre la vulnérabilité XSS de Jinja2 ?
Mettez Jinja2 à jour vers la version 3.1.3 ou une version ultérieure. Pour cela, modifiez votre fichier requirements.txt en indiquant Jinja2>=3.1.3, puis exécutez pip install -U -r requirements.txt.
Ressources de sécurité pour les développeurs : quelle est la suite ?
La découverte de CVE-2024-22195 dans Jinja2 rappelle l’importance de maintenir les dépendances à jour et d’utiliser des outils comme Snyk pour assurer une surveillance continue de la sécurité. En restant informés et proactifs, les développeurs peuvent protéger leurs projets contre ce type de vulnérabilité.
Découvrez les attaques XSS en Python avec Snyk Learn : Les attaques XSS en Python
Aide-mémoire des bonnes pratiques de sécurité Python : Bonnes pratiques de sécurité Python
Maîtriser les environnements virtuels Python : Environnements virtuels Python
Bonnes pratiques pour conteneuriser des applications Python avec Docker : Conteneuriser Python avec Docker
Quelles autres bonnes pratiques de sécurité sont recommandées aux utilisateurs de Jinja2 ?
Outre la mise à jour régulière de Jinja2, les utilisateurs doivent suivre les bonnes pratiques de sécurité générales : valider et assainir toutes les données saisies par les utilisateurs, mettre en place des politiques de sécurité du contenu et effectuer régulièrement des audits de sécurité.


