Skip to content

Security and maintainability concerns due to use of new Function and unvalidated template expressions #329

@Abderrahmane-MERSTANI

Description

@Abderrahmane-MERSTANI

Description
Le moteur de template doU.js compile les templates en générant dynamiquement du code JavaScript à l’aide de new Function.
Bien que cela permette de bonnes performances, cette approche introduit des risques de sécurité et des problèmes de maintenabilité, surtout lorsque les templates ne sont pas entièrement fiables.

Problème identifié
Dans la fonction doU.template :

return new Function(conf.varname, str);

Le contenu du template est directement transformé en code JavaScript exécutable.

Toute expression entre {{ }}, {{= }} ou {{! }} est évaluée sans validation.

Si un template provient d’une source externe (ex: utilisateur, base de données), cela peut mener à :

Injection de code JavaScript

Failles XSS côté client

Exécution de code arbitraire côté serveur (Node.js)

Étapes pour reproduire

Fournir un template contenant du JavaScript malveillant :

{{= (function(){ alert('XSS') })() }}

Compiler le template avec doU.template

Exécuter la fonction compilée

Observer que le code est exécuté sans restriction

Comportement attendu

Les templates devraient être traités comme du contenu logique, pas comme du code exécutable brut

Il devrait être impossible d’exécuter du JavaScript arbitraire à partir d’un template non fiable

Comportement actuel

Toute expression JavaScript valide est exécutée

Aucune sandbox, validation ou mode sécurisé n’est proposé

Impact

❗ Risque de sécurité élevé (XSS / RCE)

❗ Incompatible avec des politiques CSP strictes

❗ Difficile à auditer et sécuriser dans des applications modernes

Suggestion de correction

Documenter explicitement que doU.js ne doit pas être utilisé avec des templates non fiables

Ajouter une option de configuration pour :

Désactiver l’évaluation directe ({{ }})

Autoriser uniquement l’interpolation simple

Envisager :

Un mode “safe” sans new Function

Un parsing plus strict des expressions

Une alternative plus moderne et sécurisée

Contexte

Version concernée : 0.1.2

Type : Sécurité / Design

Environnement : Navigateur & Node.js

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions