Description
La bibliothèque doT.js génère dynamiquement des fonctions JavaScript à partir de templates en utilisant new Function.
Cette approche peut introduire des risques de sécurité, notamment des vulnérabilités de type code injection / XSS, lorsque les templates ou les données ne sont pas totalement maîtrisés.
Problème identifié
Dans plusieurs parties du code (ex: resolveDefs et doT.template) :
new Function("def", "def['"+code+"']=" + value)(def);
et
return new Function(c.varname, str);
Le contenu des templates est injecté directement dans du code JavaScript exécuté dynamiquement.
Si un template provient d’une source externe ou utilisateur, un attaquant pourrait injecter du code malveillant.
Cela peut conduire à :
Exécution de code arbitraire
XSS côté client
Compromission de l’environnement JavaScript
Étapes pour reproduire
Utiliser un template provenant d’une entrée utilisateur non filtrée
Injecter du JavaScript dans une expression {{ }} ou {{= }}
Compiler et exécuter le template
Observer que le code injecté est exécuté
Comportement attendu
Les templates devraient être traités de manière sécurisée
L’exécution de code arbitraire ne devrait pas être possible à partir d’entrées non fiables
Comportement actuel
Le moteur de template exécute directement le code généré sans sandbox ni validation
Toute expression valide JavaScript est exécutée
Impact
Risque de failles de sécurité critiques
Inadapté pour des environnements exposés (applications web publiques)
Problématique dans des contextes modernes avec CSP strictes
Suggestion de correction
Documenter clairement que doT.js ne doit pas être utilisé avec des templates non fiables
Ajouter une option pour désactiver evaluate ({{ }}) et use
Envisager :
Un mode “safe” sans new Function
Une validation ou un parsing plus strict des expressions
Une alternative plus sécurisée pour les environnements sensibles
Contexte
Version concernée : 1.1.1
Environnement : navigateur / Node.js
Type : Sécurité / Design
Description
La bibliothèque doT.js génère dynamiquement des fonctions JavaScript à partir de templates en utilisant new Function.
Cette approche peut introduire des risques de sécurité, notamment des vulnérabilités de type code injection / XSS, lorsque les templates ou les données ne sont pas totalement maîtrisés.
Problème identifié
Dans plusieurs parties du code (ex: resolveDefs et doT.template) :
new Function("def", "def['"+code+"']=" + value)(def);
et
return new Function(c.varname, str);
Le contenu des templates est injecté directement dans du code JavaScript exécuté dynamiquement.
Si un template provient d’une source externe ou utilisateur, un attaquant pourrait injecter du code malveillant.
Cela peut conduire à :
Exécution de code arbitraire
XSS côté client
Compromission de l’environnement JavaScript
Étapes pour reproduire
Utiliser un template provenant d’une entrée utilisateur non filtrée
Injecter du JavaScript dans une expression {{ }} ou {{= }}
Compiler et exécuter le template
Observer que le code injecté est exécuté
Comportement attendu
Les templates devraient être traités de manière sécurisée
L’exécution de code arbitraire ne devrait pas être possible à partir d’entrées non fiables
Comportement actuel
Le moteur de template exécute directement le code généré sans sandbox ni validation
Toute expression valide JavaScript est exécutée
Impact
Risque de failles de sécurité critiques
Inadapté pour des environnements exposés (applications web publiques)
Problématique dans des contextes modernes avec CSP strictes
Suggestion de correction
Documenter clairement que doT.js ne doit pas être utilisé avec des templates non fiables
Ajouter une option pour désactiver evaluate ({{ }}) et use
Envisager :
Un mode “safe” sans new Function
Une validation ou un parsing plus strict des expressions
Une alternative plus sécurisée pour les environnements sensibles
Contexte
Version concernée : 1.1.1
Environnement : navigateur / Node.js
Type : Sécurité / Design